[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