Bug 97338 - Black squares in the Spec Ops: The Line chapter select screen
Summary: Black squares in the Spec Ops: The Line chapter select screen
Alias: None
Product: Mesa
Classification: Unclassified
Component: Drivers/Gallium/radeonsi (show other bugs)
Version: git
Hardware: Other All
: medium normal
Assignee: Default DRI bug account
QA Contact: Default DRI bug account
Depends on:
Reported: 2016-08-14 01:09 UTC by Daniel Scharrer
Modified: 2017-03-22 21:08 UTC (History)
0 users

See Also:
i915 platform:
i915 features:

Screenshot showing the bug (frame 89) (155.85 KB, image/jpeg)
2016-08-14 01:09 UTC, Daniel Scharrer
Screenshot showing the bug (frame 91) (2.33 MB, image/jpeg)
2016-08-14 01:10 UTC, Daniel Scharrer
Problematic fragment shader (5.82 KB, text/plain)
2016-09-02 12:54 UTC, Nicolai Hähnle

Note You need to log in before you can comment on or make changes to this bug.
Description Daniel Scharrer 2016-08-14 01:09:11 UTC
Created attachment 125773 [details]
Screenshot showing the bug (frame 89)

With radeonsi the chapter select screen in Spec Ops: The Line has black squares that should not be there. I have not observed this bug elsewhere in the game (but haven't played through the whole game using radeonsi).

The number of squares increases with a higher texture quality setting. The number and positions of the squares only changes when the camera moves.

The chapter select screen renders fine using the amdgpu-pro driver - tested with version running on the upstream amdgpu kernel module.

 http://constexpr.org/tmp/SpecOps-radeonsi.trace.xz (70 MiB)

This bug seems to be caused by pixels with NaN values that make it into the framebuffer and are extended to larger squares by a later post-processing pass: After draw call 1441551, pixel (875, 573) of the COLOR0 attachment has RGB components set to NaN.

GPU: R9 380X (tonga)
Kernel: 4.7.0-gentoo
Mesa: git-561fd22
LLVM: r278309
Comment 1 Daniel Scharrer 2016-08-14 01:10:52 UTC
Created attachment 125774 [details]
Screenshot showing the bug (frame 91)

May or may not be related to bug #90481 - I haven't seen any gpu lockups or crashes in the menu.
Comment 2 Nicolai Hähnle 2016-09-02 10:21:01 UTC
Hi Daniel, thank you for the detailed report and the initial investigation! I can indeed reproduce this (including the NaN values) on Polaris.
Comment 3 Nicolai Hähnle 2016-09-02 12:54:40 UTC
Created attachment 126172 [details]
Problematic fragment shader

Okay, so here's a bit more detail of what is happening: the attached fragment shader (shader object 31) samples a 2D vector from PSampler2 (texture object 3153) and does some computations on it involving inversesqrt, under the assumption that the dot product of the vector is <= 1. This is false: looking at level 0 of texture 3153 reveals e.g. a unorm value (142, 255) at texel 155,263.

The likely cause here is that this is a port from D3D, which specifies that rsq should take the absolute value of its argument, to GLSL, which says that inversesqrt is undefined for values <= 0.
Comment 4 Nicolai Hähnle 2016-09-02 13:10:36 UTC
I've raised this issue with Virtual Programming.
Comment 5 Marek Olšák 2016-11-23 21:45:58 UTC
If it's undefined, doing abs is probably a good idea to at least reduce the number of bug reports.
Comment 6 Samuel Pitoiset 2017-01-05 16:48:16 UTC
A possible fix here: https://lists.freedesktop.org/archives/mesa-dev/2017-January/139686.html
Comment 7 Samuel Pitoiset 2017-01-10 22:36:53 UTC
People might be interested by https://github.com/virtual-programming/specops-linux/issues/20
Comment 8 Aaron Paden 2017-01-23 08:48:50 UTC
(In reply to Samuel Pitoiset from comment #6)
> A possible fix here:
> https://lists.freedesktop.org/archives/mesa-dev/2017-January/139686.html

I get a build failure after applying this patch:

si_shader_tgsi_alu.c: In function ‘emit_rsq’:
si_shader_tgsi_alu.c:759:43: error: ‘TGSI_OPCODE_ABS’ undeclared (first use in this function)
  abs = lp_build_emit_llvm_unary(bld_base, TGSI_OPCODE_ABS,
si_shader_tgsi_alu.c:759:43: note: each undeclared identifier is reported only once for each function it appears in
make[4]: *** [Makefile:701: si_shader_tgsi_alu.lo] Error 1
Comment 9 Samuel Pitoiset 2017-01-23 10:47:28 UTC
Makes sense. TGSI_OPCODE_ABS has been removed after this patch, but it fixes the issue (I tested myself). The patch is still pending for some reasons, I will let you know when something change.

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct.