Recently I found a TGSI fragment shader does not render correctly with r600 driver and I further identified the issue down to instructions in this form: CMP TEMP[0].yz, -|TEMP[1].xxxx|, TEMP[2].xxxx, CONST[0].xyxw If I covert all those instructions to the equivalents: ABS TEMP[5], TEMP[1].xxxx CMP TEMP[0].yz, -TEMP[5], TEMP[2].xxxx, CONST[0].xyxw It then works fine. However, the original instructions work just fine with nouveau and swrast driver, so it should be a r600 bug. Any clue on this issue?
The issue might be related to r600_bytecode_alu_build() in r600_asm.c. In the codes below: if (alu->is_op3) { // in this code branch it does not use absolute modifier at all. } else { ... Looks like whenever is_op3 is true (which is the case of CMP), absolute modifier is just ignored.
OK I found the reference info in r600 instruction document and this is a hardware limitation. So this probably has to be solved in higher level rather than in driver. Sorry for the noise.
The is a bug in the r600 driver. The shader compiler should be lowering this to the hardware equivalent of this sequence: ABS TEMP[5], TEMP[1].xxxx CMP TEMP[0].yz, -TEMP[5], TEMP[2].xxxx, CONST[0].xyxw Is there a piglit test or application that is hitting this bug?
Thanks for concerning this bug. It will be great if this can be fixed at driver level. I created a smallest possible test program which will be able to test the shader I am having problem with. Please see the file header for test info.
Created attachment 58317 [details] test program to reproduce the bug
Created attachment 112920 [details] [review] r600g patch to fix dropped abs() modifier on op3 alu operations.
I stumbled upon this bug while testing and debugging a game using the st/nine. And I made a tentative fix that works for me. (caveat: I know nothing about mesa/gallium/graphic cards, but hey..) Here is the proposed patch: https://github.com/xxxbxxx/Mesa-3D/commit/0722d721f8e5ec496bf8ce4591a3b8a5bf87745d or attached.
This was fixed with ad84689f737edefe.
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.