[PATCH] WineD3D: Move fogdensity and fogcolor to the fragment =

Stefan Doesinger stefan at codeweavers.com
Sun Dec 14 17:16:36 CST 2008


pipeline=0A=
=0A=
The next patches will move fogstart and fogend over, and split up=0A=
FOGVERTEXMODE and FOGTABLEMODE in a vertex part and a fragment part. If =
we=0A=
move those states over it doesn't make sense to keep these two in the =
vertex=0A=
pipe.=0A=
=0A=
Here's the reason phrased differently:=0A=
=0A=
Fog is applied by the fragment pipeline, so we should move those states=0A=
there. Currently we set the fog settings in the same way in all fragment=0A=
pipeline implementations, but the need for this change becomes obvious =
when=0A=
considering an OpenGL 3.0 compatible GLSL pipeline replacement: It will =
not=0A=
be able to use the fixed function "uniform" for this. Instead it'll have =
to=0A=
pass these settings in a generic uniform, and needs its own handler to =
do so.=0A=
---=0A=
 dlls/wined3d/arb_program_shader.c    |    2 ++=0A=
 dlls/wined3d/ati_fragment_shader.c   |    2 ++=0A=
 dlls/wined3d/nvidia_texture_shader.c |    2 ++=0A=
 dlls/wined3d/state.c                 |    8 ++++----=0A=
 dlls/wined3d/wined3d_private.h       |    2 ++=0A=
 5 files changed, 12 insertions(+), 4 deletions(-)=0A=
