Summary: | incorrect GLSL optimization | ||
---|---|---|---|
Product: | Mesa | Reporter: | matthias.bentrup |
Component: | glsl-compiler | Assignee: | Ian Romanick <idr> |
Status: | RESOLVED FIXED | QA Contact: | |
Severity: | normal | ||
Priority: | medium | CC: | eric |
Version: | git | ||
Hardware: | x86 (IA32) | ||
OS: | Linux (All) | ||
Whiteboard: | |||
i915 platform: | i915 features: | ||
Attachments: | MESA_GLSL=dump output |
It's also worth nothing that if the line dstColor.a *= 1.0 - srcColor.a; is changed to dstColor.a = 1.0 - srcColor.a; Mesa also produces correct code. That at least narrows down where things might be going wrong. Also, would it be possible for you to make a piglit shader-runner test out of this (with an appropriate Signed-off-by)? Patch posted to mesa-dev mailing list: http://marc.info/?l=mesa3d-dev&m=130921786009286&w=2 Fix on master by the commit below. This commit has been cherry-picked to 7.11 (42cd619) and 7.10 (cb6dd6c). commit 0eb97979584b73907327eebc547302e6b8d8976a Author: Ian Romanick <ian.d.romanick@intel.com> Date: Mon Jun 27 16:33:13 2011 -0700 glsl: Track initial mask in constant propagation live set The set of values initially available (before any kills) must be tracked with each constant in the set. Otherwise the wrong component can be selected after earlier components have been killed. NOTE: This is a candidate for the 7.10 and 7.11 branches. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=37383 Reviewed-by: Eric Anholt <eric@anholt.net> Cc: Kenneth Graunke <kenneth@whitecape.org> Cc: Matthias Bentrup <matthias.bentrup@googlemail.com> |
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.
Created attachment 46917 [details] MESA_GLSL=dump output I have a problem with a GLSL fragment shader. As you see in the attached dump file, the shader assigns constant zero to dstColor.w after linking, but the expression that is optimized away can (and should) be nonzero. If I rewrite the shader to assign all components in one step everything works as it should. I have tested this on MESA r600g, nouveau and softpipe renderers and get the same result on each. NVidia and AMD proprietary drivers compute the correct alpha value. OpenGL vendor string: X.Org OpenGL renderer string: Gallium 0.4 on AMD JUNIPER OpenGL version string: 2.1 Mesa 7.11-devel OpenGL shading language version string: 1.20