https://bugs.winehq.org/show_bug.cgi?id=8848
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |focht@gmx.net
--- Comment #23 from Anastasius Focht focht@gmx.net --- Hello folks,
Henri's analysis is spot on :)
The original pixel shader source, extracted from 'shaders.spk' for reference:
--- snip ---
// dynamic preproc // [0] EMISSIVE_TEXTURE, emissive present in texture // [1] EMISSIVE_CONSTANT, emissive comes from constant color (c5) // [2] EMISSIVE_MASK, emissive mask present
// c0 = ambient color = rgb, emissive scale = a // c1 = 0.5*(1+agratio) = rgb, 0.5*(1-agratio) = a // c2 = constant emissive color (if needed) def c6,1,0,0,0 // bumpmap decompression const
#if EMISSIVE_TEXTURE #define EMISSIVE_REG t2 #elif EMISSIVE_CONSTANT #define EMISSIVE_REG c2 #endif
tex t0 // diffuse map tex t1 // normal map #if EMISSIVE_TEXTURE tex t2 // emissive map #endif #if EMISSIVE_MASK tex t3 // emissive mask #endif
#include "DecompressNormalMap.psi"
// calculate 0.5 + 0.5 cos(a) (hemispherical surface attenuation) * ambient color dp3 r0, t1_bx2, v0_bx2
mad r0, r0, c1.a, c1
mul r0.rgb, r0, c0 #if (EMISSIVE_TEXTURE || EMISSIVE_CONSTANT) && EMISSIVE_MASK +mul r1.a, t3.a, c0.a // emissive mask * scale in r1.a #elif (EMISSIVE_TEXTURE || EMISSIVE_CONSTANT) +mov r1.a, c0.a // emissive scale in r1.a #endif
mul_x2 r0.rgb, r0, t0 // multiply by diffuse texture +mov r0.a, t0.a // output diffuse alpha
// add in emissive component * emissive scale in r1.a #if (EMISSIVE_TEXTURE || EMISSIVE_CONSTANT) mad r0.rgb, EMISSIVE_REG, r1.a, r0 #endif --- snip ---
Repack the pixel shader with 'mul r0.rgb, r0, c0' line commented out to see the effect.
$ wine --version wine-1.7.25-51-g60de497
Regards