=0A=
diff --git a/dlls/wined3d/arb_program_shader.c =
b/dlls/wined3d/arb_program_shader.c=0A=
index 902c9d3..270a912 100644=0A=
--- a/dlls/wined3d/arb_program_shader.c=0A=
+++ b/dlls/wined3d/arb_program_shader.c=0A=
@@ -3191,6 +3191,8 @@ static const struct StateEntryTemplate =
arbfp_fragmentstate_template[] =3D {=0A=
     { STATE_RENDER(WINED3DRS_FOGTABLEMODE),               { =
STATE_RENDER(WINED3DRS_FOGENABLE),                  state_arbfp_fog      =
   }, 0                               },=0A=
     { STATE_RENDER(WINED3DRS_FOGVERTEXMODE),              { =
STATE_RENDER(WINED3DRS_FOGENABLE),                  state_arbfp_fog      =
   }, 0                               },=0A=
     { STATE_RENDER(WINED3DRS_SRGBWRITEENABLE),            { =
STATE_PIXELSHADER,                                  fragment_prog_arbfp  =
   }, 0                               },=0A=
+    { STATE_RENDER(WINED3DRS_FOGCOLOR),                   { =
STATE_RENDER(WINED3DRS_FOGCOLOR),                   state_fogcolor      =
}, 0                               },=0A=
+    { STATE_RENDER(WINED3DRS_FOGDENSITY),                 { =
STATE_RENDER(WINED3DRS_FOGDENSITY),                 state_fogdensity    =
}, 0                               },=0A=
     =
{STATE_TEXTURESTAGE(0,WINED3DTSS_TEXTURETRANSFORMFLAGS),{STATE_TEXTURESTA=
GE(0, WINED3DTSS_TEXTURETRANSFORMFLAGS), textransform      }, 0          =
                     },=0A=
     =
{STATE_TEXTURESTAGE(1,WINED3DTSS_TEXTURETRANSFORMFLAGS),{STATE_TEXTURESTA=
GE(1, WINED3DTSS_TEXTURETRANSFORMFLAGS), textransform      }, 0          =
                     },=0A=
     =
{STATE_TEXTURESTAGE(2,WINED3DTSS_TEXTURETRANSFORMFLAGS),{STATE_TEXTURESTA=
GE(2, WINED3DTSS_TEXTURETRANSFORMFLAGS), textransform      }, 0          =
                     },=0A=
diff --git a/dlls/wined3d/ati_fragment_shader.c =
b/dlls/wined3d/ati_fragment_shader.c=0A=
index 8b20f9b..7152a85 100644=0A=
--- a/dlls/wined3d/ati_fragment_shader.c=0A=
+++ b/dlls/wined3d/ati_fragment_shader.c=0A=
@@ -909,6 +909,8 @@ static void atifs_apply_pixelshader(DWORD state, =
IWineD3DStateBlockImpl *statebl=0A=
 =0A=
 static const struct StateEntryTemplate atifs_fragmentstate_template[] =
=3D {=0A=
     {STATE_RENDER(WINED3DRS_TEXTUREFACTOR),               { =
STATE_RENDER(WINED3DRS_TEXTUREFACTOR),              =
state_texfactor_atifs   }, 0                               },=0A=
+    { STATE_RENDER(WINED3DRS_FOGCOLOR),                   { =
STATE_RENDER(WINED3DRS_FOGCOLOR),                   state_fogcolor      =
}, 0                               },=0A=
+    { STATE_RENDER(WINED3DRS_FOGDENSITY),                 { =
STATE_RENDER(WINED3DRS_FOGDENSITY),                 state_fogdensity    =
}, 0                               },=0A=
     {STATE_TEXTURESTAGE(0, WINED3DTSS_COLOROP),           { =
STATE_TEXTURESTAGE(0, WINED3DTSS_COLOROP),          set_tex_op_atifs     =
   }, 0                               },=0A=
     {STATE_TEXTURESTAGE(0, WINED3DTSS_COLORARG1),         { =
STATE_TEXTURESTAGE(0, WINED3DTSS_COLOROP),          set_tex_op_atifs     =
   }, 0                               },=0A=
     {STATE_TEXTURESTAGE(0, WINED3DTSS_COLORARG2),         { =
STATE_TEXTURESTAGE(0, WINED3DTSS_COLOROP),          set_tex_op_atifs     =
   }, 0                               },=0A=
diff --git a/dlls/wined3d/nvidia_texture_shader.c =
b/dlls/wined3d/nvidia_texture_shader.c=0A=
index 1da6a0c..bd7fc9d 100644=0A=
--- a/dlls/wined3d/nvidia_texture_shader.c=0A=
+++ b/dlls/wined3d/nvidia_texture_shader.c=0A=
@@ -792,6 +792,8 @@ static const struct StateEntryTemplate =
nvrc_fragmentstate_template[] =3D {=0A=
     { STATE_PIXELSHADER,                                  { =
STATE_PIXELSHADER,                                  apply_pixelshader   =
}, 0                               },=0A=
     { STATE_RENDER(WINED3DRS_SRGBWRITEENABLE),            { =
STATE_PIXELSHADER,                                  apply_pixelshader   =
}, 0                               },=0A=
     { STATE_RENDER(WINED3DRS_TEXTUREFACTOR),              { =
STATE_RENDER(WINED3DRS_TEXTUREFACTOR),              nvrc_texfactor      =
}, 0                               },=0A=
+    { STATE_RENDER(WINED3DRS_FOGCOLOR),                   { =
STATE_RENDER(WINED3DRS_FOGCOLOR),                   state_fogcolor      =
}, 0                               },=0A=
+    { STATE_RENDER(WINED3DRS_FOGDENSITY),                 { =
STATE_RENDER(WINED3DRS_FOGDENSITY),                 state_fogdensity    =
}, 0                               },=0A=
     { STATE_SAMPLER(0),                                   { =
STATE_SAMPLER(0),                                   nvts_texdim         =
}, NV_TEXTURE_SHADER2              },=0A=
     { STATE_SAMPLER(0),                                   { =
STATE_SAMPLER(0),                                   sampler_texdim      =
}, 0                               },=0A=
     { STATE_SAMPLER(1),                                   { =
STATE_SAMPLER(1),                                   nvts_texdim         =
}, NV_TEXTURE_SHADER2              },=0A=
diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c=0A=
index e2989f3..8a5a8ae 100644=0A=
--- a/dlls/wined3d/state.c=0A=
+++ b/dlls/wined3d/state.c=0A=
@@ -1117,14 +1117,14 @@ static void state_rangefog(DWORD state, =
IWineD3DStateBlockImpl *stateblock, Wine=0A=
     }=0A=
 }=0A=
 =0A=
-static void state_fogcolor(DWORD state, IWineD3DStateBlockImpl =
*stateblock, WineD3DContext *context) {=0A=
+void state_fogcolor(DWORD state, IWineD3DStateBlockImpl *stateblock, =
WineD3DContext *context) {=0A=
     float col[4];=0A=
     D3DCOLORTOGLFLOAT4(stateblock->renderState[WINED3DRS_FOGCOLOR], =
col);=0A=
     glFogfv(GL_FOG_COLOR, &col[0]);=0A=
     checkGLcall("glFog GL_FOG_COLOR");=0A=
 }=0A=
 =0A=
-static void state_fogdensity(DWORD state, IWineD3DStateBlockImpl =
*stateblock, WineD3DContext *context) {=0A=
+void state_fogdensity(DWORD state, IWineD3DStateBlockImpl *stateblock, =
WineD3DContext *context) {=0A=
     union {=0A=
         DWORD d;=0A=
         float f;=0A=
@@ -5180,8 +5180,6 @@ const struct StateEntryTemplate =
ffp_vertexstate_template[] =3D {=0A=
     { STATE_RENDER(WINED3DRS_FOGSTART),                   { =
STATE_RENDER(WINED3DRS_FOGENABLE),                  state_fog           =
}, 0                               },=0A=
     { STATE_RENDER(WINED3DRS_FOGEND),                     { =
STATE_RENDER(WINED3DRS_FOGENABLE),                  state_fog           =
}, 0                               },=0A=
     { STATE_RENDER(WINED3DRS_FOGVERTEXMODE),              { =
STATE_RENDER(WINED3DRS_FOGENABLE),                  state_fog           =
}, 0                               },=0A=
-    { STATE_RENDER(WINED3DRS_FOGCOLOR),                   { =
STATE_RENDER(WINED3DRS_FOGCOLOR),                   state_fogcolor      =
}, 0                               },=0A=
-    { STATE_RENDER(WINED3DRS_FOGDENSITY),                 { =
STATE_RENDER(WINED3DRS_FOGDENSITY),                 state_fogdensity    =
}, 0                               },=0A=
     { STATE_RENDER(WINED3DRS_RANGEFOGENABLE),             { =
STATE_RENDER(WINED3DRS_RANGEFOGENABLE),             state_rangefog      =
}, NV_FOG_DISTANCE                 },=0A=
     { STATE_RENDER(WINED3DRS_RANGEFOGENABLE),             { =
STATE_RENDER(WINED3DRS_RANGEFOGENABLE),             state_rangefog_w    =
}, 0                               },=0A=
     { STATE_RENDER(WINED3DRS_CLIPPING),                   { =
STATE_RENDER(WINED3DRS_CLIPPING),                   state_clipping      =
}, 0                               },=0A=
@@ -5328,6 +5326,8 @@ static const struct StateEntryTemplate =
ffp_fragmentstate_template[] =3D {=0A=
     { STATE_RENDER(WINED3DRS_SRGBWRITEENABLE),            { =
STATE_PIXELSHADER,                                  apply_pixelshader   =
}, 0                               },=0A=
     { STATE_RENDER(WINED3DRS_BORDERCOLOR),                { =
STATE_RENDER(WINED3DRS_BORDERCOLOR),                state_bordercolor   =
}, 0                               },=0A=
     { STATE_RENDER(WINED3DRS_TEXTUREFACTOR),              { =
STATE_RENDER(WINED3DRS_TEXTUREFACTOR),              state_texfactor     =
}, 0                               },=0A=
+    { STATE_RENDER(WINED3DRS_FOGCOLOR),                   { =
STATE_RENDER(WINED3DRS_FOGCOLOR),                   state_fogcolor      =
}, 0                               },=0A=
+    { STATE_RENDER(WINED3DRS_FOGDENSITY),                 { =
STATE_RENDER(WINED3DRS_FOGDENSITY),                 state_fogdensity    =
}, 0                               },=0A=
     { STATE_SAMPLER(0),                                   { =
STATE_SAMPLER(0),                                   sampler_texdim      =
}, 0                               },=0A=
     { STATE_SAMPLER(1),                                   { =
STATE_SAMPLER(1),                                   sampler_texdim      =
}, 0                               },=0A=
     { STATE_SAMPLER(2),                                   { =
STATE_SAMPLER(2),                                   sampler_texdim      =
}, 0                               },=0A=
diff --git a/dlls/wined3d/wined3d_private.h =
b/dlls/wined3d/wined3d_private.h=0A=
index 43b1ae0..2cc6b23 100644=0A=
--- a/dlls/wined3d/wined3d_private.h=0A=
+++ b/dlls/wined3d/wined3d_private.h=0A=
@@ -2021,6 +2021,8 @@ void texture_activate_dimensions(DWORD stage, =
IWineD3DStateBlockImpl *stateblock=0A=
 void sampler_texdim(DWORD state, IWineD3DStateBlockImpl *stateblock, =
WineD3DContext *context);=0A=
 void tex_alphaop(DWORD state, IWineD3DStateBlockImpl *stateblock, =
WineD3DContext *context);=0A=
 void apply_pixelshader(DWORD state, IWineD3DStateBlockImpl *stateblock, =
WineD3DContext *context);=0A=
+void state_fogcolor(DWORD state, IWineD3DStateBlockImpl *stateblock, =
WineD3DContext *context);=0A=
+void state_fogdensity(DWORD state, IWineD3DStateBlockImpl *stateblock, =
WineD3DContext *context);=0A=
 =0A=
 void surface_force_reload(IWineD3DSurface *iface);=0A=
 GLenum surface_get_gl_buffer(IWineD3DSurface *iface, IWineD3DSwapChain =
*swapchain);=0A=
-- =0A=
1.6.0.6=0A=
=0A=

------=_NextPart_000_0005_01C97342.BFB2ED60--




More information about the wine-patches mailing list