Keith Whitwell wrote on 2010-01-06 10:43:
On Wed, 2010-01-06 at 00:50 -0800, michal wrote:
diff --git a/src/gallium/drivers/svga/svga_tgsi.h
b/src/gallium/drivers/svga/svga_tgsi.h
index 896c90a..d132525 100644
--- a/src/gallium/drivers/svga/svga_tgsi.h
+++ b/src/gallium/drivers/svga/svga_tgsi.h
@@ -39,24 +39,24 @@ struct tgsi_token;
struct svga_vs_compile_key
 {
-   ubyte need_prescale:1;
-   ubyte allow_psiz:1;
    unsigned zero_stride_vertex_elements;
-   ubyte num_zero_stride_vertex_elements:6;
+   unsigned need_prescale:1;
+   unsigned allow_psiz:1;
+   unsigned num_zero_stride_vertex_elements:6;
 };
struct svga_fs_compile_key
 {
-   boolean light_twoside:1;
-   boolean front_cw:1;
+   unsigned light_twoside:1;
+   unsigned front_cw:1;
    ubyte num_textures;
    ubyte num_unnormalized_coords;
    struct {
-      ubyte compare_mode       : 1;
-      ubyte compare_func       : 3;
-      ubyte unnormalized       : 1;
+      unsigned compare_mode       : 1;
+      unsigned compare_func       : 3;
+      unsigned unnormalized       : 1;
- ubyte width_height_idx : 7;
+      unsigned width_height_idx   : 7;
ubyte texture_target; } tex[PIPE_MAX_SAMPLERS];


Michal, these two structs should be kept as small as possible.  It looks
like there has been some drift away from well-packed fields anyway, but
if you're making this change can you please take a moment to repack the
fields as a result and get these down to as small as possible?

In particular, it looks like fs_compile_key::tex array has probably
doubled in size - could you repack it by changing texture_target to, eg:

unsigned texture_target:8;
or similar?

The same would apply for the other ubyte fields that are now probably no
longer tightly packed.


Attached an update.

There was nothing more I could do to svga_vs_compile_key, though, as the zero_stride_vertex_elements field is being fully used.
From af7c95dd2539e6b5d64ad62c30ef6952e83fcf98 Mon Sep 17 00:00:00 2001
From: Michal Krol <mic...@vmware.com>
Date: Wed, 6 Jan 2010 11:23:43 +0100
Subject: [PATCH] Make sure we use only signed/unsigned ints with bitfields.

Seems to be the only way to stay fully portable.
---
 src/gallium/drivers/svga/svga_tgsi.h               |   26 +++++++++----------
 .../dri/r300/compiler/radeon_pair_regalloc.c       |    2 +-
 .../drivers/dri/r300/compiler/radeon_program.h     |   14 +++++-----
 .../dri/r300/compiler/radeon_program_pair.h        |   10 ++++----
 4 files changed, 25 insertions(+), 27 deletions(-)

diff --git a/src/gallium/drivers/svga/svga_tgsi.h 
b/src/gallium/drivers/svga/svga_tgsi.h
index 896c90a..1309c33 100644
--- a/src/gallium/drivers/svga/svga_tgsi.h
+++ b/src/gallium/drivers/svga/svga_tgsi.h
@@ -39,26 +39,24 @@ struct tgsi_token;
 
 struct svga_vs_compile_key
 {
-   ubyte need_prescale:1;
-   ubyte allow_psiz:1;
    unsigned zero_stride_vertex_elements;
-   ubyte num_zero_stride_vertex_elements:6;
+   unsigned need_prescale:1;
+   unsigned allow_psiz:1;
+   unsigned num_zero_stride_vertex_elements:6;
 };
 
 struct svga_fs_compile_key
 {
-   boolean light_twoside:1;
-   boolean front_cw:1;
-   ubyte num_textures;
-   ubyte num_unnormalized_coords;
+   unsigned light_twoside:1;
+   unsigned front_cw:1;
+   unsigned num_textures:8;
+   unsigned num_unnormalized_coords:8;
    struct {
-      ubyte compare_mode       : 1;
-      ubyte compare_func       : 3;
-      ubyte unnormalized       : 1;
-
-      ubyte width_height_idx   : 7;
-
-      ubyte texture_target;
+      unsigned compare_mode:1;
+      unsigned compare_func:3;
+      unsigned unnormalized:1;
+      unsigned width_height_idx:7;
+      unsigned texture_target:8;
    } tex[PIPE_MAX_SAMPLERS];
 };
 
diff --git a/src/mesa/drivers/dri/r300/compiler/radeon_pair_regalloc.c 
b/src/mesa/drivers/dri/r300/compiler/radeon_pair_regalloc.c
index 828d0c8..b2fe7f7 100644
--- a/src/mesa/drivers/dri/r300/compiler/radeon_pair_regalloc.c
+++ b/src/mesa/drivers/dri/r300/compiler/radeon_pair_regalloc.c
@@ -49,7 +49,7 @@ struct register_info {
 
        unsigned int Used:1;
        unsigned int Allocated:1;
-       rc_register_file File:3;
+       unsigned int File:3;
        unsigned int Index:RC_REGISTER_INDEX_BITS;
 };
 
diff --git a/src/mesa/drivers/dri/r300/compiler/radeon_program.h 
b/src/mesa/drivers/dri/r300/compiler/radeon_program.h
index 0359288..e318867 100644
--- a/src/mesa/drivers/dri/r300/compiler/radeon_program.h
+++ b/src/mesa/drivers/dri/r300/compiler/radeon_program.h
@@ -39,7 +39,7 @@
 struct radeon_compiler;
 
 struct rc_src_register {
-       rc_register_file File:3;
+       unsigned int File:3;
 
        /** Negative values may be used for relative addressing. */
        signed int Index:(RC_REGISTER_INDEX_BITS+1);
@@ -55,7 +55,7 @@ struct rc_src_register {
 };
 
 struct rc_dst_register {
-       rc_register_file File:3;
+       unsigned int File:3;
 
        /** Negative values may be used for relative addressing. */
        signed int Index:(RC_REGISTER_INDEX_BITS+1);
@@ -79,20 +79,20 @@ struct rc_sub_instruction {
        /**
         * Opcode of this instruction, according to \ref rc_opcode enums.
         */
-       rc_opcode Opcode:8;
+       unsigned int Opcode:8;
 
        /**
         * Saturate each value of the result to the range [0,1] or [-1,1],
         * according to \ref rc_saturate_mode enums.
         */
-       rc_saturate_mode SaturateMode:2;
+       unsigned int SaturateMode:2;
 
        /**
         * Writing to the special register RC_SPECIAL_ALU_RESULT
         */
        /*...@{*/
-       rc_write_aluresult WriteALUResult:2;
-       rc_compare_func ALUResultCompare:3;
+       unsigned int WriteALUResult:2;
+       unsigned int ALUResultCompare:3;
        /*...@}*/
 
        /**
@@ -103,7 +103,7 @@ struct rc_sub_instruction {
        unsigned int TexSrcUnit:5;
 
        /** Source texture target, one of the \ref rc_texture_target enums */
-       rc_texture_target TexSrcTarget:3;
+       unsigned int TexSrcTarget:3;
 
        /** True if tex instruction should do shadow comparison */
        unsigned int TexShadow:1;
diff --git a/src/mesa/drivers/dri/r300/compiler/radeon_program_pair.h 
b/src/mesa/drivers/dri/r300/compiler/radeon_program_pair.h
index 1600598..6685ade 100644
--- a/src/mesa/drivers/dri/r300/compiler/radeon_program_pair.h
+++ b/src/mesa/drivers/dri/r300/compiler/radeon_program_pair.h
@@ -52,12 +52,12 @@ struct r300_fragment_program_compiler;
 
 struct radeon_pair_instruction_source {
        unsigned int Used:1;
-       rc_register_file File:3;
+       unsigned int File:3;
        unsigned int Index:RC_REGISTER_INDEX_BITS;
 };
 
 struct radeon_pair_instruction_rgb {
-       rc_opcode Opcode:8;
+       unsigned int Opcode:8;
        unsigned int DestIndex:RC_REGISTER_INDEX_BITS;
        unsigned int WriteMask:3;
        unsigned int OutputWriteMask:3;
@@ -74,7 +74,7 @@ struct radeon_pair_instruction_rgb {
 };
 
 struct radeon_pair_instruction_alpha {
-       rc_opcode Opcode:8;
+       unsigned int Opcode:8;
        unsigned int DestIndex:RC_REGISTER_INDEX_BITS;
        unsigned int WriteMask:1;
        unsigned int OutputWriteMask:1;
@@ -95,8 +95,8 @@ struct rc_pair_instruction {
        struct radeon_pair_instruction_rgb RGB;
        struct radeon_pair_instruction_alpha Alpha;
 
-       rc_write_aluresult WriteALUResult:2;
-       rc_compare_func ALUResultCompare:3;
+       unsigned int WriteALUResult:2;
+       unsigned int ALUResultCompare:3;
 };
 
 
-- 
1.6.4.msysgit.0

------------------------------------------------------------------------------
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market process makes app distribution fast and easy
Join now and get one step closer to millions of Verizon customers
http://p.sf.net/sfu/verizon-dev2dev 
_______________________________________________
Mesa3d-dev mailing list
Mesa3d-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev

Reply via email to