i965: Validate (and resolve) all the bound textures.
authorChris Forbes <chrisf@ijw.co.nz>
Sat, 22 Feb 2014 05:09:31 +0000 (18:09 +1300)
committerChris Forbes <chrisf@ijw.co.nz>
Sun, 2 Mar 2014 08:14:56 +0000 (21:14 +1300)
BRW_MAX_TEX_UNIT is the static limit on the number of textures we
support per-stage, not in total.

Core's `Unit` array is sized by MAX_COMBINED_TEXTURE_IMAGE_UNITS, which
is significantly larger, and across the various shader stages, up to
ctx->Const.MaxCombinedTextureImageUnits elements of it may be actually
used.

Fixes invisible bad behavior in piglit's max-samplers test (although
this escalated to an assertion failure on HSW with texture_view, since
non-immutable textures only have _Format set by validation.)

Signed-off-by: Chris Forbes <chrisf@ijw.co.nz>
Cc: "9.2 10.0 10.1" <mesa-stable@lists.freedesktop.org>
Cc: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_draw.c
src/mesa/drivers/dri/i965/brw_tex.c

index 540834c242264e19b5ec8307765da05b0cea405f..bc887fed0306d22ca8e953200e2d9cdc703b5b99 100644 (file)
@@ -317,7 +317,7 @@ brw_predraw_resolve_buffers(struct brw_context *brw)
    /* Resolve depth buffer of each enabled depth texture, and color buffer of
     * each fast-clear-enabled color texture.
     */
-   for (int i = 0; i < BRW_MAX_TEX_UNIT; i++) {
+   for (int i = 0; i < ctx->Const.MaxCombinedTextureImageUnits; i++) {
       if (!ctx->Texture.Unit[i]._ReallyEnabled)
         continue;
       tex_obj = intel_texture_object(ctx->Texture.Unit[i]._Current);
index 9234e3ae161eceb4d22a036bcc95a5168756fc52..b1f4de071490886c42ca137fedf1c5ccc75d309d 100644 (file)
@@ -47,7 +47,7 @@ void brw_validate_textures( struct brw_context *brw )
    struct gl_context *ctx = &brw->ctx;
    int i;
 
-   for (i = 0; i < BRW_MAX_TEX_UNIT; i++) {
+   for (i = 0; i < ctx->Const.MaxCombinedTextureImageUnits; i++) {
       struct gl_texture_unit *texUnit = &ctx->Texture.Unit[i];
 
       if (texUnit->_ReallyEnabled) {