iXit / Mesa-3D

Please use official https://gitlab.freedesktop.org/mesa/mesa/ !
https://github.com/iXit/Mesa-3D/wiki
66 stars 13 forks source link

Counter Strike: Global Offensive & Dota 2 Crash During Map Load #6

Closed sarnex closed 10 years ago

sarnex commented 10 years ago

Hi. When I am loading a map in CSGO and DOTA 2, the game crashes while loading. I can't backtrace Dota 2 because Steam will close Dota 2 when it isn't opened by Steam. If you know of a way to backtrace Dota 2, let me know.

OS: Mint 17 x86_64 Kernel: 3.16.1-031601-generic gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2 Wine: From my ppa, 1.7.24 with patch from Thermionix, and 1.7.19 from okias's github. Mesa: From oibaf's ppa, mesa git with this patch from okias: http://pastebin.ca/2834953 AND mesa with f4b0ab7afd83c811329211eae8167c9bf238870c reverted LLVM: Tried 3.5 and 3.6 from llvm.org/apt GPU & Driver: Radeon HD 7950, radeonsi CS:GO Version: Latest version from Steam and 1.34.1.1 Dota 2 Version: Only latest from Steam

Backtrace for CSGO with okias patch included: http://pastebin.com/raw.php?i=8nPmkfrn Backtrace for CSGO without okias patch: http://pastebin.com/raw.php?i=4atw8eqJ

Uramekus commented 10 years ago

csgo works fine for me (nouveau: gtx 770) probly a radeon nine problem

sarnex commented 10 years ago

Tom^ in irc also uses nouveau and gets the same crash as me exactly. Okias gets the same crash as me on r600g(I think). Very strange that you don't get it. Are you sure you are using mesa compiled with libd3dadapter and wine w/ gallium nine and UseNative=1?

okias commented 10 years ago

@Uramekus are you sure you running on nine? Can you upload somewhere log with nine enabled? Also which version of kernel/mesa/wine do you run? It's d3d9 state tracker from patch or git?

Uramekus commented 10 years ago

Linux arque 3.16.1-1-ARCH #1 SMP PREEMPT Thu Aug 14 07:40:19 CEST 2014 x86_64 GNU/Linux (using arch linux) snapshot2

mesa from here (compiled 25 aug) https://docs.google.com/file/d/0B29SlCylOCovMFRDcnVNN0Z2QXc/edit?pli=1 ^ that wine (outdated version) will upload the log later, i disabled nine and wine debug but i'm going to enable, no prob 2 recompile

ps: do not enable the overlay to run CS:GO, that can bug the game

okias commented 10 years ago

OS: Gentoo Kernel: 3.16.1 Wine: From my ppa, 1.7.21-r1 from ::ixit overlay Mesa: 2014-08-26 10:40 LLVM: 3.5.0svn GPU & Driver: Radeon HD 6550D, r600g CS:GO Version: 1.34.1.1 Used my patch: http://pastebin.ca/2834953 (improved version is in git e824ec5 )

It works, about 20fps on 1920x1080, lowest settings (debug version)

Tele42 commented 10 years ago

@sarnex launching steam with -nobreakpad may let DOTA2's crash reach winedbg, I haven't done it personally, but I hear that has a chance.

sarnex commented 10 years ago

@Tele42 Just tested it, unfortunately it doesn't.

pwnz7777 commented 10 years ago

OS: Mint 17 Kernel: 3.16.0 Wine: sarnex's ppa Mesa: oibaf/sarnex (nine) GPU: 6670 (not sure about driver) Max settings @ 1080 running at 15-18~ fps (60 fps stable if i use lowest) Works everything except shadows, they are not shown in his correct place

sarnex commented 10 years ago

TGSI log: http://pastebin.com/raw.php?i=2cJSULsp

Here is some info from marek:

the bug is in nine the last shader in the log uses CONST[1283] on the second line, but there's only 276 constants declared it could be a typo but I'm not sure :)
okias commented 10 years ago

Important part of log is: D3D9 Shader:

