Mesa (master): mesa: Compact state key for TexEnv program cache

Brian Paul brianp at kemper.freedesktop.org
Wed Sep 2 14:48:59 UTC 2009


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

Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Wed Sep  2 05:11:25 2009 -0700

mesa: Compact state key for TexEnv program cache

By rearranging the bitfields within the key we can reduce the size
of the key from 644 to 196 bytes, reducing the cost of both the
hashing and equality tests.

---

 src/mesa/main/texenvprogram.c |    8 +++++---
 1 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/mesa/main/texenvprogram.c b/src/mesa/main/texenvprogram.c
index 5913957..b16b8dd 100644
--- a/src/mesa/main/texenvprogram.c
+++ b/src/mesa/main/texenvprogram.c
@@ -82,8 +82,8 @@ texenv_doing_secondary_color(GLcontext *ctx)
 #define DISASSEM (MESA_VERBOSE & VERBOSE_DISASSEM)
 
 struct mode_opt {
-   GLuint Source:4;  /**< SRC_x */
-   GLuint Operand:3; /**< OPR_x */
+   GLubyte Source:4;  /**< SRC_x */
+   GLubyte Operand:3; /**< OPR_x */
 };
 
 struct state_key {
@@ -103,10 +103,11 @@ struct state_key {
 
       GLuint NumArgsRGB:3;  /**< up to MAX_COMBINER_TERMS */
       GLuint ModeRGB:5;     /**< MODE_x */
-      struct mode_opt OptRGB[MAX_COMBINER_TERMS];
 
       GLuint NumArgsA:3;  /**< up to MAX_COMBINER_TERMS */
       GLuint ModeA:5;     /**< MODE_x */
+
+      struct mode_opt OptRGB[MAX_COMBINER_TERMS];
       struct mode_opt OptA[MAX_COMBINER_TERMS];
    } unit[MAX_TEXTURE_UNITS];
 };
@@ -1497,6 +1498,7 @@ _mesa_get_fixed_func_fragment_program(GLcontext *ctx)
    struct gl_fragment_program *prog;
    struct state_key key;
 	
+   printf("SIZE OF KEY %d\n", sizeof(key));
    make_state_key(ctx, &key);
       
    prog = (struct gl_fragment_program *)




More information about the mesa-commit mailing list