Bug 93300

Summary: Two Worlds 2 renders water incorrectly
Product: Mesa Reporter: Béla Gyebrószki <gyebro69>
Component: Drivers/DRI/nouveauAssignee: Nouveau Project <nouveau>
Status: RESOLVED FIXED QA Contact: Nouveau Project <nouveau>
Severity: normal    
Priority: medium CC: gyebro69, imirkin
Version: gitKeywords: regression
Hardware: Other   
OS: All   
Whiteboard:
i915 platform: i915 features:
Attachments: screenshot
potential patch

Description Béla Gyebrószki 2015-12-08 19:18:22 UTC
Created attachment 120416 [details]
screenshot

In Two Worlds 2 (running in Wine 1.8-rc3) water is not rendered properly: it looks as if textures are "split up" into several pieces, as it can be seen in the attached screenshot.
The problem doesn't occur with the software renderer (LIBGL_ALWAYS_SOFTWARE=1).
Disabling optimizations doesn't help (NV50_PROG_OPTIMIZE=0).

According to my testing the problem was introduced by

commit abd326e81b06f58797be94bd655ee06b17a34f0c
Author: Ilia Mirkin <imirkin@alum.mit.edu>
Date:   Fri Dec 4 15:21:11 2015 -0500

    nv50/ir: propagate indirect loads into instructions
    
    This way $r1 = $r0 + 4; c1[$r1] becomes c1[$r0+4].
    
    On SM35:
    
    total instructions in shared programs : 6206257 -> 6185058 (-0.34%)
    total gprs used in shared programs    : 911045 -> 910722 (-0.04%)
    total local used in shared programs   : 39072 -> 39072 (0.00%)
    
                    local        gpr       inst      bytes
        helped           0         417        4195        4195
          hurt           0         280           0           0


Reverting the commit on current Mesa git resolves the problem here.

Apitrace log (uncompressed 150 MB):
https://drive.google.com/open?id=0B-tTbLKBl-tOQ0xNMFJlSS00S1E
The trace replays correctly on Nvidia binary drivers 340.96.

Fedora 23 32-bit
Kernel 4.4.0-rc4
X Server 1.18.0
OpenGL vendor string: nouveau
OpenGL renderer string: Gallium 0.4 on NV92
OpenGL core profile version string: 3.3 (Core Profile) Mesa 11.2.0-devel (git-f61ceeb)
OpenGL core profile shading language version string: 3.30
Comment 1 Ilia Mirkin 2015-12-08 19:23:24 UTC
Thanks for testing :) I find it difficult to believe that NV50_PROG_OPTIMIZE=0 wouldn't fix the issue -- probably you just don't have a debug mesa build.

However I find it easy to believe that this commit breaks something, esp on nv50, as that (a) has a lot more restrictions and (b) has separate address registers. Will investigate the trace to see what's up.
Comment 2 Ilia Mirkin 2015-12-08 20:10:56 UTC
Created attachment 120418 [details] [review]
potential patch

Does the attached patch help? If so I'll put something a bit more generic together.
Comment 3 Béla Gyebrószki 2015-12-08 20:36:02 UTC
(In reply to Ilia Mirkin from comment #1)
> Thanks for testing :) I find it difficult to believe that NV50_PROG_OPTIMIZE=0 > wouldn't fix the issue -- probably you just don't have a debug mesa build.

Yes indeed, disabling optimizations works around the problem with a debug build (originally I tested with a non-debug Mesa build).

(In reply to Ilia Mirkin from comment #2)
> Created attachment 120418 [details] [review] [review]
> potential patch
> 
> Does the attached patch help? If so I'll put something a bit more generic
> together.

The patch fixes the problem, thank you.
Comment 4 Ilia Mirkin 2015-12-09 04:29:06 UTC
Fix pushed:

commit 0f647bd65bae16c7a2dc7a960c96593ad6ab729c
Author: Ilia Mirkin <imirkin@alum.mit.edu>
Date:   Tue Dec 8 16:48:06 2015 -0500

    nv50/ir: check if the target supports the new offset before inlining
    
    Fixes: abd326e81b (nv50/ir: propagate indirect loads into instructions)
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93300
    Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>

Double-checked that this updated version actually fixed your trace as well.

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.