summaryrefslogtreecommitdiffstats
path: root/src/glsl/lower_packed_varyings.cpp
diff options
context:
space:
mode:
authorTapani Pälli <tapani.palli@intel.com>2015-09-04 11:22:15 +0300
committerTapani Pälli <tapani.palli@intel.com>2015-09-25 08:05:59 +0300
commita6b55beb78501e3447c55a2d3a4e4b5d6950b86c (patch)
tree60024a9d088d2f07b5b6dccc557d31faa9b3acce /src/glsl/lower_packed_varyings.cpp
parentebbe6cdad7ab082d2b191fe6c7c0eaa6921d55de (diff)
downloadexternal_mesa3d-a6b55beb78501e3447c55a2d3a4e4b5d6950b86c.zip
external_mesa3d-a6b55beb78501e3447c55a2d3a4e4b5d6950b86c.tar.gz
external_mesa3d-a6b55beb78501e3447c55a2d3a4e4b5d6950b86c.tar.bz2
mesa: add packed_varyings list to gl_shader
This is required to store information about packed varyings, currently these variables get lost and cannot be retrieved later in sensible way for program interface queries. List will be utilized by next patch. Signed-off-by: Tapani Pälli <tapani.palli@intel.com> Reviewed-by: Marta Lofstedt <marta.lofstedt@intel.com>
Diffstat (limited to 'src/glsl/lower_packed_varyings.cpp')
-rw-r--r--src/glsl/lower_packed_varyings.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/glsl/lower_packed_varyings.cpp b/src/glsl/lower_packed_varyings.cpp
index cfe414a..5d66ca9 100644
--- a/src/glsl/lower_packed_varyings.cpp
+++ b/src/glsl/lower_packed_varyings.cpp
@@ -170,7 +170,7 @@ public:
exec_list *out_instructions,
exec_list *out_variables);
- void run(exec_list *instructions);
+ void run(struct gl_shader *shader);
private:
void bitwise_assign_pack(ir_rvalue *lhs, ir_rvalue *rhs);
@@ -252,9 +252,9 @@ lower_packed_varyings_visitor::lower_packed_varyings_visitor(
}
void
-lower_packed_varyings_visitor::run(exec_list *instructions)
+lower_packed_varyings_visitor::run(struct gl_shader *shader)
{
- foreach_in_list(ir_instruction, node, instructions) {
+ foreach_in_list(ir_instruction, node, shader->ir) {
ir_variable *var = node->as_variable();
if (var == NULL)
continue;
@@ -272,6 +272,14 @@ lower_packed_varyings_visitor::run(exec_list *instructions)
assert(var->data.interpolation == INTERP_QUALIFIER_FLAT ||
!var->type->contains_integer());
+ /* Clone the variable for program resource list before
+ * it gets modified and lost.
+ */
+ if (!shader->packed_varyings)
+ shader->packed_varyings = new (shader) exec_list;
+
+ shader->packed_varyings->push_tail(var->clone(shader, NULL));
+
/* Change the old varying into an ordinary global. */
assert(var->data.mode != ir_var_temporary);
var->data.mode = ir_var_auto;
@@ -711,7 +719,7 @@ lower_packed_varyings(void *mem_ctx, unsigned locations_used,
gs_input_vertices,
&new_instructions,
&new_variables);
- visitor.run(instructions);
+ visitor.run(shader);
if (mode == ir_var_shader_out) {
if (shader->Stage == MESA_SHADER_GEOMETRY) {
/* For geometry shaders, outputs need to be lowered before each call