https://bugs.winehq.org/show_bug.cgi?id=24614
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Summary|Medieval II: Total War |Multiple games crash or |(Sega) crashes on startup |hang on startup due to |or hangs (D3D ASM shader |D3DXAssembleShader not |comment parsing |handling apostrophes in |incomplete)('winetricks -q |comments (Medieval II: |d3dx9_36' is a workaround) |Total War, Yu-Gi-Oh! ONLINE | |3 client)('winetricks -q | |d3dx9_xx' is a workaround) Keywords| |download URL| |https://archive.org/details | |/yo3setup_20100709en
--- Comment #18 from Anastasius Focht focht@gmx.net --- Hello folks,
when you are merging bugs, please always reflect that in the summary line.
It's as Dan said in comment #9 - the 'Medieval II: Total War' demo (https://web.archive.org/web/20210417091753/https://dl.4players.de/f1/pc/medi...) doesn't exhibit the problem, works fine here.
Adding the download from duplicate bug 27678 ("Yu-Gi-Oh! ONLINE 3 client shows black screen on startup (D3DXAssembleShader doesn't handle apostrophes in comments)") for reproduce.
https://archive.org/details/yo3setup_20100709en
--- snip --- $ pwd /home/focht/.wine/drive_c/Program Files (x86)/Konami/Yu-Gi-Oh! ONLINE 3
$ wine ./yo3.exe ... 0118:Call d3dx9_40.D3DXAssembleShader(0076bca0,00000b7b,00000000,00000000,00000000,01b2f498,01b2f49c) ret=00550bdf 0118:Call d3dcompiler_47.D3DAssemble(0076bca0,00000b7b,00000000,00000000,00000000,00000000,01b2f498,01b2f49c) ret=0113fd51 0118:trace:d3dcompiler:D3DAssemble data 0076BCA0, datasize 2939, filename (null), defines 00000000, include 00000000, sflags 0, shader 01B2F498, error_messages 01B2F49C. ... 0118:trace:d3dcompiler:preprocess_shader Error during shader preprocessing 0118:trace:d3dcompiler:preprocess_shader Preprocessor messages: ":19:1: Warning: Newline in string constant encountered (started line 18)\n:20:1: Warning: Newline in string constant encountered (started line 18)\n:21:1: Warning: Newline in string constant encountered (started line 18)\n:22:1: Warning: Newline in string constant encountered (started line "... ... 0118:trace:d3dcompiler:D3DCreateBlob data_size 4220, blob 01B2F320 ... 0118:trace:d3dcompiler:preprocess_shader Shader source: ";Irrlicht Engine 0.10 D3D9 render path parallax mapping vertex shader\n; c0-3: Transposed world matrix \n; c4: Eye position \n; c8-11: Transposed worldViewProj matrix (Projection * View * World) \n; c12: Light01 position \n; c13: x,y,z: Light01 color; .w: 1/LightRadius\xb2 \n; c14: Light02 "... ... 0118:Ret d3dcompiler_47.D3DAssemble() retval=80004005 ret=0113fd51 0118:Ret d3dx9_40.D3DXAssembleShader() retval=88760b59 ret=00550bdf ... 0118:Call KERNEL32.OutputDebugStringA(01936c00 "Vertex shader compilation failed:\n") ret=005261c0 ... --- snip ---
Obviously still present.
I've extracted the vertex shader source in question from the binary:
--- snip --- ;Irrlicht Engine 0.10 D3D9 render path parallax mapping vertex shader ; c0-3: Transposed world matrix ; c4: Eye position ; c8-11: Transposed worldViewProj matrix (Projection * View * World) ; c12: Light01 position ; c13: x,y,z: Light01 color; .w: 1/LightRadius² ; c14: Light02 position ; c15: x,y,z: Light02 color; .w: 1/LightRadius² vs.1.1 dcl_position v0 ; position dcl_normal v1 ; normal dcl_color v2 ; color dcl_texcoord0 v3 ; texture coord dcl_texcoord1 v4 ; tangent dcl_texcoord2 v5 ; binormal
def c95, 0.5, 0.5, 0.5, 0.5 ; used for moving light vector to ps def c96, -1, 1, 1, 1 ; somewhere I've got a bug. flipping the vectors with this fixes it.
m4x4 oPos, v0, c8 ; transform position to clip space with worldViewProj matrix
m3x3 r5, v4, c0 ; transform tangent U m3x3 r7, v1, c0 ; transform normal W m3x3 r6, v5, c0 ; transform binormal V
m4x4 r4, v0, c0 ; vertex into world position add r2, c12, -r4 ; vtxpos - light1 pos add r3, c14, -r4 ; vtxpos - light2 pos add r1, -c4, r4 ; eye - vtxpos
dp3 r8.x, r5, r2 ; transform the light1 vector with U, V, W dp3 r8.y, r6, r2 dp3 r8.z, r7, r2 dp3 r9.x, r5, r3 ; transform the light2 vector with U, V, W dp3 r9.y, r6, r3 dp3 r9.z, r7, r3 dp3 r10.x, r5, r1 ; transform the eye vector with U, V, W dp3 r10.y, r6, r1 dp3 r10.z, r7, r1
dp3 r8.w, r8, r8 ; normalize light vector 1 (r8) rsq r8.w, r8.w mul r8, r8, r8.w ;mul r8, r8, c96 dp3 r9.w, r9, r9 ; normalize light vector 2 (r9) rsq r9.w, r9.w mul r9, r9, r9.w ;mul r9, r9, c96 dp3 r10.w, r10, r10 ; normalize eye vector (r10) rsq r10.w, r10.w mul r10, r10, r10.w mul r10, r10, c96
mad oT2.xyz, r8.xyz, c95, c95 ; move light vector 1 from -1..1 into 0..1 mad oT3.xyz, r9.xyz, c95, c95 ; move light vector 2 from -1..1 into 0..1 mad oT4.xyz, r10.xyz, c95, c95 ; move eye vector from -1..1 into 0..1
; calculate attenuation of light 1 dp3 r2.x, r2.xyz, r2.xyz ; r2.x = r2.x² + r2.y² + r2.z² mul r2.x, r2.x, c13.w ; r2.x * attenutation rsq r2, r2.x ; r2.xyzw = 1/sqrt(r2.x * attenutation) mul oD0, r2, c13 ; resulting light color = lightcolor * attenuation
; calculate attenuation of light 2 dp3 r3.x, r3.xyz, r3.xyz ; r3.x = r3.x² + r3.y² + r3.z² mul r3.x, r3.x, c15.w ; r2.x * attenutation rsq r3, r3.x ; r2.xyzw = 1/sqrt(r2.x * attenutation) mul oD1, r3, c15 ; resulting light color = lightcolor * attenuation
mov oT0.xy, v3.xy ; move out texture coordinates 1 mov oT1.xy, v3.xy ; move out texture coordinates 2 mov oD0.a, v2.a ; move out original alpha value --- snip ---
Relevant comment line "; somewhere I've got a bug. "
$ wine --version wine-6.6-196-g749f8c25e26
Regards