summaryrefslogtreecommitdiffstats
path: root/src/mesa
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa')
-rw-r--r--src/mesa/main/shaderimage.c19
-rw-r--r--src/mesa/main/shaderimage.h6
-rw-r--r--src/mesa/main/texobj.c5
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);
+ }
}
}