[Mesa-dev] [PATCH 086/133] nir/glsl: Don't allocate a state_slots array for 0 state slots

Jason Ekstrand jason at jlekstrand.net
Mon Dec 15 22:11:31 PST 2014


---
 src/glsl/nir/glsl_to_nir.cpp | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/src/glsl/nir/glsl_to_nir.cpp b/src/glsl/nir/glsl_to_nir.cpp
index 754a81f..6870bd2 100644
--- a/src/glsl/nir/glsl_to_nir.cpp
+++ b/src/glsl/nir/glsl_to_nir.cpp
@@ -329,12 +329,18 @@ nir_visitor::visit(ir_variable *ir)
    var->data.max_array_access = ir->data.max_array_access;
 
    var->num_state_slots = ir->get_num_state_slots();
-   var->state_slots = ralloc_array(var, nir_state_slot, var->num_state_slots);
-   ir_state_slot *state_slots = ir->get_state_slots();
-   for (unsigned i = 0; i < var->num_state_slots; i++) {
-      for (unsigned j = 0; j < 5; j++)
-         var->state_slots[i].tokens[j] = state_slots[i].tokens[j];
-      var->state_slots[i].swizzle = state_slots[i].swizzle;
+   if (var->num_state_slots > 0) {
+      var->state_slots = ralloc_array(var, nir_state_slot,
+                                      var->num_state_slots);
+
+      ir_state_slot *state_slots = ir->get_state_slots();
+      for (unsigned i = 0; i < var->num_state_slots; i++) {
+         for (unsigned j = 0; j < 5; j++)
+            var->state_slots[i].tokens[j] = state_slots[i].tokens[j];
+         var->state_slots[i].swizzle = state_slots[i].swizzle;
+      }
+   } else {
+      var->state_slots = NULL;
    }
 
    var->constant_value = constant_copy(ir->constant_value, var);
-- 
2.2.0



More information about the mesa-dev mailing list