i965: Shrink brw_vue_map struct.
authorPaul Berry <stereotype441@gmail.com>
Fri, 22 Mar 2013 00:14:53 +0000 (17:14 -0700)
committerPaul Berry <stereotype441@gmail.com>
Sun, 24 Mar 2013 17:55:28 +0000 (10:55 -0700)
This patch changes the arrays in brw_vue_map (which only ever contain
values from -1 to 58) from ints to signed chars.  This reduces the
size of the struct from 488 bytes to 136 bytes.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
v2: fix STATIC_ASSERT to use 127 instead of 128.

Reviewed-by: Eric Anholt <eric@anholt.net>
src/mesa/drivers/dri/i965/brw_context.h
src/mesa/drivers/dri/i965/brw_vs.c

index 01ef0323c93368f1cb74f812b35144beba627687..8ff70c96acb5c654ffeed34dc1f3bb6f07d0b172 100644 (file)
@@ -369,7 +369,7 @@ struct brw_vue_map {
     * additional processing is applied before storing them in the VUE), the
     * value is -1.
     */
-   int varying_to_slot[BRW_VARYING_SLOT_COUNT];
+   signed char varying_to_slot[BRW_VARYING_SLOT_COUNT];
 
    /**
     * Map from VUE slot to gl_varying_slot value.  For slots that do not
@@ -380,7 +380,7 @@ struct brw_vue_map {
     * simplifies code that uses the value stored in slot_to_varying to
     * create a bit mask).
     */
-   int slot_to_varying[BRW_VARYING_SLOT_COUNT];
+   signed char slot_to_varying[BRW_VARYING_SLOT_COUNT];
 
    /**
     * Total number of VUE slots in use
index 1a19a794adbbd59922c63032cf1863a7eb8963e8..e093dd1c8392ff6e0f413dd387568b285fe90ec7 100644 (file)
@@ -66,6 +66,14 @@ brw_compute_vue_map(struct brw_context *brw, struct brw_vs_compile *c,
    vue_map->slots_valid = slots_valid;
    int i;
 
+   /* Make sure that the values we store in vue_map->varying_to_slot and
+    * vue_map->slot_to_varying won't overflow the signed chars that are used
+    * to store them.  Note that since vue_map->slot_to_varying sometimes holds
+    * values equal to BRW_VARYING_SLOT_COUNT, we need to ensure that
+    * BRW_VARYING_SLOT_COUNT is <= 127, not 128.
+    */
+   STATIC_ASSERT(BRW_VARYING_SLOT_COUNT <= 127);
+
    vue_map->num_slots = 0;
    for (i = 0; i < BRW_VARYING_SLOT_COUNT; ++i) {
       vue_map->varying_to_slot[i] = -1;