| Summary: | [GLSL 1.30]ivec2 textureSize(gsampler2D sampler, int lod) return with wrong value in vertex shader | ||
|---|---|---|---|
| Product: | Mesa | Reporter: | Ouping Zhang <ouping.zhang> |
| Component: | Drivers/DRI/i965 | Assignee: | Kenneth Graunke <kenneth> |
| Status: | RESOLVED FIXED | QA Contact: | |
| Severity: | normal | ||
| Priority: | medium | ||
| Version: | git | ||
| Hardware: | All | ||
| OS: | Linux (All) | ||
| Whiteboard: | |||
| i915 platform: | i915 features: | ||
Confirmed. Looks like a bug in the i965 vertex shader backend. I have a patch that fixes the issue, and a lot of other oglconform tests, but it breaks a few, and I haven't yet figured out why. Similar but subtly different patches fix and break different sets of tests. It's been very confusing. For now, marking this assigned. Thanks for the piglit test! Patch on mailing list: [PATCH] i965/vs: Use the proper dimensionality for the sampler result register. commit fbbbc8c04e2462a0ae272d81e61eee5f85f08aa6 Author: Kenneth Graunke <kenneth@whitecape.org> Date: Mon Jan 2 15:51:58 2012 -0800 i965/vs: Use the proper dimensionality for the sampler result register. textureSize() returns an int, ivec2, or ivec3, but never an ivec4. Creating the destination register as an ivec4 triggered later failures, even though the register did hold the proper values. For example, piglit test vs-textureSize-compare calls textureSize on a 2D texture and compares the result to an expected value. Unfortunately, our generated code also tried to compare the third and fourth components which were undefined, and failed. Fixes piglit test vs-textureSize-compare as well as 19 subcases of oglconform's glsl-bif-tex-size test. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=44339 Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Eric Anholt <eric@anholt.net> Ken, do you think Ouping's case should be added into piglit? Yes, definitely. I sent it out to the list a while ago, but hadn't received any comments. I just pushed it today. Thanks! |
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.
System Environment: -------------------------- Libdrm: (master)2.4.29-3-gef20301a11afae50bfe127002913dbd0b81ddccc Mesa: (master)b50d250e02457f367c195ee1808b061e0dfe2d00 Xf86_video_intel: (master)2.17.0-237-g8fc21328a0bdf87fde35d68d2b27834011acde7b Bug detailed description: ------------------------- run this piglit case: [require] GLSL >= 1.30 [fragment shader] #version 130 precision mediump float; void main() { gl_FragColor = gl_Color; } [vertex shader] #version 130 precision mediump float; uniform sampler2D tex; void main() { gl_Position = gl_Vertex; gl_FrontColor = vec4(0,(textureSize(tex, 0)==ivec2(1024, 1024)),0,1); } [test] texture checkerboard 0 0 (1024, 1024) (0.0, 0.0, 0.0, 0.0) (0.0, 0.0, 0.0, 0.0) uniform int tex 0 draw rect -1 -1 2 2 relative probe rgb (0.75, 0.75) (0.0, 1.0, 0.0) but the result as below: Expected: 0.000000 1.000000 0.000000 Observed: 0.000000 0.000000 0.000000 run this piglit case: [require] GLSL >= 1.30 [vertex shader] #version 130 precision mediump float; void main() { gl_Position = gl_Vertex; } [fragment shader] #version 130 precision mediump float; uniform sampler2D tex; void main() { gl_FragColor = vec4(0,(textureSize(tex, 0)==ivec2(1024, 1024)),0,1); } [test] texture checkerboard 0 0 (1024, 1024) (0.0, 0.0, 0.0, 0.0) (0.0, 0.0, 0.0, 0.0) uniform int tex 0 draw rect -1 -1 2 2 relative probe rgb (0.75, 0.75) (0.0, 1.0, 0.0) the result as below: PIGLIT: {'result': 'pass' } ivec2 textureSize(gsampler2D sampler, int lod) return with wrong value in vertex shader, but it works well in fragment shader.