Module: Mesa
Branch: master
Commit: fe911c1d433c6fddc8f1e1226286b26d635d6ad4
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=fe911c1d433c6fddc8f1e1226286b26d635d6ad4

Author: Kenneth Graunke <[email protected]>
Date:   Sat Jun 16 13:50:03 2012 -0700

i965: Move loop over texture units into brw_populate_sampler_prog_key.

The whole reason I avoided this was because it might operate on a
brw_vertex_program or a brw_fragment_program.  However, that isn't a
problem: all we need is the gl_program base type.

This avoids awkwardly passing the loop counter 'i' as a parameter,
simplifies both callers, and also plumbs prog in place for future use.

Signed-off-by: Kenneth Graunke <[email protected]>

---

 src/mesa/drivers/dri/i965/brw_program.h |    3 +-
 src/mesa/drivers/dri/i965/brw_vs.c      |    5 +-
 src/mesa/drivers/dri/i965/brw_wm.c      |  155 ++++++++++++++++---------------
 3 files changed, 81 insertions(+), 82 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_program.h 
b/src/mesa/drivers/dri/i965/brw_program.h
index 287994f..874238f 100644
--- a/src/mesa/drivers/dri/i965/brw_program.h
+++ b/src/mesa/drivers/dri/i965/brw_program.h
@@ -43,6 +43,7 @@ struct brw_sampler_prog_key_data {
 };
 
 void brw_populate_sampler_prog_key_data(struct gl_context *ctx,
-                                       struct brw_sampler_prog_key_data *key, 
int i);
+                                       const struct gl_program *prog,
+                                       struct brw_sampler_prog_key_data *key);
 
 #endif
diff --git a/src/mesa/drivers/dri/i965/brw_vs.c 
b/src/mesa/drivers/dri/i965/brw_vs.c
index bd703c7..7e69032 100644
--- a/src/mesa/drivers/dri/i965/brw_vs.c
+++ b/src/mesa/drivers/dri/i965/brw_vs.c
@@ -334,10 +334,7 @@ static void brw_upload_vs_prog(struct brw_context *brw)
    }
 
    /* _NEW_TEXTURE */
-   for (i = 0; i < BRW_MAX_TEX_UNIT; i++) {
-      if (prog->TexturesUsed[i])
-        brw_populate_sampler_prog_key_data(ctx, &key.tex, i);
-   }
+   brw_populate_sampler_prog_key_data(ctx, prog, &key.tex);
 
    /* BRW_NEW_VERTICES */
    for (i = 0; i < VERT_ATTRIB_MAX; i++) {
diff --git a/src/mesa/drivers/dri/i965/brw_wm.c 
b/src/mesa/drivers/dri/i965/brw_wm.c
index 7194a73..587cc35 100644
--- a/src/mesa/drivers/dri/i965/brw_wm.c
+++ b/src/mesa/drivers/dri/i965/brw_wm.c
@@ -345,83 +345,88 @@ bool do_wm_prog(struct brw_context *brw,
 
 void
 brw_populate_sampler_prog_key_data(struct gl_context *ctx,
-                                  struct brw_sampler_prog_key_data *key,
-                                  int i)
+                                  const struct gl_program *prog,
+                                  struct brw_sampler_prog_key_data *key)
 {
-   const struct gl_texture_unit *unit = &ctx->Texture.Unit[i];
-
-   if (unit->_ReallyEnabled && unit->_Current->Target != GL_TEXTURE_BUFFER) {
-      const struct gl_texture_object *t = unit->_Current;
-      const struct gl_texture_image *img = t->Image[0][t->BaseLevel];
-      struct gl_sampler_object *sampler = _mesa_get_samplerobj(ctx, i);
-      int swizzles[SWIZZLE_NIL + 1] = {
-        SWIZZLE_X,
-        SWIZZLE_Y,
-        SWIZZLE_Z,
-        SWIZZLE_W,
-        SWIZZLE_ZERO,
-        SWIZZLE_ONE,
-        SWIZZLE_NIL
-      };
-
-      if (img->_BaseFormat == GL_DEPTH_COMPONENT ||
-         img->_BaseFormat == GL_DEPTH_STENCIL) {
-        /* We handle GL_DEPTH_TEXTURE_MODE here instead of as surface format
-         * overrides because shadow comparison always returns the result of
-         * the comparison in all channels anyway.
-         */
-        switch (sampler->DepthMode) {
-        case GL_ALPHA:
-           swizzles[0] = SWIZZLE_ZERO;
-           swizzles[1] = SWIZZLE_ZERO;
-           swizzles[2] = SWIZZLE_ZERO;
-           swizzles[3] = SWIZZLE_X;
-           break;
-        case GL_LUMINANCE:
-           swizzles[0] = SWIZZLE_X;
-           swizzles[1] = SWIZZLE_X;
-           swizzles[2] = SWIZZLE_X;
-           swizzles[3] = SWIZZLE_ONE;
-           break;
-        case GL_INTENSITY:
-           swizzles[0] = SWIZZLE_X;
-           swizzles[1] = SWIZZLE_X;
-           swizzles[2] = SWIZZLE_X;
-           swizzles[3] = SWIZZLE_X;
-           break;
-        case GL_RED:
-           swizzles[0] = SWIZZLE_X;
-           swizzles[1] = SWIZZLE_ZERO;
-           swizzles[2] = SWIZZLE_ZERO;
-           swizzles[3] = SWIZZLE_ONE;
-           break;
+   for (int i = 0; i < BRW_MAX_TEX_UNIT; i++) {
+      if (!prog->TexturesUsed[i])
+        continue;
+
+      const struct gl_texture_unit *unit = &ctx->Texture.Unit[i];
+
+      if (unit->_ReallyEnabled && unit->_Current->Target != GL_TEXTURE_BUFFER) 
{
+        const struct gl_texture_object *t = unit->_Current;
+        const struct gl_texture_image *img = t->Image[0][t->BaseLevel];
+        struct gl_sampler_object *sampler = _mesa_get_samplerobj(ctx, i);
+        int swizzles[SWIZZLE_NIL + 1] = {
+           SWIZZLE_X,
+           SWIZZLE_Y,
+           SWIZZLE_Z,
+           SWIZZLE_W,
+           SWIZZLE_ZERO,
+           SWIZZLE_ONE,
+           SWIZZLE_NIL
+        };
+
+        if (img->_BaseFormat == GL_DEPTH_COMPONENT ||
+            img->_BaseFormat == GL_DEPTH_STENCIL) {
+           /* We handle GL_DEPTH_TEXTURE_MODE here instead of as surface
+            * format overrides because shadow comparison always returns the
+            * result of the comparison in all channels anyway.
+            */
+           switch (sampler->DepthMode) {
+           case GL_ALPHA:
+              swizzles[0] = SWIZZLE_ZERO;
+              swizzles[1] = SWIZZLE_ZERO;
+              swizzles[2] = SWIZZLE_ZERO;
+              swizzles[3] = SWIZZLE_X;
+              break;
+           case GL_LUMINANCE:
+              swizzles[0] = SWIZZLE_X;
+              swizzles[1] = SWIZZLE_X;
+              swizzles[2] = SWIZZLE_X;
+              swizzles[3] = SWIZZLE_ONE;
+              break;
+           case GL_INTENSITY:
+              swizzles[0] = SWIZZLE_X;
+              swizzles[1] = SWIZZLE_X;
+              swizzles[2] = SWIZZLE_X;
+              swizzles[3] = SWIZZLE_X;
+              break;
+           case GL_RED:
+              swizzles[0] = SWIZZLE_X;
+              swizzles[1] = SWIZZLE_ZERO;
+              swizzles[2] = SWIZZLE_ZERO;
+              swizzles[3] = SWIZZLE_ONE;
+              break;
+           }
         }
-      }
 
-      if (img->InternalFormat == GL_YCBCR_MESA) {
-        key->yuvtex_mask |= 1 << i;
-        if (img->TexFormat == MESA_FORMAT_YCBCR)
-            key->yuvtex_swap_mask |= 1 << i;
-      }
+        if (img->InternalFormat == GL_YCBCR_MESA) {
+           key->yuvtex_mask |= 1 << i;
+           if (img->TexFormat == MESA_FORMAT_YCBCR)
+               key->yuvtex_swap_mask |= 1 << i;
+        }
 
-      key->swizzles[i] =
-        MAKE_SWIZZLE4(swizzles[GET_SWZ(t->_Swizzle, 0)],
-                      swizzles[GET_SWZ(t->_Swizzle, 1)],
-                      swizzles[GET_SWZ(t->_Swizzle, 2)],
-                      swizzles[GET_SWZ(t->_Swizzle, 3)]);
-
-      if (sampler->MinFilter != GL_NEAREST &&
-         sampler->MagFilter != GL_NEAREST) {
-        if (sampler->WrapS == GL_CLAMP)
-           key->gl_clamp_mask[0] |= 1 << i;
-        if (sampler->WrapT == GL_CLAMP)
-           key->gl_clamp_mask[1] |= 1 << i;
-        if (sampler->WrapR == GL_CLAMP)
-           key->gl_clamp_mask[2] |= 1 << i;
+        key->swizzles[i] =
+           MAKE_SWIZZLE4(swizzles[GET_SWZ(t->_Swizzle, 0)],
+                         swizzles[GET_SWZ(t->_Swizzle, 1)],
+                         swizzles[GET_SWZ(t->_Swizzle, 2)],
+                         swizzles[GET_SWZ(t->_Swizzle, 3)]);
+
+        if (sampler->MinFilter != GL_NEAREST &&
+            sampler->MagFilter != GL_NEAREST) {
+           if (sampler->WrapS == GL_CLAMP)
+              key->gl_clamp_mask[0] |= 1 << i;
+           if (sampler->WrapT == GL_CLAMP)
+              key->gl_clamp_mask[1] |= 1 << i;
+           if (sampler->WrapR == GL_CLAMP)
+              key->gl_clamp_mask[2] |= 1 << i;
+        }
+      }
+      else {
+        key->swizzles[i] = SWIZZLE_NOOP;
       }
-   }
-   else {
-      key->swizzles[i] = SWIZZLE_NOOP;
    }
 }
 
@@ -436,7 +441,6 @@ static void brw_wm_populate_key( struct brw_context *brw,
    const struct gl_program *prog = (struct gl_program *) brw->fragment_program;
    GLuint lookup = 0;
    GLuint line_aa;
-   GLuint i;
 
    /* As a temporary measure we assume that all programs use dFdy() (and hence
     * need to be compiled differently depending on whether we're rendering to
@@ -514,10 +518,7 @@ static void brw_wm_populate_key( struct brw_context *brw,
    key->clamp_fragment_color = ctx->Color._ClampFragmentColor;
 
    /* _NEW_TEXTURE */
-   for (i = 0; i < BRW_MAX_TEX_UNIT; i++) {
-      if (prog->TexturesUsed[i])
-        brw_populate_sampler_prog_key_data(ctx, &key->tex, i);
-   }
+   brw_populate_sampler_prog_key_data(ctx, prog, &key->tex);
 
    /* _NEW_BUFFERS */
    /*

_______________________________________________
mesa-commit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to