wined3d: Mark vertex shader 3.0 as foggy shaders if they write out the fog coord

Fabian Bieler der.fabe at gmx.net
Thu Apr 12 10:52:18 CDT 2007


Vertex shaders are marked as 'foggy shaders' in wined3d if they write out the 
fog coord. Previously this was not done for vertex shaders 3.0. This patch 
corrects this problem.
-------------- next part --------------
From c62ca4196693e0befe9abc8e9ef2b6f601277cdb Mon Sep 17 00:00:00 2001
From: Fabian Bieler <der.fabe at gmx.net>
Date: Thu, 12 Apr 2007 17:51:07 +0200
Subject: [PATCH] wined3d: Mark vertex shader 3.0 as foggy shaders if they write out the fog coord

---
 dlls/wined3d/glsl_shader.c     |    2 ++
 dlls/wined3d/vertexshader.c    |    2 +-
 dlls/wined3d/wined3d_private.h |    1 +
 3 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index 5700902..f21ca5d 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -1992,6 +1992,7 @@ void pshader_glsl_input_pack(
 
 void vshader_glsl_output_unpack(
    SHADER_BUFFER* buffer,
+   shader_reg_maps* reg_maps,
    semantic* semantics_out) {
 
    unsigned int i;
@@ -2036,6 +2037,7 @@ void vshader_glsl_output_unpack(
 
            case WINED3DDECLUSAGE_FOG:
                shader_addline(buffer, "gl_FogFragCoord = OUT%u%s;\n", i, reg_mask);
+               reg_maps->fog = 1;
                break;
 
            default:
diff --git a/dlls/wined3d/vertexshader.c b/dlls/wined3d/vertexshader.c
index 22c49c2..72aa28c 100644
--- a/dlls/wined3d/vertexshader.c
+++ b/dlls/wined3d/vertexshader.c
@@ -334,7 +334,7 @@ static VOID IWineD3DVertexShaderImpl_GenerateShader(
 
         /* Unpack 3.0 outputs */
         if (This->baseShader.hex_version >= WINED3DVS_VERSION(3,0))
-            vshader_glsl_output_unpack(&buffer, This->semantics_out);
+            vshader_glsl_output_unpack(&buffer, reg_maps, This->semantics_out);
 
         /* If this shader doesn't use fog copy the z coord to the fog coord so that we can use table fog */
         if (reg_maps->fog)
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index d0da532..0972397 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -1733,6 +1733,7 @@ extern void pshader_glsl_input_pack(
 /** GLSL Vertex Shader Prototypes */
 extern void vshader_glsl_output_unpack(
    SHADER_BUFFER* buffer,
+   shader_reg_maps* reg_maps,
    semantic* semantics_out);
 
 /*****************************************************************************
-- 
1.4.4.1



More information about the wine-patches mailing list