From 0e654ab1b9a20671f755cbe71fe51ff6ec849459 Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Tue, 27 May 2014 18:45:40 -0700 Subject: [PATCH] glsl: Store ir_variable_data::_num_state_slots and ::binding in 16-bits each MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 --- src/glsl/ir.h | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) 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. */ -- 2.30.2