svga: Fix fs key size computation and key comparison.
authorMichal Krol <michal@vmware.com>
Wed, 6 Jan 2010 17:36:45 +0000 (18:36 +0100)
committerMichal Krol <michal@vmware.com>
Thu, 7 Jan 2010 06:58:07 +0000 (07:58 +0100)
This also allows us to have texture_target
back as a bitfield and save us a few bytes.

src/gallium/drivers/svga/svga_state_fs.c
src/gallium/drivers/svga/svga_tgsi.h

index 272d1dd14e3c3cf809b24c1329a3ffb7535c51d4..bba80a93a56856dfb8ea15212bb3b295115d9281 100644 (file)
 static INLINE int compare_fs_keys( const struct svga_fs_compile_key *a,
                                    const struct svga_fs_compile_key *b )
 {
-   unsigned keysize = svga_fs_key_size( a );
-   return memcmp( a, b, keysize );
+   unsigned keysize_a = svga_fs_key_size( a );
+   unsigned keysize_b = svga_fs_key_size( b );
+
+   if (keysize_a != keysize_b) {
+      return (int)(keysize_a - keysize_b);
+   }
+   return memcmp( a, b, keysize_a );
 }
 
 
index 043b99115f7988d0b26bca37f9a9d77dee42387a..737a2213af5c8e9b7f39da50f2250d43037b995b 100644 (file)
@@ -56,7 +56,7 @@ struct svga_fs_compile_key
       unsigned compare_func:3;
       unsigned unnormalized:1;
       unsigned width_height_idx:7;
-      ubyte texture_target;
+      unsigned texture_target:8;
    } tex[PIPE_MAX_SAMPLERS];
 };
 
@@ -119,8 +119,7 @@ static INLINE unsigned svga_vs_key_size( const struct svga_vs_compile_key *key )
 
 static INLINE unsigned svga_fs_key_size( const struct svga_fs_compile_key *key )
 {
-   return (const char *)&key->tex[key->num_textures].texture_target -
-      (const char *)key;
+   return (const char *)&key->tex[key->num_textures] - (const char *)key;
 }
 
 struct svga_shader_result *