From: Elizabeth Figura zfigura@codeweavers.com
--- dlls/wined3d/cs.c | 2 +- dlls/wined3d/ffp_gl.c | 3 +-- dlls/wined3d/glsl_shader.c | 7 ------- dlls/wined3d/shader.c | 2 +- dlls/wined3d/stateblock.c | 3 +++ dlls/wined3d/utils.c | 4 ++-- dlls/wined3d/wined3d_private.h | 1 + 7 files changed, 9 insertions(+), 13 deletions(-)
diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c index ee0f926e870..24852762a6a 100644 --- a/dlls/wined3d/cs.c +++ b/dlls/wined3d/cs.c @@ -1950,7 +1950,7 @@ static void wined3d_cs_exec_set_transform(struct wined3d_cs *cs, const void *dat /* Fog behaviour depends on the projection matrix. */ if (op->state == WINED3D_TS_PROJECTION && cs->state.render_states[WINED3D_RS_FOGENABLE] - && cs->state.render_states[WINED3D_RS_FOGTABLEMODE] != WINED3D_FOG_NONE) + && cs->state.extra_vs_args.pixel_fog) device_invalidate_state(cs->c.device, STATE_SHADER(WINED3D_SHADER_TYPE_VERTEX)); }
diff --git a/dlls/wined3d/ffp_gl.c b/dlls/wined3d/ffp_gl.c index 01146ef51fb..f6c1b96baf4 100644 --- a/dlls/wined3d/ffp_gl.c +++ b/dlls/wined3d/ffp_gl.c @@ -1530,8 +1530,7 @@ static void validate_state_table(struct wined3d_state_entry *state_table) { 1, 8}, { 11, 25}, { 27, 27}, - { 30, 34}, - { 36, 40}, + { 30, 40}, { 42, 47}, { 49, 136}, {138, 139}, diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c index 24a3b91bb45..247f08f887c 100644 --- a/dlls/wined3d/glsl_shader.c +++ b/dlls/wined3d/glsl_shader.c @@ -11809,12 +11809,6 @@ static void glsl_vertex_pipe_vp_free(struct wined3d_device *device, struct wined static void glsl_vertex_pipe_nop(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) {}
-static void glsl_vertex_pipe_shader(struct wined3d_context *context, - const struct wined3d_state *state, DWORD state_id) -{ - context->shader_update_mask |= 1u << WINED3D_SHADER_TYPE_VERTEX; -} - static void glsl_vertex_pipe_vdecl(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) { @@ -11925,7 +11919,6 @@ static const struct wined3d_state_entry_template glsl_vertex_pipe_vp_states[] = {STATE_RENDER(WINED3D_RS_DIFFUSEMATERIALSOURCE), {STATE_RENDER(WINED3D_RS_FOGENABLE), NULL }, WINED3D_GL_EXT_NONE }, {STATE_RENDER(WINED3D_RS_EMISSIVEMATERIALSOURCE), {STATE_RENDER(WINED3D_RS_FOGENABLE), NULL }, WINED3D_GL_EXT_NONE }, {STATE_RENDER(WINED3D_RS_FOGENABLE), {STATE_RENDER(WINED3D_RS_FOGENABLE), state_nop }, WINED3D_GL_EXT_NONE }, - {STATE_RENDER(WINED3D_RS_FOGTABLEMODE), {STATE_RENDER(WINED3D_RS_FOGTABLEMODE), glsl_vertex_pipe_shader}, WINED3D_GL_EXT_NONE }, {STATE_RENDER(WINED3D_RS_FOGVERTEXMODE), {STATE_RENDER(WINED3D_RS_FOGENABLE), NULL }, WINED3D_GL_EXT_NONE }, {STATE_RENDER(WINED3D_RS_LIGHTING), {STATE_RENDER(WINED3D_RS_FOGENABLE), NULL }, WINED3D_GL_EXT_NONE }, {STATE_RENDER(WINED3D_RS_LOCALVIEWER), {STATE_RENDER(WINED3D_RS_FOGENABLE), NULL }, WINED3D_GL_EXT_NONE }, diff --git a/dlls/wined3d/shader.c b/dlls/wined3d/shader.c index f2e40d1b055..1236a7f6229 100644 --- a/dlls/wined3d/shader.c +++ b/dlls/wined3d/shader.c @@ -2695,7 +2695,7 @@ void find_vs_compile_args(const struct wined3d_state *state, const struct wined3 const struct wined3d_d3d_info *d3d_info = context->d3d_info; WORD swizzle_map = context->stream_info.swizzle_map;
- if (state->render_states[WINED3D_RS_FOGTABLEMODE] != WINED3D_FOG_NONE) + if (state->extra_vs_args.pixel_fog) { if (state->transforms[WINED3D_TS_PROJECTION]._14 == 0.0f && state->transforms[WINED3D_TS_PROJECTION]._24 == 0.0f diff --git a/dlls/wined3d/stateblock.c b/dlls/wined3d/stateblock.c index 87ea93f4850..bf5c3a887e3 100644 --- a/dlls/wined3d/stateblock.c +++ b/dlls/wined3d/stateblock.c @@ -1731,6 +1731,7 @@ void CDECL wined3d_stateblock_set_render_state(struct wined3d_stateblock *stateb case WINED3D_RS_FOGTABLEMODE: stateblock->changed.ffp_vs_settings = 1; stateblock->changed.fog_constants = 1; + stateblock->changed.extra_vs_args = 1; stateblock->changed.extra_ps_args = 1; break;
@@ -3231,6 +3232,7 @@ void CDECL wined3d_device_apply_stateblock(struct wined3d_device *device, case WINED3D_RS_SRGBWRITEENABLE: case WINED3D_RS_CLIPPING: case WINED3D_RS_CLIPPLANEENABLE: + case WINED3D_RS_FOGTABLEMODE: break;
case WINED3D_RS_ANTIALIAS: @@ -3980,6 +3982,7 @@ void CDECL wined3d_device_apply_stateblock(struct wined3d_device *device, struct wined3d_extra_vs_args args;
args.clip_planes = state->rs[WINED3D_RS_CLIPPING] ? state->rs[WINED3D_RS_CLIPPLANEENABLE] : 0; + args.pixel_fog = (state->rs[WINED3D_RS_FOGTABLEMODE] != WINED3D_FOG_NONE); wined3d_device_context_emit_set_extra_vs_args(context, &args); }
diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c index 67a99939e1c..e8a0a3c58ec 100644 --- a/dlls/wined3d/utils.c +++ b/dlls/wined3d/utils.c @@ -6503,7 +6503,7 @@ void wined3d_ffp_get_vs_settings(const struct wined3d_state *state, const struct settings->diffuse = vdecl->diffuse; if (!state->render_states[WINED3D_RS_FOGENABLE]) settings->fog_mode = WINED3D_FFP_VS_FOG_OFF; - else if (state->render_states[WINED3D_RS_FOGTABLEMODE] != WINED3D_FOG_NONE) + else if (state->extra_vs_args.pixel_fog) settings->fog_mode = WINED3D_FFP_VS_FOG_DEPTH; else settings->fog_mode = WINED3D_FFP_VS_FOG_FOGCOORD; @@ -6595,7 +6595,7 @@ void wined3d_ffp_get_vs_settings(const struct wined3d_state *state, const struct
if (!state->render_states[WINED3D_RS_FOGENABLE]) settings->fog_mode = WINED3D_FFP_VS_FOG_OFF; - else if (state->render_states[WINED3D_RS_FOGTABLEMODE] != WINED3D_FOG_NONE) + else if (state->extra_vs_args.pixel_fog) { settings->fog_mode = WINED3D_FFP_VS_FOG_DEPTH;
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 71e3ac7a24d..bc2076cc46b 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -2877,6 +2877,7 @@ enum wined3d_push_constants struct wined3d_extra_vs_args { uint8_t clip_planes; + bool pixel_fog; };
struct wined3d_extra_ps_args