Module: wine Branch: master Commit: 33482a732e11b514f567ce9d4750da7c89175205 URL: http://source.winehq.org/git/wine.git/?a=commit;h=33482a732e11b514f567ce9d47...
Author: Stefan Dösinger stefan@codeweavers.com Date: Thu Nov 20 15:23:19 2008 +0100
wined3d: Enable blue = 1.0 fixup for D3DFMT_V8U8.
The dx7 sdk demos need this.
---
dlls/wined3d/arb_program_shader.c | 15 +++++++-------- dlls/wined3d/utils.c | 29 +++++++++-------------------- 2 files changed, 16 insertions(+), 28 deletions(-)
diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c index 3a52453..e8a6e96 100644 --- a/dlls/wined3d/arb_program_shader.c +++ b/dlls/wined3d/arb_program_shader.c @@ -601,14 +601,13 @@ static void gen_color_correction(SHADER_BUFFER *buffer, const char *reg, const c case WINED3DFMT_V8U8: case WINED3DFMT_V16U16: if(GL_SUPPORT(NV_TEXTURE_SHADER) && fmt == WINED3DFMT_V8U8) { - if(0) { - /* The 3rd channel returns 1.0 in d3d, but 0.0 in gl. Fix this while we're at it :-) - * disabled until an application that needs it is found because it causes unneeded - * shader recompilation in some game - */ - if(strlen(writemask) >= 4) { - shader_addline(buffer, "MOV %s.%c, %s;\n", reg, writemask[3], one); - } + /* The 3rd channel returns 1.0 in d3d, but 0.0 in gl. Fix this while we're at it :-) + * The dx7 sdk BumpEarth demo needs it because it uses BUMPENVMAPLUMINANCE with V8U8. + * With the luminance(b) value = 1.0, BUMPENVMAPLUMINANCE == BUMPENVMAP, but if b is + * 0.0(without this fixup), the rendering breaks. + */ + if(strlen(writemask) >= 4) { + shader_addline(buffer, "MOV %s.%c, %s;\n", reg, writemask[3], one); } } else { /* Correct the sign, but leave the blue as it is - it was loaded correctly already diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c index b49072f..f027404 100644 --- a/dlls/wined3d/utils.c +++ b/dlls/wined3d/utils.c @@ -365,28 +365,17 @@ BOOL initPixelFormats(WineD3D_GL_Info *gl_info)
/* V8U8 is supported natively by GL_ATI_envmap_bumpmap and GL_NV_texture_shader. * V16U16 is only supported by GL_NV_texture_shader. The formats need fixup if - * their extensions are not available. + * their extensions are not available. GL_ATI_envmap_bumpmap is not used because + * the only driver that implements it(fglrx) has a buggy implementation. * - * In theory, V8U8 and V16U16 need a fixup of the undefined blue channel. OpenGL - * returns 0.0 when sampling from it, DirectX 1.0. This is disabled until we find - * an application that needs this because it causes performance problems due to - * shader recompiling in some games. + * V8U8 and V16U16 need a fixup of the undefined blue channel. OpenGL + * returns 0.0 when sampling from it, DirectX 1.0. So we always have in-shader + * conversion for this format. */ - if(!GL_SUPPORT(NV_TEXTURE_SHADER2)) { - /* signed -> unsigned fixup */ - dst = getFmtIdx(WINED3DFMT_V8U8); - gl_info->gl_formats[dst].conversion_group = WINED3DFMT_V8U8; - dst = getFmtIdx(WINED3DFMT_V16U16); - gl_info->gl_formats[dst].conversion_group = WINED3DFMT_V8U8; - } else { - /* Blue = 1.0 fixup, disabled for now */ - if(0) { - dst = getFmtIdx(WINED3DFMT_V8U8); - gl_info->gl_formats[dst].conversion_group = WINED3DFMT_V8U8; - dst = getFmtIdx(WINED3DFMT_V16U16); - gl_info->gl_formats[dst].conversion_group = WINED3DFMT_V8U8; - } - } + dst = getFmtIdx(WINED3DFMT_V8U8); + gl_info->gl_formats[dst].conversion_group = WINED3DFMT_V8U8; + dst = getFmtIdx(WINED3DFMT_V16U16); + gl_info->gl_formats[dst].conversion_group = WINED3DFMT_V8U8;
if(!GL_SUPPORT(NV_TEXTURE_SHADER)) { /* If GL_NV_texture_shader is not supported, those formats are converted, incompatibly