Stefan Dösinger : wined3d: Enable blue = 1. 0 fixup for D3DFMT_V8U8.

Alexandre Julliard julliard at winehq.org
Tue Nov 25 07:21:45 CST 2008


Module: wine
Branch: master
Commit: 33482a732e11b514f567ce9d4750da7c89175205
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=33482a732e11b514f567ce9d4750da7c89175205

Author: Stefan Dösinger <stefan at 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




More information about the wine-cvs mailing list