PS3.0
DEF c0 { 1.000000 0.000000 1.041667 -0.020833 }
DEF c2 { 0.500000 0.212500 0.715400 0.072100 }
DCL v0.xy__ TEXCOORD0
DCL v1.___w TEXCOORD3
DCL v2 TEXCOORD7
DCL v3 TEXCOORD6
DCL v4 TEXCOORD2
DCL s0 2D
DCL s15 2D
TEX r0 v0 s0 
IF bconst[0] /* this seems to be correct */
  MAD r1 v2.xyzx c0.xxxy c0.yyyx 
  DP4 r2.__z_ r1 c71 
  DP4 r3.x___ r1 c73 
  DP4 r3._y__ r1 c74 
  MAD r3.__zw r3.xyxy c0.zzzz c0.wwww 
  MOV sat r4.xy__ r3.zwzw 
  ADD r3.__zw -(r3) r4.xyxy 
  DP2ADD r3.__z_ r3.zwzw c0.xxxx c0.yyyy 
  DP4 r3.___w r1 c77 
  DP4 r1.x___ r1 c78 
  CMP sat r4.x___ -abs(r3).zzzz r3.xxxx r3.wwww 
  CMP sat r4._y__ -abs(r3).zzzz r3.yyyy r1.xxxx 
  MOV r1.xy__ c86 
  CMP r1.xy__ -abs(r3).zzzz r1 c87 
  MAD r2.xy__ r4 c2.xxxx r1 
  MOV pp r2.___w c0.yyyy 
  TEXLDL r1 r2 s15 
  ADD r1._yzw -(c89).xxyz v2.xxyz 
  DP3 r1._y__ r1.yzww r1.yzww 
  MAD sat r1._y__ r1.yyyy c68.yyyy c68.xxxx 
  LRP r2.x___ r1.yyyy c0.xxxx r1.xxxx 
  ELSE 
  MOV r2.x___ c0.xxxx 
  ENDIF 
MOV r1.xyz_ v4 
MAD r1.xyz_ r1 r2.xxxx v3 
IF bconst[0] /* also seems to be correct */
  DP3 r1.___w r1 c2.yzww 
  RCP r1.___w r1.wwww 
  MUL r1.___w r1.wwww v4.wwww 
  ADD r2.x___ -(r2).xxxx c0.xxxx 
  MAD r1.___w r1.wwww -(r2).xxxx c0.xxxx 
  MUL r2.xyz_ r1.wwww r1.zyxw 
  MAD r2.___w r1.wwww c2.xxxx c2.xxxx 
  LRP r1.xyz_ r2.wwww r2.zyxw r2 
  ENDIF 

... and ... TGSI generated code:

