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

Francisco Jerez currojerez at riseup.net
Mon Nov 25 09:43:52 PST 2013


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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 229 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20131125/9952a5de/attachment.pgp>


More information about the mesa-dev mailing list