[Mesa-dev] [PATCH 3/3] mesa: add gl_context::NewDriverState and use it for vertex arrays
Marek Olšák
maraeo at gmail.com
Mon May 7 16:35:19 PDT 2012
On Mon, May 7, 2012 at 6:19 PM, Brian Paul <brian.e.paul at gmail.com> wrote:
> Looks good, but it took me a while to understand exactly what's going
> on. Suggestions for more/improved comments below.
>
> On Tue, Apr 24, 2012 at 4:00 PM, Marek Olšák <maraeo at gmail.com> wrote:
>> The vbo module recomputes its states if _NEW_ARRAY is set, so it shouldn't use
>> the same flag to notify the driver. Since we've run out of bits in NewState
>> and NewState is for core Mesa anyway, we need to find another way.
>>
>> This patch is the first to start decoupling the state flags meant only
>> for core Mesa and those only for drivers.
>>
>> The idea is to have two flag sets:
>> - gl_context::NewState - used by core Mesa only
>> - gl_context::NewDriverState - used by drivers only
>
> "used by drivers only. The flags defined by the driver and
> opaque/meaningless to core Mesa."
>
>
>>
>> It makes perfect sense to use NewState|=_NEW_ARRAY to notify the vbo module
>> that the user changed vertex arrays, and the vbo module in turn sets
>> a driver-specific flag to notify the driver that it should update its vertex
>> array bindings.
>>
>> The driver decides which bits of NewDriverState should be set and stores them
>> in gl_context::DriverFlags. Then, Core Mesa can do this:
>> ctx->NewDriverState |= ctx->DriverFlags.NewArray;
>>
>> This patch implements this behavior and adapts st/mesa.
>> DriverFlags.NewArray is set to ST_NEW_VERTEX_ARRAYS.
>>
>> Core Mesa only sets NewDriverState. It's the driver's responsibility to read
>> it whenever it wants and reset it to 0.
>> ---
>> src/mesa/main/context.c | 2 ++
>> src/mesa/main/mtypes.h | 14 ++++++++++++++
>> src/mesa/state_tracker/st_cb_rasterpos.c | 5 ++++-
>> src/mesa/state_tracker/st_context.c | 6 ++++++
>> src/mesa/state_tracker/st_context.h | 1 +
>> src/mesa/state_tracker/st_draw.c | 12 +++++++++---
>> src/mesa/vbo/vbo_context.h | 2 +-
>> src/mesa/vbo/vbo_exec_array.c | 2 +-
>> src/mesa/vbo/vbo_exec_draw.c | 2 +-
>> src/mesa/vbo/vbo_rebase.c | 2 ++
>> src/mesa/vbo/vbo_save_draw.c | 2 +-
>> src/mesa/vbo/vbo_split_copy.c | 2 ++
>> src/mesa/vbo/vbo_split_inplace.c | 2 ++
>> 13 files changed, 46 insertions(+), 8 deletions(-)
>>
>> diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
>> index d75351c..7e2ac98 100644
>> --- a/src/mesa/main/context.c
>> +++ b/src/mesa/main/context.c
>> @@ -792,6 +792,7 @@ init_attrib_groups(struct gl_context *ctx)
>>
>> /* Miscellaneous */
>> ctx->NewState = _NEW_ALL;
>> + ctx->NewDriverState = ~0;
>> ctx->ErrorValue = (GLenum) GL_NO_ERROR;
>> ctx->ResetStatus = (GLenum) GL_NO_ERROR;
>> ctx->varying_vp_inputs = VERT_BIT_ALL;
>> @@ -1290,6 +1291,7 @@ _mesa_copy_context( const struct gl_context *src, struct gl_context *dst,
>> /* XXX FIXME: Call callbacks?
>> */
>> dst->NewState = _NEW_ALL;
>> + dst->NewDriverState = ~0;
>> }
>> #endif
>>
>> diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
>> index eb103ad..7f01514 100644
>> --- a/src/mesa/main/mtypes.h
>> +++ b/src/mesa/main/mtypes.h
>> @@ -3255,6 +3255,17 @@ typedef enum
>> API_OPENGLES2
>> } gl_api;
>>
>> +/**
>> + * Driver-specific state flags.
>> + *
>> + * These are or'd with gl_context::NewDriverState to notify a driver about
>> + * a state change. The driver gets to decide what bits should be set through
>> + * this structure.
>
> Just to be clear (and add to the comment), the bits here are set once
> by the driver during context creation and never changed, right? Also,
Yes, that's right.
> could you make it a bit more clear that the values of the flags are
> defined by the driver and opaque to core Mesa?
Okay I will do that.
Marek
More information about the mesa-dev
mailing list