i965: Shorten sampler loops in precompile key setup.
authorKenneth Graunke <kenneth@whitecape.org>
Thu, 15 Aug 2013 01:55:15 +0000 (18:55 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Tue, 20 Aug 2013 08:09:52 +0000 (01:09 -0700)
Now that we have the number of samplers available, we don't need to
iterate over all 16.  This should be particularly helpful for vertex
shaders.

v2: Use the correct shader program (caught by Paul Berry).

This needs to initialize the exact same set of sampler swizzles as
the actual key setup, or else we end up doing recompiles due to some
being XYZW and others being 0.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Paul Berry <stereotype441@gmail.com>
src/mesa/drivers/dri/i965/brw_fs.cpp
src/mesa/drivers/dri/i965/brw_vs.c

index d111cbd28cd322a50c941815146c39cbf006d11b..52fa6f4a750a497841c08bf785495590cf6149b0 100644 (file)
@@ -3157,7 +3157,8 @@ brw_fs_precompile(struct gl_context *ctx, struct gl_shader_program *prog)
 
    key.clamp_fragment_color = ctx->API == API_OPENGL_COMPAT;
 
-   for (int i = 0; i < MAX_SAMPLERS; i++) {
+   unsigned sampler_count = _mesa_fls(fp->Base.SamplersUsed);
+   for (unsigned i = 0; i < sampler_count; i++) {
       if (fp->Base.ShadowSamplers & (1 << i)) {
          /* Assume DEPTH_TEXTURE_MODE is the default: X, X, X, 1 */
          key.tex.swizzles[i] =
index dcd14a319dff538df806625e29a0390ccfae9bd5..ee77b0197400f622d7a8aa81aba4eaa8a6353d84 100644 (file)
@@ -530,7 +530,8 @@ brw_vs_precompile(struct gl_context *ctx, struct gl_shader_program *prog)
    key.base.program_string_id = bvp->id;
    key.base.clamp_vertex_color = ctx->API == API_OPENGL_COMPAT;
 
-   for (int i = 0; i < MAX_SAMPLERS; i++) {
+   unsigned sampler_count = _mesa_fls(vp->Base.SamplersUsed);
+   for (unsigned i = 0; i < sampler_count; i++) {
       if (vp->Base.ShadowSamplers & (1 << i)) {
          /* Assume DEPTH_TEXTURE_MODE is the default: X, X, X, 1 */
          key.base.tex.swizzles[i] =