Maybe it would be better to remove the const from the indirect parameter back in 1/15.
This was added in v2 of Christoph's original patches in response to a suggestion from Brian; but if everyone ends up casting it away, then it's not useful. -- Chris On Fri, Nov 8, 2013 at 7:29 AM, Eric Anholt <e...@anholt.net> wrote: > Brian Paul <bri...@vmware.com> writes: > >> 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. > > But it sure does modify the indirect buffer object's struct, since it's > getting used to do the call. In the i965 case, the struct's "what bits > have been referenced by the GPU since our last stall?" get modified both > in the normal draw path and in the fallback path. > > Even state_tracker modifies the struct: > > obj->Pointer = pipe_buffer_map_range(pipe, > st_obj->buffer, > offset, length, > flags, > &st_obj->transfer); > > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev