glsl: Store ir_variable_data::_num_state_slots and ::binding in 16-bits each

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): 44 40,577,049,140       68,118,608       62,441,063     5,677,545            0
After  (32-bit): 71 40,583,408,411       67,761,528       62,263,519     5,498,009            0

Before (64-bit): 63 37,122,829,194       95,153,008       87,333,600     7,819,408            0
After  (64-bit): 67 37,123,303,706       95,150,544       87,333,600     7,816,944            0

A real savings of 173KiB on 32-bit and no change 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-27 18:45:40 -07:00
parent a32ac726ee
commit 0e654ab1b9
+16 -8
View File
@@ -773,9 +773,24 @@ public:
uint16_t image_format;
private:
unsigned _num_state_slots; /**< Number of state slots used */
/**
* Number of state slots used
*
* \note
* This could be stored in as few as 7-bits, if necessary. If it is made
* smaller, add an assertion to \c ir_variable::allocate_state_slots to
* be safe.
*/
uint16_t _num_state_slots;
public:
/**
* Initial binding point for a sampler, atomic, or UBO.
*
* For array types, this represents the binding point for the first element.
*/
int16_t binding;
/**
* Storage location of the base of this variable
*
@@ -801,13 +816,6 @@ public:
*/
unsigned stream;
/**
* Initial binding point for a sampler, atomic, or UBO.
*
* For array types, this represents the binding point for the first element.
*/
int binding;
/**
* Location an atomic counter is stored at.
*/