[Mesa-dev] [PATCH 5/9] glsl: change IR to add UBO information
vlj
vljn at ovi.com
Sun Oct 16 15:37:18 PDT 2011
---
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
More information about the mesa-dev
mailing list