[Bug 82574] New: GLSL: opt_vectorize goes wrong on texture lookups

bugzilla-daemon at freedesktop.org bugzilla-daemon at freedesktop.org
Wed Aug 13 10:38:18 PDT 2014


          Priority: medium
            Bug ID: 82574
          Assignee: idr at freedesktop.org
           Summary: GLSL: opt_vectorize goes wrong on texture lookups
        QA Contact: intel-3d-bugs at lists.freedesktop.org
          Severity: normal
    Classification: Unclassified
                OS: All
          Reporter: aras at unity3d.com
          Hardware: All
            Status: NEW
           Version: git
         Component: glsl-compiler
           Product: Mesa

Looks like opt_vectorize is too eager on texture lookups. For example, a shader
like this (which does a color correction effect by looking up R,G,B channels
into a ramp texture):

uniform sampler2D _MainTex;
uniform sampler2D _RampTex;
varying vec2 varUV;
void main()
  vec4 orig = texture2D (_MainTex, varUV);
  float rr = texture2D (_RampTex, orig.xx).x;
  float gg = texture2D (_RampTex, orig.yy).y;
  float bb = texture2D (_RampTex, orig.zz).z;
  vec4 color = vec4 (rr, gg, bb, orig.w);
  gl_FragData[0] = color;

These 3 lookups effectively get vectorized into something like a:

  t.xyz = texture2DProj (_RampTex, t.xyz).xyz;

I can make this bug go away by stopping vectorizing on texture samples, i.e.
adding something like this to opt_vectorize.cpp:

 * Upon entering an ir_texture, remove the current assignment from
 * further consideration. Vectorizing multiple texture lookups into one
 * is wrong.
ir_vectorize_visitor::visit_enter(ir_texture *)
   this->current_assignment = NULL;
   return visit_continue_with_parent;

You are receiving this mail because:
You are the QA Contact for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/intel-3d-bugs/attachments/20140813/df3aaef3/attachment.html>

More information about the intel-3d-bugs mailing list