--- src/glsl/ir.cpp | 1 + src/glsl/ir.h | 7 +++++++ src/glsl/ir_clone.cpp | 1 + src/glsl/opt_dead_code.cpp | 6 ++++++ 4 files changed, 15 insertions(+), 0 deletions(-)
diff --git a/src/glsl/ir.cpp b/src/glsl/ir.cpp index 41ed4f1..8638bb6 100644 --- a/src/glsl/ir.cpp +++ b/src/glsl/ir.cpp @@ -1336,6 +1336,7 @@ ir_variable::ir_variable(const struct glsl_type *type, const char *name, this->pixel_center_integer = false; this->depth_layout = ir_depth_layout_none; this->used = false; + this->UBO = NULL; if (type && type->base_type == GLSL_TYPE_SAMPLER) this->read_only = true; diff --git a/src/glsl/ir.h b/src/glsl/ir.h index 2e899f3..8648526 100644 --- a/src/glsl/ir.h +++ b/src/glsl/ir.h @@ -396,6 +396,13 @@ public: int location; /** + * If variable is part of an Uniform Buffer Object : + * - UBO is a pointer to program UBO information about this variable + * - removable_uniform is false if UBO layout force not to remove the uniform (ie is shared or std140) + */ + struct UBOVariableInfo* UBO; + + /** * Built-in state that backs this uniform * * Once set at variable creation, \c state_slots must remain invariant. diff --git a/src/glsl/ir_clone.cpp b/src/glsl/ir_clone.cpp index f075736..cec970a 100644 --- a/src/glsl/ir_clone.cpp +++ b/src/glsl/ir_clone.cpp @@ -53,6 +53,7 @@ ir_variable::clone(void *mem_ctx, struct hash_table *ht) const var->origin_upper_left = this->origin_upper_left; var->pixel_center_integer = this->pixel_center_integer; var->explicit_location = this->explicit_location; + var->UBO = this->UBO; var->num_state_slots = this->num_state_slots; if (this->state_slots) { diff --git a/src/glsl/opt_dead_code.cpp b/src/glsl/opt_dead_code.cpp index cb500d2..2ffa10b 100644 --- a/src/glsl/opt_dead_code.cpp +++ b/src/glsl/opt_dead_code.cpp @@ -27,6 +27,7 @@ * Eliminates dead assignments and variable declarations from the code. */ +#include "../mesa/main/mtypes.h" #include "ir.h" #include "ir_visitor.h" #include "ir_variable_refcount.h" @@ -99,6 +100,11 @@ do_dead_code(exec_list *instructions) if (entry->var->mode == ir_var_uniform && entry->var->constant_value) continue; + if(entry->var->mode == ir_var_uniform && entry->var->UBO) { + if(entry->var->UBO->UBO->Layout != packed) + continue; + } + entry->var->remove(); progress = true; -- 1.7.6.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev