Skip to content

Commit

Permalink
Fix issue 18 - expression flattening was going wrong for texture2D() …
Browse files Browse the repository at this point in the history
…calls
  • Loading branch information
alexmac committed Jan 22, 2013
1 parent 4a22a1e commit 2c2d1b2
Show file tree
Hide file tree
Showing 6 changed files with 27 additions and 6 deletions.
Binary file modified bin/glsl2agal.swc
Binary file not shown.
Binary file modified bin/glsl2agalopt
Binary file not shown.
Binary file modified bin/glsl2agalopt.exe
Binary file not shown.
2 changes: 1 addition & 1 deletion src/glsl/glsl_optimizer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -457,7 +457,7 @@ glslopt_shader* glslopt_optimize (glslopt_ctx* ctx, glslopt_shader_type type, co



do_agal_expression_flattening(ir, true); dump("", ir, state, printMode);
do_agal_expression_flattening(ir, true); dump("after flattening", ir, state, printMode);

do_lower_arrays(ir); dump("post-opt", ir, state, printMode);

Expand Down
20 changes: 15 additions & 5 deletions src/glsl/ir_agal_expression_flattening.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ class ir_agal_expression_flattening_visitor : public ir_hierarchical_visitor {
virtual ir_visitor_status visit_enter(ir_swizzle *);
virtual ir_visitor_status visit_leave(ir_swizzle *);
virtual ir_visitor_status visit_enter(ir_texture *);
virtual ir_visitor_status visit_leave(ir_texture *);
virtual ir_visitor_status visit_enter(ir_dereference_array *);
virtual ir_visitor_status visit_leave(ir_dereference_array *);

Expand Down Expand Up @@ -181,14 +182,23 @@ ir_visitor_status ir_agal_expression_flattening_visitor::visit_leave(ir_swizzle
return visit_continue;
}

ir_visitor_status ir_agal_expression_flattening_visitor::visit_enter(ir_texture *tex)
ir_visitor_status ir_agal_expression_flattening_visitor::visit_enter(ir_texture *expr)
{
if(tex->coordinate->as_expression())
promoteToVar(tex->coordinate);
if(!baseExpr) {
baseExpr = expr;
return visit_continue;
}

if(baseExpr)
promoteToVar(tex);
promoteToVar(expr);
return visit_continue;
}

ir_visitor_status ir_agal_expression_flattening_visitor::visit_leave(ir_texture *expr)
{
if(baseExpr == expr) {
baseExpr = NULL;
insertionPoint = NULL;
}
return visit_continue;
}

Expand Down
11 changes: 11 additions & 0 deletions tests/regression_000008.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
varying vec2 uv;
uniform vec2 uvOffset;
uniform sampler2D tex;
uniform vec4 colorFilter;


void main(void)
{
vec4 color = texture2D(tex, uvOffset + uv);
gl_FragColor = color * colorFilter;
}

0 comments on commit 2c2d1b2

Please sign in to comment.