mesa: Get rid of texture-dependent image unit derived state.
authorFrancisco Jerez <currojerez@riseup.net>
Sat, 29 Aug 2015 14:03:08 +0000 (17:03 +0300)
committerFrancisco Jerez <currojerez@riseup.net>
Fri, 9 Oct 2015 14:49:01 +0000 (17:49 +0300)
The point is to avoid having to re-validate all image units when
_NEW_TEXTURE is flagged, which can be expensive if the driver exposes
a large number of image units.  This has been reported to fix a 36%
performance regression in the Synmark2 Multithread benchmark on the
i965 driver which exposes 192 image units.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=91788
Reported-by: Wendy Wang <wendy.wang@intel.com>
Tested-by: Ye Tian <yex.tian@intel.com>
CC: "11.0" <mesa-stable@lists.freedesktop.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
src/mesa/main/mtypes.h
src/mesa/main/shaderimage.c
src/mesa/main/shaderimage.h
src/mesa/main/texstate.c

index 288d75790a496a93d4b5160e35503b6daf710e4a..5272372eb8eb68db16b159484e2a6af15ae3d5e4 100644 (file)
@@ -4070,13 +4070,6 @@ struct gl_image_unit
     */
    GLboolean Layered;
 
-   /**
-    * GL_TRUE if the state of this image unit is valid and access from
-    * the shader is allowed.  Otherwise loads from this unit should
-    * return zero and stores should have no effect.
-    */
-   GLboolean _Valid;
-
    /**
     * Layer of the texture object bound to this unit as specified by the
     * application.
index 0f0200a5b7754134d8c69c8df42d1443ad61feea..c4ebf4201fbf8efd50d54aa8d9318f3d01fbc85c 100644 (file)
@@ -474,17 +474,6 @@ _mesa_is_image_unit_valid(struct gl_context *ctx, struct gl_image_unit *u)
    return GL_TRUE;
 }
 
-void
-_mesa_validate_image_units(struct gl_context *ctx)
-{
-   unsigned 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,
@@ -568,7 +557,6 @@ _mesa_BindImageTexture(GLuint unit, GLuint texture, GLint level,
    u->Access = access;
    u->Format = format;
    u->_ActualFormat = _mesa_get_shader_image_format(format);
-   u->_Valid = _mesa_is_image_unit_valid(ctx, u);
 
    if (u->TexObj && _mesa_tex_target_is_layered(u->TexObj->Target)) {
       u->Layered = layered;
@@ -704,7 +692,6 @@ _mesa_BindImageTextures(GLuint first, GLsizei count, const GLuint *textures)
          u->Access = GL_READ_WRITE;
          u->Format = tex_format;
          u->_ActualFormat = _mesa_get_shader_image_format(tex_format);
-         u->_Valid = _mesa_is_image_unit_valid(ctx, u);
       } else {
          /* Unbind the texture from the unit */
          _mesa_reference_texobj(&u->TexObj, NULL);
@@ -714,7 +701,6 @@ _mesa_BindImageTextures(GLuint first, GLsizei count, const GLuint *textures)
          u->Access = GL_READ_ONLY;
          u->Format = GL_R8;
          u->_ActualFormat = MESA_FORMAT_R_UNORM8;
-         u->_Valid = GL_FALSE;
       }
    }
 
index 14a544fca8a78acad8353bc447275b923e0a68d2..94ee814a71627c3d092ed433dcdce719198a947f 100644 (file)
@@ -65,15 +65,6 @@ _mesa_init_image_units(struct gl_context *ctx);
 GLboolean
 _mesa_is_image_unit_valid(struct gl_context *ctx, struct gl_image_unit *u);
 
-/**
- * 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,
index 9b5928c4306d95035eb8c7cac55adf7d8ab9b3bc..cb147fac476602d4a91d5e19ae24e76c278b27d6 100644 (file)
@@ -34,7 +34,6 @@
 #include "context.h"
 #include "enums.h"
 #include "macros.h"
-#include "shaderimage.h"
 #include "texobj.h"
 #include "teximage.h"
 #include "texstate.h"
@@ -741,8 +740,6 @@ update_texture_state( struct gl_context *ctx )
 
    if (!prog[MESA_SHADER_FRAGMENT] || !prog[MESA_SHADER_VERTEX])
       update_texgen(ctx);
-
-   _mesa_validate_image_units(ctx);
 }