glsl: Replace ir_variable::warn_extension pointer with an 8-bit index

Also move the new warn_extension_index into ir_variable::data.  This
enables slightly better packing.

Valgrind massif results for a trimmed apitrace of dota2:

                  n        time(i)         total(B)   useful-heap(B) extra-heap(B)    stacks(B)
Before (32-bit): 82 40,580,040,531       68,488,992       62,973,695     5,515,297            0
After  (32-bit): 73 40,580,476,304       68,488,400       62,796,151     5,692,249            0

Before (64-bit): 65 37,124,013,542       95,892,768       88,466,712     7,426,056            0
After  (64-bit): 71 37,124,890,613       95,889,584       88,089,008     7,800,576            0

A real savings of 173KiB on 32-bit and 368KiB on 64-bit.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
This commit is contained in:
Ian Romanick
2014-05-14 13:25:14 -07:00
parent baf5a75664
commit ab51179f1f
3 changed files with 31 additions and 10 deletions

View File

@@ -722,6 +722,13 @@ public:
/** Image internal format if specified explicitly, otherwise GL_NONE. */
uint16_t image_format;
/**
* Emit a warning if this variable is accessed.
*/
private:
uint8_t warn_extension_index;
public:
/**
* \brief Layout qualifier for gl_FragDepth.
*
@@ -776,6 +783,10 @@ public:
*/
unsigned max_array_access;
/**
* Allow (only) ir_variable direct access private members.
*/
friend class ir_variable;
} data;
/**
@@ -810,6 +821,8 @@ public:
ir_constant *constant_initializer;
private:
static const char *const warn_extension_table[];
/**
* For variables that are in an interface block or are an instance of an
* interface block, this is the \c GLSL_TYPE_INTERFACE type for that block.
@@ -817,11 +830,6 @@ private:
* \sa ir_variable::location
*/
const glsl_type *interface_type;
/**
* Emit a warning if this variable is accessed.
*/
const char *warn_extension;
};
/**