diff options
Diffstat (limited to 'src/mesa')
-rw-r--r-- | src/mesa/main/shaderimage.c | 19 | ||||
-rw-r--r-- | src/mesa/main/shaderimage.h | 6 | ||||
-rw-r--r-- | src/mesa/main/texobj.c | 5 |
3 files changed, 23 insertions, 7 deletions
diff --git a/src/mesa/main/shaderimage.c b/src/mesa/main/shaderimage.c index 2d8693150b1..48e3e09dd5d 100644 --- a/src/mesa/main/shaderimage.c +++ b/src/mesa/main/shaderimage.c @@ -394,17 +394,24 @@ is_image_format_supported(const struct gl_context *ctx, GLenum format) } } +struct gl_image_unit +_mesa_default_image_unit(struct gl_context *ctx) +{ + const struct gl_image_unit u = { + .Access = GL_READ_ONLY, + .Format = GL_R8, + ._ActualFormat = _mesa_get_shader_image_format(GL_R8) + }; + return u; +} + void _mesa_init_image_units(struct gl_context *ctx) { unsigned i; - for (i = 0; i < ARRAY_SIZE(ctx->ImageUnits); ++i) { - struct gl_image_unit *u = &ctx->ImageUnits[i]; - u->Access = GL_READ_ONLY; - u->Format = GL_R8; - u->_ActualFormat = _mesa_get_shader_image_format(u->Format); - } + for (i = 0; i < ARRAY_SIZE(ctx->ImageUnits); ++i) + ctx->ImageUnits[i] = _mesa_default_image_unit(ctx); } static GLboolean diff --git a/src/mesa/main/shaderimage.h b/src/mesa/main/shaderimage.h index d08ece81f11..bbe088a2459 100644 --- a/src/mesa/main/shaderimage.h +++ b/src/mesa/main/shaderimage.h @@ -43,6 +43,12 @@ mesa_format _mesa_get_shader_image_format(GLenum format); /** + * Get a single image unit struct with the default state. + */ +struct gl_image_unit +_mesa_default_image_unit(struct gl_context *ctx); + +/** * Initialize a context's shader image units to the default state. */ void diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c index cd7cfd6a4fb..395e4d3359f 100644 --- a/src/mesa/main/texobj.c +++ b/src/mesa/main/texobj.c @@ -37,6 +37,7 @@ #include "hash.h" #include "imports.h" #include "macros.h" +#include "shaderimage.h" #include "teximage.h" #include "texobj.h" #include "texstate.h" @@ -1411,8 +1412,10 @@ unbind_texobj_from_image_units(struct gl_context *ctx, for (i = 0; i < ctx->Const.MaxImageUnits; i++) { struct gl_image_unit *unit = &ctx->ImageUnits[i]; - if (texObj == unit->TexObj) + if (texObj == unit->TexObj) { _mesa_reference_texobj(&unit->TexObj, NULL); + *unit = _mesa_default_image_unit(ctx); + } } } |