On 11/07/2013 10:23 AM, Eric Anholt wrote:
Chris Forbes <chr...@ijw.co.nz> writes:

V2: Check for mapping failure (thanks Brian)

Signed-off-by: Chris Forbes <chr...@ijw.co.nz>
---
  src/mesa/vbo/vbo_primitive_restart.c | 33 +++++++++++++++++++++++++++++++++
  1 file changed, 33 insertions(+)

diff --git a/src/mesa/vbo/vbo_primitive_restart.c 
b/src/mesa/vbo/vbo_primitive_restart.c
index 48d04e1..ee84f10 100644
--- a/src/mesa/vbo/vbo_primitive_restart.c
+++ b/src/mesa/vbo/vbo_primitive_restart.c
@@ -180,6 +180,39 @@ vbo_sw_primitive_restart(struct gl_context *ctx,
     GLboolean map_ib = ib->obj->Name && !ib->obj->Pointer;
     void *ptr;

+   /* If there is an indirect buffer, map it and extract the draw params */
+   if (indirect && prims[0].is_indirect) {
+      struct _mesa_prim new_prim = *prims;
+      struct _mesa_index_buffer new_ib = *ib;
+      const uint32_t *indirect_params;
+      if (!ctx->Driver.MapBufferRange(ctx, 0, indirect->Size, GL_MAP_READ_BIT,
+            (struct gl_buffer_object *)indirect)) {

Are you just casting away the const here?  indirect should definitely
not be const, because you're modifying it in calls like this.

Yeah, he's casting away const, but the buffer's being mapped for read-only. An indirect drawing call should never modify the indirect buffer's contents.

To avoid the cast we'd need a const-qualified ctx->Driver.MapBufferRange() function, but the implementation of that would then probably often have to cast-away const too.

I think the above is OK.

-Brian

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to