glsl: Store ir_variable_data::_num_state_slots and ::binding in 16-bits each
authorIan Romanick <ian.d.romanick@intel.com>
Wed, 28 May 2014 01:45:40 +0000 (18:45 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Tue, 30 Sep 2014 20:34:42 +0000 (13:34 -0700)
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>
src/glsl/ir.h

index 990808fa3436cdeb46ec21e715ea770e3e56d61b..f2186a5af8a3ea41804fd8381ad80962c178998f 100644 (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.
        */