[Mesa-dev] [PATCH 10/11] mesa: Validate image units when the texture state changes.

Chris Forbes chrisf at ijw.co.nz
Mon Nov 25 10:00:27 PST 2013


Ah, of course; so it's not a factor for driver which don't expose the
extension at all.

The `unused` side still stands as a vague concern, I think -- we
currently pay for lots of things that most apps don't use.

On Tue, Nov 26, 2013 at 6:43 AM, Francisco Jerez <currojerez at riseup.net> wrote:
> Chris Forbes <chrisf at ijw.co.nz> writes:
>
>> It would be nice not to have to touch this memory when the extension
>> is unused|unsupported, but that might be a problem for another
>> patch...
>>
> How do you mean?  If the driver doesn't know about this extension
> ctx->Const.MaxImageUnits will be zero and no memory will be touched.
>
>> -- Chris
>>
>> On Mon, Nov 25, 2013 at 6:00 PM, Francisco Jerez <currojerez at riseup.net> wrote:
>>> ---
>>>  src/mesa/main/shaderimage.c | 11 +++++++++++
>>>  src/mesa/main/shaderimage.h |  9 +++++++++
>>>  src/mesa/main/texstate.c    |  3 +++
>>>  3 files changed, 23 insertions(+)
>>>
>>> diff --git a/src/mesa/main/shaderimage.c b/src/mesa/main/shaderimage.c
>>> index 627366b..3a59409 100644
>>> --- a/src/mesa/main/shaderimage.c
>>> +++ b/src/mesa/main/shaderimage.c
>>> @@ -368,6 +368,17 @@ validate_image_unit(struct gl_context *ctx, struct gl_image_unit *u)
>>>     return GL_TRUE;
>>>  }
>>>
>>> +void
>>> +_mesa_validate_image_units(struct gl_context *ctx)
>>> +{
>>> +   int i;
>>> +
>>> +   for (i = 0; i < ctx->Const.MaxImageUnits; ++i) {
>>> +      struct gl_image_unit *u = &ctx->ImageUnits[i];
>>> +      u->_Valid = validate_image_unit(ctx, u);
>>> +   }
>>> +}
>>> +
>>>  static GLboolean
>>>  validate_bind_image_texture(struct gl_context *ctx, GLuint unit,
>>>                              GLuint texture, GLint level, GLboolean layered,
>>> diff --git a/src/mesa/main/shaderimage.h b/src/mesa/main/shaderimage.h
>>> index f9d550b..aaecc5d 100644
>>> --- a/src/mesa/main/shaderimage.h
>>> +++ b/src/mesa/main/shaderimage.h
>>> @@ -31,6 +31,15 @@
>>>
>>>  struct gl_context;
>>>
>>> +/**
>>> + * Recalculate the \c _Valid flag of a context's shader image units.
>>> + *
>>> + * To be called when the state of any texture bound to an image unit
>>> + * changes.
>>> + */
>>> +void
>>> +_mesa_validate_image_units(struct gl_context *ctx);
>>> +
>>>  void GLAPIENTRY
>>>  _mesa_BindImageTexture(GLuint unit, GLuint texture, GLint level,
>>>                         GLboolean layered, GLint layer, GLenum access,
>>> diff --git a/src/mesa/main/texstate.c b/src/mesa/main/texstate.c
>>> index ad80dcf..7720965 100644
>>> --- a/src/mesa/main/texstate.c
>>> +++ b/src/mesa/main/texstate.c
>>> @@ -35,6 +35,7 @@
>>>  #include "context.h"
>>>  #include "enums.h"
>>>  #include "macros.h"
>>> +#include "shaderimage.h"
>>>  #include "texobj.h"
>>>  #include "teximage.h"
>>>  #include "texstate.h"
>>> @@ -674,6 +675,8 @@ update_texture_state( struct gl_context *ctx )
>>>
>>>     if (!fprog || !vprog)
>>>        update_texgen(ctx);
>>> +
>>> +   _mesa_validate_image_units(ctx);
>>>  }
>>>
>>>
>>> --
>>> 1.8.3.4
>>>
>>> _______________________________________________
>>> mesa-dev mailing list
>>> mesa-dev at lists.freedesktop.org
>>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list