From: Ian Romanick Date: Wed, 28 May 2014 01:45:40 +0000 (-0700) Subject: glsl: Store ir_variable_data::_num_state_slots and ::binding in 16-bits each X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0e654ab1b9a20671f755cbe71fe51ff6ec849459;p=mesa.git 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 Reviewed-by: Matt Turner Reviewed-by: Tapani Pälli --- diff --git a/src/glsl/ir.h b/src/glsl/ir.h index 990808fa343..f2186a5af8a 100644 --- a/src/glsl/ir.h +++ b/src/glsl/ir.h @@ -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. */