FRAG
DCL IN[0], GENERIC[0], PERSPECTIVE
DCL IN[1], GENERIC[3], PERSPECTIVE
DCL IN[2], GENERIC[7], PERSPECTIVE
DCL IN[3], GENERIC[6], PERSPECTIVE
DCL IN[4], GENERIC[2], PERSPECTIVE
DCL OUT[0], COLOR
DCL SAMP[0]
DCL SAMP[15]
DCL CONST[0..275]
DCL TEMP[0..4]
DCL TEMP[5], LOCAL
IMM[0] FLT32 {    1.0000,     0.0000,     1.0417,    -0.0208}
IMM[1] FLT32 {    0.5000,     0.2125,     0.7154,     0.0721}
  0: TEX TEMP[0], IN[0], SAMP[0], 2D
  1: UIF CONST[1283].xxxx :0 /* random number, jump to :0 ?! */
  2:   MAD TEMP[1], IN[2].xyzx, IMM[0].xxxy, IMM[0].yyyx
  3:   DP4 TEMP[2].z, TEMP[1], CONST[71]
  4:   DP4 TEMP[3].x, TEMP[1], CONST[73]
  5:   DP4 TEMP[3].y, TEMP[1], CONST[74]
  6:   MAD TEMP[3].zw, TEMP[3].xyxy, IMM[0].zzzz, IMM[0].wwww
  7:   MOV_SAT TEMP[4].xy, TEMP[3].zwzw
  8:   ADD TEMP[3].zw, -TEMP[3], TEMP[4].xyxy
  9:   DP2 TEMP[5].x, TEMP[3].zwzw, IMM[0].xxxx
 10:   ADD TEMP[3].z, IMM[0].yyyy, TEMP[5].xxxx
 11:   DP4 TEMP[3].w, TEMP[1], CONST[77]
 12:   DP4 TEMP[1].x, TEMP[1], CONST[78]
 13:   CMP_SAT TEMP[4].x, -|TEMP[3].zzzz|, TEMP[3].wwww, TEMP[3].xxxx
 14:   CMP_SAT TEMP[4].y, -|TEMP[3].zzzz|, TEMP[1].xxxx, TEMP[3].yyyy
 15:   MOV TEMP[1].xy, CONST[86]
 16:   CMP TEMP[1].xy, -|TEMP[3].zzzz|, CONST[87], TEMP[1]
 17:   MAD TEMP[2].xy, TEMP[4], IMM[1].xxxx, TEMP[1]
 18:   MOV TEMP[2].w, IMM[0].yyyy
 19:   TXL TEMP[1], TEMP[2], SAMP[15], SHADOW2D
 20:   ADD TEMP[1].yzw, -CONST[89].xxyz, IN[2].xxyz
 21:   DP3 TEMP[1].y, TEMP[1].yzww, TEMP[1].yzww
 22:   MAD_SAT TEMP[1].y, TEMP[1].yyyy, CONST[68].yyyy, CONST[68].xxxx
 23:   LRP TEMP[2].x, TEMP[1].yyyy, IMM[0].xxxx, TEMP[1].xxxx
 24: ELSE :26
 25:   MOV TEMP[2].x, IMM[0].xxxx
 26: ENDIF
 27: MOV TEMP[1].xyz, IN[4]
 28: MAD TEMP[1].xyz, TEMP[1], TEMP[2].xxxx, IN[3]
 29: UIF CONST[1283].xxxx :38  /* random number (previously filled), jump correct location */
 30:   DP3 TEMP[1].w, TEMP[1], IMM[1].yzww
 31:   RCP TEMP[1].w, TEMP[1].wwww
 32:   MUL TEMP[1].w, TEMP[1].wwww, IN[4].wwww
 33:   ADD TEMP[2].x, -TEMP[2].xxxx, IMM[0].xxxx
 34:   MAD TEMP[1].w, TEMP[1].wwww, -TEMP[2].xxxx, IMM[0].xxxx
 35:   MUL TEMP[2].xyz, TEMP[1].wwww, TEMP[1].zyxw
 36:   MAD TEMP[2].w, TEMP[1].wwww, IMM[1].xxxx, IMM[1].xxxx
 37:   LRP TEMP[1].xyz, TEMP[2].wwww, TEMP[2].zyxw, TEMP[2]
 38: ENDIF

...

It seems it goes wrong in function src/gallium/state_trackers/nine/nine_shader.c:1594 or in function "tx_src_param" or function "tx_cond"

okias commented 10 years ago

UPDATE: correct mean it works, it seems I get also non-sense (>=275 or <0 values on r600g, but it somehow works) correct is from r600g on my HD 6550D. broken is from radeonsi on sarnex 7950, steam lastest

--- correct     2014-08-31 14:23:51.854428575 +0200                                                                                                                                                                                                                                                                          
+++ broken      2014-08-31 14:23:04.183432960 +0200                                                                                                                                                                                                                                                                          
@@ -12,7 +12,7 @@                                                                                                                                                                                                                                                                                                            
 IMM[0] FLT32 {    1.0000,     0.0000,     1.0417,    -0.0208}                                                                                                                                                                                                                                                               
 IMM[1] FLT32 {    0.5000,     0.2125,     0.7154,     0.0721}                                                                                                                                                                                                                                                               
   0: TEX TEMP[0], IN[0], SAMP[0], 2D                                                                                                                                                                                                                                                                                        
-  1: UIF CONST[272].xxxx :0                                                                                                                                                                                                                                                                                                 
+  1: UIF CONST[1283].xxxx :0                                                                                                                                                                                                                                                                                                
   2:   MAD TEMP[1], IN[2].xyzx, IMM[0].xxxy, IMM[0].yyyx                                                                                                                                                                                                                                                                    
   3:   DP4 TEMP[2].z, TEMP[1], CONST[71]                                                                                                                                                                                                                                                                                    
   4:   DP4 TEMP[3].x, TEMP[1], CONST[73]                                                                                                                                                                                                                                                                                    
@@ -30,7 +30,7 @@                                                                                                                                                                                                                                                                                                            
  16:   CMP TEMP[1].xy, -|TEMP[3].zzzz|, CONST[87], TEMP[1]                                                                                                                                                                                                                                                                  
  17:   MAD TEMP[2].xy, TEMP[4], IMM[1].xxxx, TEMP[1]                                                                                                                                                                                                                                                                        
  18:   MOV TEMP[2].w, IMM[0].yyyy                                                                                                                                                                                                                                                                                           
- 19:   TXL TEMP[1], TEMP[2], SAMP[15], 2D                                                                                                                                                                                                                                                                                   
+ 19:   TXL TEMP[1], TEMP[2], SAMP[15], SHADOW2D                                                                                                                                                                                                                                                                             
  20:   ADD TEMP[1].yzw, -CONST[89].xxyz, IN[2].xxyz                                                                                                                                                                                                                                                                         
  21:   DP3 TEMP[1].y, TEMP[1].yzww, TEMP[1].yzww                                                                                                                                                                                                                                                                            
  22:   MAD_SAT TEMP[1].y, TEMP[1].yyyy, CONST[68].yyyy, CONST[68].xxxx                                                                                                                                                                                                                                                      
@@ -40,7 +40,7 @@                                                                                                                                                                                                                                                                                                            
  26: ENDIF                                                                                                                                                                                                                                                                                                                  
  27: MOV TEMP[1].xyz, IN[4]                                                                                                                                                                                                                                                                                                 
  28: MAD TEMP[1].xyz, TEMP[1], TEMP[2].xxxx, IN[3]                                                                                                                                                                                                                                                                          
- 29: UIF CONST[272].xxxx :38                                                                                                                                                                                                                                                                                                
+ 29: UIF CONST[1283].xxxx :38                                                                                                                                                                                                                                                                                               
  30:   DP3 TEMP[1].w, TEMP[1], IMM[1].yzww                                                                                                                                                                                                                                                                                  
  31:   RCP TEMP[1].w, TEMP[1].wwww                                                                                                                                                                                                                                                                                          
  32:   MUL TEMP[1].w, TEMP[1].wwww, IN[4].wwww                                                                                                                                                                                                                                                                              ```

broken is from CS:GO 1.34.1.1 HD 7950 (radeonsi). correct from mine

--- correct     2014-08-31 15:24:36.872093310 +0200
+++ broken      2014-08-31 15:24:12.028095595 +0200
@@ -18,7 +18,7 @@
   2: MUL TEMP[0].xyz, TEMP[0], IN[3]
   3: MUL OUT[0].w, TEMP[0].wwww, IN[3].wwww
   4: MUL TEMP[2].xyz, TEMP[1], CONST[12]
-  5: UIF CONST[272].xxxx :39
+  5: UIF CONST[-1].xxxx :39
   6:   SLT TEMP[3].x, -TEMP[1].wwww, IMM[0].xxxx
   7:   IF TEMP[3].xxxx :38
   8:     DP3 TEMP[0].w, TEMP[1], IMM[0].yzww
@@ -41,7 +41,7 @@
  25:     CMP TEMP[1].xy, -|TEMP[2].wwww|, CONST[87], TEMP[1]
  26:     MAD TEMP[4].xy, TEMP[6], IMM[2].xxxx, TEMP[1]
  27:     MOV TEMP[4].w, IMM[0].xxxx
- 28:     TXL TEMP[1], TEMP[4], SAMP[15], 2D
+ 28:     TXL TEMP[1], TEMP[4], SAMP[15], SHADOW2D
  29:     ADD TEMP[1].yzw, -CONST[89].xxyz, IN[2].xxyz
  30:     DP3 TEMP[1].y, TEMP[1].yzww, TEMP[1].yzww
  31:     MAD_SAT TEMP[1].y, TEMP[1].yyyy, CONST[68].yyyy, CONST[68].xxxx
okias commented 10 years ago

problem is in overwritten const_b_base value. I'll look into it tomorrow, there is need attach debugger (winedbg or gdb) and monitor this value to find out, what code cause problem.

okias commented 10 years ago

should be fixed by "nine: always set info.const_{i,b}_base", commit 92392bf (until rebase)