From 9318ce8c5a6e0e315f62ce82314cb72f8bce5c79 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Tue, 2 Dec 2014 18:07:13 -0800 Subject: [PATCH] nir/glsl: Don't allocate a state_slots array for 0 state slots Reviewed-by: Connor Abbott --- 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 19bc664961c..f29d7fbbb3d 100644 --- a/src/glsl/nir/glsl_to_nir.cpp +++ b/src/glsl/nir/glsl_to_nir.cpp @@ -330,12 +330,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.30.2