[Mesa-dev] [PATCH V2 14/15] vbo: map indirect buffer and extract params if doing sw primitive restart

Brian Paul brianp at vmware.com
Thu Nov 7 09:34:52 PST 2013


On 11/07/2013 10:23 AM, Eric Anholt wrote:
> Chris Forbes <chrisf at ijw.co.nz> writes:
>
>> V2: Check for mapping failure (thanks Brian)
>>
>> Signed-off-by: Chris Forbes <chrisf at 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



More information about the mesa-dev mailing list