Mesa-3D
Mesa-3D copied to clipboard
black screen in guild wars 2
Its first time i've tried this version of wine/nouveau/mesa so i'm not sure if i missed some things. I'm trying to play/test Guild Wars 2 (x64) on linuxmint 19.1 cinnamon the launcher starts but when the actuall game is suppose to start i'm getting only a black screen.
i've install wine/mesa with the help of https://wiki.ixit.cz/d3d9_tutorial i've also try the NINE_DEBUG=all csmt_force=0 method to get a better output from wine which you can find it here
$ glxinfo | grep "OpenGL version" OpenGL version string: 4.3 (Compatibility Profile) Mesa 19.1.0-devel (git-9bb63e9 2019-03-15 bionic-oibaf-ppa)
How long have you waited? Does the menu music start after a while? It's possible that the game is just compiling shaders at the start and will work fine after that. It takes two minutes for me but that will vary depending on your CPU.
I've already filed a bug about the shader cache apparently not working here: https://github.com/iXit/wine-nine-standalone/issues/19
Here is the relevant line from the very end of the log.
4A16564A0ADD\Games\Guild Wars 2\Gw2-64.exe:
../src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp:229:
void nv50_ir::CodeEmitterGM107::emitField(uint32_t*, int, int, uint32_t):
Assertion `!(v & ~m) || (v & ~m) == ~m' failed.
That assert doesn't make sense, e.g. (!x)||(x)
is always true
. The check could only succeed if m=0
and true=-1
. No debug build should have worked since 2014.
Try disabling the check and see if there are some issues - hangs, visual glitches, etc.
==
takes precedence over ||
, so it's more like (!x)||(x==y)
.
It checks if all bits of the value v
are part of the mask m
.
==
takes precedence over||
, so it's more like(!x)||(x==y)
. It checks if all bits of the valuev
are part of the maskm
.
Now it seems obvious.
@logan001, could you try recording an apitrace that reproduces the issue. You can try using the wined3d for the recording, just make sure that the bug is reproduced when playing it back with Nine. I hope the trace would be smaller than the game and you will allow us to use it for regression testing. Try to make it as small as possible (lower texture quality, limit framerate, etc).
I can confirm that this also happens on stable Mesa (19.0.2-4), with Rayman Origins (and in fact any game I try). I think it's an issue that appeared somewhere in the Mesa 19 branch, affecting the combination of the direct3d state tracker with the nouveau driver. I can set D3D_ALWAYS_SOFTWARE=1
to make it use llvmpipe, which fixes the crash but obviously destroys the performance.
I would imagine that the population of gamers attempting to use nouveau on the GM107 GPU is vanishingly small, which is why only two people seem to have reported this so far…
@PluMGMK, two people are plenty.
Would you try recording an apitrace (using wined3d or always_software) that can reproduce the problem with Nine.
If you think it is regression, then finding the commit that broke it could also turn out useful.
Okay, I did an apitrace with always_software, and when I play it back on nouveau (using d3dretrace --headless --verbose
, I get:
C:\GOG Games\Rayman Origins\Rayman Origins.exe
0 @0 Direct3DCreate9(SDKVersion = 32) = 0x176c88
Native Direct3D 9 v0.4.0.294-release is active.
For more information visit https://github.com/iXit/wine-nine-standalone
220 @0 IDirect3D9::CreateDevice(this = 0x176c88, Adapter = D3DADAPTER_DEFAULT, DeviceType = D3DDEVTYPE_HAL, hFocusWindow = 0x1006a, BehaviorFlags = D3DCREATE_MULTITHREADED | D3DCREATE_PUREDEVICE | D3DCREATE_HARDWARE_VERTEXPROCESSING, pPresentationParameters = &{BackBufferWidth = 1024, BackBufferHeight = 576, BackBufferFormat = D3DFMT_A8R8G8B8, BackBufferCount = 1, MultiSampleType = D3DMULTISAMPLE_NONE, MultiSampleQuality = 0, SwapEffect = D3DSWAPEFFECT_COPY, hDeviceWindow = 0x1006a, Windowed = TRUE, EnableAutoDepthStencil = TRUE, AutoDepthStencilFormat = D3DFMT_D24S8, Flags = D3DPRESENTFLAG_LOCKABLE_BACKBUFFER, FullScreen_RefreshRateInHz = 0, PresentationInterval = D3DPRESENT_INTERVAL_ONE}, ppReturnedDeviceInterface = &0xf4f23080) = D3D_OK
002b:fixme:kernelbase:AppPolicyGetThreadInitializationType 0xfffffffa, 0xb7feb0
fixme:d3d9nine:DRIPresentGroup_GetMultiheadCount (0x1946d0), stub!
fixme:d3d9nine:DRIPresentGroup_GetMultiheadCount (0x1946d0), stub!
222 @0 IDirect3DDevice9::CreateVertexShader(this = 0xf4f23080, pFunction = "//
// Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111
//
// Parameters:
//
// float4x4 g_mUVmat;
// float4x4 g_mWorldViewProjection;
// float4 g_vconst0;
//
//
// Registers:
//
// Name Reg Size
// ---------------------- ----- ----
// g_mWorldViewProjection c0 4
// g_mUVmat c4 4
// g_vconst0 c13 1
//
vs_2_0
def c6, 2, -1, 1, 0.5
dcl_position v0
dcl_color v1
dcl_texcoord v2
dp4 oPos.x, v0, c0
dp4 oPos.y, v0, c1
dp4 oPos.z, v0, c2
dp4 oPos.w, v0, c3
mul oD0, v1, c13
mov r0.xw, c6
mad r0.xy, v2, r0.x, c7
add r0.xy, r0, c6.y
mul r1.xy, r0, c4
mul r0.xy, r0, c5
add r0.y, r0.y, r0.x
add r0.x, r1.y, r1.x
add r0.xy, r0, c6.z
mad oT0.x, r0.x, r0.w, c4.w
mad oT0.y, r0.y, r0.w, c5.w
// approximately 15 instruction slots used
", ppShader = &0xdfa605f0) = D3D_OK
223 @0 IDirect3DDevice9::CreateVertexShader(this = 0xf4f23080, pFunction = "//
// Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111
//
// Parameters:
//
// float4x4 g_mWorldViewProjection;
// float4 g_vconst0;
//
//
// Registers:
//
// Name Reg Size
// ---------------------- ----- ----
// g_mWorldViewProjection c0 4
// g_vconst0 c13 1
//
vs_2_0
dcl_position v0
dcl_color v1
dp4 oPos.x, v0, c0
dp4 oPos.y, v0, c1
dp4 oPos.z, v0, c2
dp4 oPos.w, v0, c3
mul oD0, v1, c13
// approximately 5 instruction slots used
", ppShader = &0xdfa63780) = D3D_OK
224 @0 IDirect3DDevice9::CreateVertexShader(this = 0xf4f23080, pFunction = "//
// Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111
//
// Parameters:
//
// float4x4 g_mWorldViewProjection;
//
//
// Registers:
//
// Name Reg Size
// ---------------------- ----- ----
// g_mWorldViewProjection c0 4
//
vs_2_0
dcl_position v0
dcl_texcoord v1
dp4 oPos.x, v0, c0
dp4 oPos.y, v0, c1
dp4 oPos.z, v0, c2
dp4 oPos.w, v0, c3
mov oT0.xy, v1
// approximately 5 instruction slots used
", ppShader = &0xdfa60920) = D3D_OK
225 @0 IDirect3DDevice9::CreateVertexShader(this = 0xf4f23080, pFunction = "//
// Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111
//
// Parameters:
//
// float g_fconst1;
// float4x4 g_mWorldViewProjection;
// float4 g_va0[128];
// float4 g_va1[64];
// float4 g_vconst0;
//
//
// Registers:
//
// Name Reg Size
// ---------------------- ----- ----
// g_mWorldViewProjection c0 4
// g_fconst1 c9 1
// g_vconst0 c13 1
// g_va0 c17 128
// g_va1 c145 64
//
vs_2_0
def c4, 8, 4, 1, 3
def c5, 1, 0, 0, 0
dcl_position v0
dcl_texcoord v1
mul r0.xy, v0.z, c4
frc r0.zw, r0.xyxy
add r1.xy, r0, -r0.zwzw
slt r0.zw, -r0, r0
slt r0.xy, r0, -r0
mad r0.xy, r0, r0.zwzw, r1
mova a0.xy, r0
mul r0, v1.y, c22[a0.x]
add r1.xy, -v1.yxzw, c4.z
mad r0, c18[a0.x], r1.x, r0
mul r0, r0, v1.x
mul r1.z, r1.y, r1.y
mul r0, r0, r1.z
mul r1.z, r1.y, r1.z
mul r0, r0, c4.w
mul r2, v1.y, c21[a0.x]
mad r2, c17[a0.x], r1.x, r2
mad r0, r2, r1.z, r0
mul r2, v1.y, c23[a0.x]
mad r2, c19[a0.x], r1.x, r2
mul r1.z, v1.x, v1.x
mul r2, r2, r1.z
mul r1.z, r1.z, v1.x
mul r2, r1.y, r2
mad r0, r2, c4.w, r0
mul r2, v1.y, c24[a0.x]
mad r2, c20[a0.x], r1.x, r2
mad r3.xy, r2, r1.z, r0
mad oT0.xy, r2.zwzw, r1.z, r0.zwzw
mov r0.xy, c5
mad r3.zw, c9.x, r0.xyxy, r0.xyyx
dp4 oPos.x, r3, c0
dp4 oPos.y, r3, c1
dp4 oPos.z, r3, c2
dp4 oPos.w, r3, c3
mov r0, c145[a0.y]
add r0, -r0, c146[a0.y]
mad r0, v1.x, r0, c145[a0.y]
mov r1, c147[a0.y]
add r1, -r1, c148[a0.y]
mad r1, v1.x, r1, c147[a0.y]
lrp r2, v1.y, r1, r0
mul oD0, r2, c13
// approximately 43 instruction slots used
", ppShader = &0xdfa60b20) = D3D_OK
226 @0 IDirect3DDevice9::CreateVertexShader(this = 0xf4f23080, pFunction = "//
// Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111
//
// Parameters:
//
// float4x4 g_mUVmat;
// float4x4 g_mWorldViewProjection;
// float4 g_vconst0;
// float4 g_vconst1;
//
//
// Registers:
//
// Name Reg Size
// ---------------------- ----- ----
// g_mWorldViewProjection c0 4
// g_mUVmat c4 2
// g_vconst0 c13 1
// g_vconst1 c14 1
//
vs_2_0
def c6, 0.159154937, 0.5, 6.28318548, -3.14159274
def c7, 1, 0, 0, 0
def c8, -1.55009923e-006, -2.17013894e-005, 0.00260416674, 0.00026041668
def c9, -0.020833334, -0.125, 1, 0.5
dcl_position v0
dcl_normal v1
dcl_color v2
dcl_texcoord v3
mad r0.x, c14.x, c14.z, v1.x
mad r0.x, r0.x, c6.x, c6.y
frc r0.x, r0.x
mad r0.x, r0.x, c6.z, c6.w
sincos r1.x, r0.x, c8, c9
mul r0.x, r1.x, c14.y
mul r1, v1.yzyy, c7.xxyy
mad r0, r1, r0.x, v0
dp4 oPos.x, r0, c0
dp4 oPos.y, r0, c1
dp4 oPos.z, r0, c2
dp4 oPos.w, r0, c3
mul oD0, v2, c13
mul r0.xy, v3, c4
add r0.x, r0.y, r0.x
add oT0.x, r0.x, c4.w
mul r0.xy, v3, c5
add r0.x, r0.y, r0.x
add oT0.y, r0.x, c5.w
// approximately 26 instruction slots used
", ppShader = &0xdf9a1140) = D3D_OK
227 @0 IDirect3DDevice9::CreateVertexShader(this = 0xf4f23080, pFunction = "//
// Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111
//
// Parameters:
//
// float4x4 g_mUVmat;
// float4x4 g_mWorldViewProjection;
// float4 g_vconst0;
// float4 g_vconst1;
//
//
// Registers:
//
// Name Reg Size
// ---------------------- ----- ----
// g_mWorldViewProjection c0 4
// g_mUVmat c4 2
// g_vconst0 c13 1
// g_vconst1 c14 1
//
vs_2_0
def c6, 1, 0, 0, 0
dcl_position v0
dcl_color v1
dcl_texcoord v2
dcl_texcoord1 v3
dcl_texcoord2 v4
dcl_texcoord3 v5
mul r0.xyz, v4.wzww, c14.yyxw
mad r0.x, c14.x, v4.z, -r0.x
add r0.y, r0.z, r0.y
mad r0.y, r0.y, v3.y, v3.w
mad r0.x, r0.x, v3.x, v3.z
mul r0.xy, r0, v4
mul r1.xyz, v5.yxyw, c14.wwzw
add r0.z, r1.z, r1.y
mad r0.w, v5.x, c14.z, -r1.x
mul r1.x, r0.z, r0.y
mul r0.y, r0.w, r0.y
mad r0.w, r0.x, r0.w, -r1.x
mad r0.x, r0.x, r0.z, r0.y
add r1.xy, r0.wxzw, v0
mad r1.zw, v0.z, c6.xyxy, c6.xyyx
dp4 oPos.x, r1, c0
dp4 oPos.y, r1, c1
dp4 oPos.z, r1, c2
dp4 oPos.w, r1, c3
mul oD0, v1, c13
mul r0.xy, v2, c4
add r0.x, r0.y, r0.x
add oT0.x, r0.x, c4.w
mul r0.xy, v2, c5
add r0.x, r0.y, r0.x
add oT0.y, r0.x, c5.w
// approximately 26 instruction slots used
", ppShader = &0xdf9a16e0) = D3D_OK
228 @0 IDirect3DDevice9::CreateVertexShader(this = 0xf4f23080, pFunction = "//
// Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111
//
// Parameters:
//
// float g_fconst0;
// float g_fconst1;
// float g_fconst2;
// float g_fconst3;
// float g_fconst4;
// float4x4 g_mWorldViewProjection;
// float4 g_va0[128];
// float4 g_va1[64];
// float4 g_vconst0;
// float4 g_vconst1;
// float4 g_vconst2;
//
//
// Registers:
//
// Name Reg Size
// ---------------------- ----- ----
// g_mWorldViewProjection c0 4
// g_fconst0 c8 1
// g_fconst1 c9 1
// g_fconst2 c10 1
// g_fconst3 c11 1
// g_fconst4 c12 1
// g_vconst0 c13 1
// g_vconst1 c14 1
// g_vconst2 c15 1
// g_va0 c17 128
// g_va1 c145 64
//
vs_2_0
def c4, 0.5, 4, 1, 0
dcl_position v0
dcl_texcoord v1
mul r0.x, v1.y, c8.x
mad r0.y, r0.x, c4.x, c4.x
frc r0.z, r0.y
add r0.w, r0.y, -r0.z
slt r0.z, -r0.z, r0.z
slt r0.y, r0.y, -r0.y
mad r0.y, r0.y, r0.z, r0.w
mul r0.z, r0.x, c4.x
frc r0.w, r0.z
add r1.x, r0.z, -r0.w
slt r0.w, -r0.w, r0.w
slt r0.z, r0.z, -r0.z
mad r0.z, r0.z, r0.w, r1.x
add r0.y, -r0.z, r0.y
mova a0.x, r0.z
lrp r1.xy, r0.y, c17[a0.x].zwzw, c17[a0.x]
add r0.y, -v1.x, c4.z
mad r2.x, r1.y, -r0.y, v0.x
mov r3.x, c8.x
mad r0.z, v1.y, -r3.x, c10.x
mul r0.w, r0.x, c12.x
mad r0.z, c11.x, r0.z, r0.w
mad r2.y, r0.z, r0.y, v0.y
mov r2.zw, v0
dp4 oPos.x, r2, c0
dp4 oPos.y, r2, c1
dp4 oPos.z, r2, c2
dp4 oPos.w, r2, c3
rcp r0.z, c9.x
mul r0.w, r0.z, r0.x
mad r0.x, r0.x, -r0.z, c4.z
mul r2, r0.w, c15
mad r2, c14, r0.x, r2
mul r0.yz, r0.y, r2.xzww
mad oT0.xy, r2, v1.x, r0.yzzw
frc r0.y, r1.x
add r0.y, -r0.y, r1.x
mul r0.y, r0.y, c4.y
mova a0.x, r0.y
mul r1, r0.w, c147[a0.x]
mul r2, r0.w, c148[a0.x]
mad r2, c146[a0.x], r0.x, r2
mad r0, c145[a0.x], r0.x, r1
lrp r1, v1.x, r0, r2
mul oD0, r1, c13
// approximately 45 instruction slots used
", ppShader = &0xdf9a3ef0) = D3D_OK
229 @0 IDirect3DDevice9::CreateVertexShader(this = 0xf4f23080, pFunction = "//
// Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111
//
// Parameters:
//
// float g_fconst0;
// float g_fconst1;
// float g_fconst2;
// float g_fconst3;
// float g_fconst4;
// float4x4 g_mWorldViewProjection;
// float4 g_va0[128];
// float4 g_va1[64];
// float4 g_vconst0;
// float4 g_vconst1;
// float4 g_vconst2;
//
//
// Registers:
//
// Name Reg Size
// ---------------------- ----- ----
// g_mWorldViewProjection c0 4
// g_fconst0 c8 1
// g_fconst1 c9 1
// g_fconst2 c10 1
// g_fconst3 c11 1
// g_fconst4 c12 1
// g_vconst0 c13 1
// g_vconst1 c14 1
// g_vconst2 c15 1
// g_va0 c17 128
// g_va1 c145 64
//
vs_2_0
def c4, 0.5, 4, 1, 0
dcl_position v0
dcl_texcoord v1
mul r0.x, v1.y, c8.x
mad r0.y, r0.x, c4.x, c4.x
frc r0.z, r0.y
add r0.w, r0.y, -r0.z
slt r0.z, -r0.z, r0.z
slt r0.y, r0.y, -r0.y
mad r0.y, r0.y, r0.z, r0.w
mul r0.z, r0.x, c4.x
frc r0.w, r0.z
add r1.x, r0.z, -r0.w
slt r0.w, -r0.w, r0.w
slt r0.z, r0.z, -r0.z
mad r0.z, r0.z, r0.w, r1.x
add r0.y, -r0.z, r0.y
mova a0.x, r0.z
lrp r1.xy, r0.y, c17[a0.x].zwzw, c17[a0.x]
add r0.y, -v1.x, c4.z
mad r2.z, r1.y, -r0.y, v0.z
mov r3.x, c8.x
mad r0.z, v1.y, -r3.x, c10.x
mul r0.w, r0.x, c12.x
mad r0.z, c11.x, r0.z, r0.w
add r2.y, r0.z, v0.y
mov r2.xw, v0
dp4 oPos.x, r2, c0
dp4 oPos.y, r2, c1
dp4 oPos.z, r2, c2
dp4 oPos.w, r2, c3
rcp r0.z, c9.x
mul r0.w, r0.z, r0.x
mad r0.x, r0.x, -r0.z, c4.z
mul r2, r0.w, c15
mad r2, c14, r0.x, r2
mul r0.yz, r0.y, r2.xzww
mad oT0.xy, r2, v1.x, r0.yzzw
frc r0.y, r1.x
add r0.y, -r0.y, r1.x
mul r0.y, r0.y, c4.y
mova a0.x, r0.y
mul r1, r0.w, c147[a0.x]
mul r2, r0.w, c148[a0.x]
mad r2, c146[a0.x], r0.x, r2
mad r0, c145[a0.x], r0.x, r1
lrp r1, v1.x, r0, r2
mul oD0, r1, c13
// approximately 45 instruction slots used
", ppShader = &0xdf9a5a20) = D3D_OK
230 @0 IDirect3DDevice9::CreateVertexShader(this = 0xf4f23080, pFunction = "//
// Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111
//
// Parameters:
//
// float g_fconst0;
// float g_fconst1;
// float g_fconst2;
// float4x4 g_mWorldViewProjection;
// float4 g_va0[128];
// float4 g_va1[64];
// float4 g_vconst0;
// float4 g_vconst1;
// float4 g_vconst2;
//
//
// Registers:
//
// Name Reg Size
// ---------------------- ----- ----
// g_mWorldViewProjection c0 4
// g_fconst0 c8 1
// g_fconst1 c9 1
// g_fconst2 c10 1
// g_vconst0 c13 1
// g_vconst1 c14 1
// g_vconst2 c15 1
// g_va0 c17 128
// g_va1 c145 64
//
vs_2_0
def c4, 4, 0.25, 8, -4
def c5, -1, -2, 0, 0.5
dcl_position v0
dcl_texcoord v1
mul r0.x, v1.y, c8.x
frc r0.y, r0.x
add r0.z, r0.x, -r0.y
slt r0.y, -r0.y, r0.y
slt r0.w, r0.x, -r0.x
mad r0.y, r0.w, r0.y, r0.z
mul r0.zw, r0.y, c4.xyxy
sge r0.z, r0.z, -r0.z
mad r0.z, r0.z, c4.z, c4.w
rcp r1.x, r0.z
mul r1.x, r0.y, r1.x
frc r1.x, r1.x
mul r0.z, r0.z, r1.x
frc r1.xz, r0.zyww
add r1.yw, r0.xzzw, -r1.xxzz
slt r0.zw, r0, -r0
slt r1.xz, -r1, r1
mad r0.z, r0.z, r1.x, r1.y
add r1.xy, r0.z, c5
mul r0.z, r0.z, r0.z
sge r0.z, -r0.z, r0.z
mul r1.xy, r1, r1
sge r1.xy, -r1, r1
mad r0.w, r0.w, r1.z, r1.w
mova a0.x, r0.w
lrp r0.w, r1.y, c145[a0.x].z, c145[a0.x].w
lrp r2.x, r1.x, c145[a0.x].y, r0.w
lrp r1.z, r0.z, c145[a0.x].x, r2.x
mova a0.x, r0.y
lrp r1.xy, v1.x, c17[a0.x].zwzw, c17[a0.x]
add r0.zw, c17[a0.x], c17[a0.x].xyxy
mov r1.w, v0.w
dp4 oPos.x, r1, c0
dp4 oPos.y, r1, c1
dp4 oPos.z, r1, c2
dp4 oPos.w, r1, c3
add r1.x, r0.y, c5.x
slt r0.y, c5.z, r0.y
mova a0.x, r1.x
add r0.zw, r0, -c17[a0.x].xyxy
add r0.zw, r0, -c17[a0.x]
mul r0.zw, r0, r0
add r0.z, r0.w, r0.z
rsq r0.z, r0.z
rcp r0.z, r0.z
mul r0.z, r0.z, c5.w
rcp r0.w, c10.x
mul r0.z, r0.w, r0.z
min r0.z, r0.z, -c5.x
rcp r0.w, c9.x
mul r0.x, r0.w, r0.x
mov r1, c14
add r1, -r1, c15
mad r1, r0.x, r1, c14
mov oT0.x, r0.x
mad r0.x, r1.w, r0.z, -r1.w
mov r0.z, c5.z
slt r0.z, r0.z, c10.x
mul r0.y, r0.y, r0.z
mad r1.w, r0.y, r0.x, r1.w
mul oD0, r1, c13
mov oT0.y, v1.x
// approximately 62 instruction slots used
", ppShader = &0xdf9a78a0) = D3D_OK
231 @0 IDirect3DDevice9::CreateVertexShader(this = 0xf4f23080, pFunction = "//
// Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111
//
// Parameters:
//
// float4x4 g_mWorldViewProjection;
// float4 g_va0[128];
// float4 g_vconst0;
// float4 g_vconst1;
//
//
// Registers:
//
// Name Reg Size
// ---------------------- ----- ----
// g_mWorldViewProjection c0 4
// g_vconst0 c13 1
// g_vconst1 c14 1
// g_va0 c17 128
//
vs_2_0
def c4, -3, 1, -1, 0
def c5, -2, 2, 0.5, 9
def c6, 5, 4, 10, 8
dcl_position v0
dcl_texcoord v1
add r0.x, v1.y, -c5.z
mul r0.x, r0.x, c14.y
mov r1.xw, c4
add r0.y, r1.x, c14.x
mul r0.z, r0.y, v1.x
mad r0.y, v1.x, r0.y, c4.y
frc r0.z, r0.z
slt r0.w, -r0.z, r0.z
add r0.z, r0.y, -r0.z
slt r1.x, r0.y, -r0.y
mad r0.z, r1.x, r0.w, r0.z
add r0.w, r0.z, c4.z
add r0.y, -r0.z, r0.y
mova a0.xy, r0.wzzw
slt r0.z, c17[a0.y].w, r1.w
mul r0.z, r0.z, c17[a0.y].w
mov r1.x, c5.x
mad r0.z, r0.z, r1.x, c17[a0.y].w
lrp r2.x, r0.y, -c18[a0.y].w, r0.z
add r0.w, -r0.z, r2.x
add r1.x, -r0.z, -c18[a0.y].w
lrp r3.x, r0.y, c18[a0.y].w, r0.z
rcp r0.z, r1.x
mul r1.x, r0.z, r0.w
mul r1.y, r1.x, r1.x
mul r1.z, r1.x, r1.y
mul r4.xy, r1.y, c6
mad r4.x, r1.z, -c4.x, -r4.x
mad r4.y, r1.z, c4.x, r4.y
mad r1.z, r1.y, c5.y, -r1.z
mad r1.z, r0.w, -r0.z, r1.z
mad r0.z, r0.w, r0.z, r4.y
mul r0.z, r0.z, c5.z
mul r0.w, r1.z, c5.z
add r1.z, r4.x, c5.y
mul r1.z, r1.z, c5.z
mul r4.xyz, r1.z, c17[a0.y]
mad r4.xyz, c17[a0.x], r0.w, r4
mad r4.xyz, c18[a0.y], r0.z, r4
mad r0.z, r1.y, r1.x, -r1.y
mul r0.z, r0.z, c5.z
mad r4.xyz, c19[a0.y], r0.z, r4
add r0.z, -r0.y, c4.y
mul r5.xyz, r0.y, c18[a0.y]
mad r0.yzw, c17[a0.y].xxyz, r0.z, r5.xxyz
slt r1.z, c18[a0.y].w, r1.w
lrp r5.xyz, r1.z, r4, r0.yzww
mul r0.yzw, r1.x, c6
mad r0.z, r1.y, c5.w, -r0.z
mul r0.z, r0.z, c5.z
mul r4.xyz, r0.z, c17[a0.y]
mad r0.y, r1.y, c4.x, r0.y
mad r0.z, r1.y, -c5.w, r0.w
mul r0.w, r1.y, -c4.x
mad r0.w, r1.x, -c5.y, r0.w
add r0.yz, r0, c4.xzyw
mul r0.yzw, r0, c5.z
mad r1.xyw, c17[a0.x].xyzz, r0.y, r4.xyzz
mad r1.xyw, c18[a0.y].xyzz, r0.z, r1
mad r0.yzw, c19[a0.y].xxyz, r0.w, r1.xxyw
mov r4.xyz, c18[a0.y]
add r1.xyw, r4.xyzz, -c17[a0.y].xyzz
mul r4.xy, r0.yzzw, r0.yzzw
add r4.x, r4.y, r4.x
mad r4.x, r0.w, r0.w, r4.x
rsq r4.x, r4.x
mul r2.yzw, r0, r4.x
mul r0.yz, r1.xxyw, r1.xxyw
add r0.y, r0.z, r0.y
mad r0.y, r1.w, r1.w, r0.y
rsq r0.y, r0.y
mul r3.yzw, r0.y, r1.xxyw
lrp r4, r1.z, r2, r3
mul r0.yzw, r4.xzyw, c4.xyzy
mul oT0.x, r4.x, c5.z
mad r0.xyz, r0.yzww, r0.x, r5
mov r0.w, v0.w
dp4 oPos.x, r0, c0
dp4 oPos.y, r0, c1
dp4 oPos.z, r0, c2
dp4 oPos.w, r0, c3
mov oD0, c13
mov oT0.y, v1.y
// approximately 83 instruction slots used
", ppShader = &0xdf9a97a0) = D3D_OK
../src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp:229: void nv50_ir::CodeEmitterGM107::emitField(uint32_t*, int, int, uint32_t): Assertion `!(v & ~m) || (v & ~m) == ~m' failed.
Followed by a crash, "assertion failed in 32-bit code" (as opposed to a silent hang, which is what I get from the game itself). Anyway, I've xzipped it and put it on my server, if that helps: https://vigovproductions.net/trace.xz
I don't know about tracking down the commit that caused it. If I get a bit more time, I might try it.
If it is nouveau issue, it would make sense to open a bug report to the nouveau component of mesa on freedesktop's bugzilla, linking to this bug report.
Yeah, I might just do that. FWIW, commenting out the offending assert within Mesa fixes the issue and doesn't (seem to) break anything else, if anyone's looking for a quick fix.