[PATCH v2 4/5] wined3d: Move the cull mode to wined3d_rasterizer_state.
Zebediah Figura
z.figura12 at gmail.com
Thu Mar 5 19:28:10 CST 2020
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
dlls/d3d11/device.c | 2 --
dlls/d3d11/state.c | 1 +
dlls/wined3d/context.c | 2 +-
dlls/wined3d/device.c | 2 ++
dlls/wined3d/state.c | 14 +++++++-------
include/wine/wined3d.h | 1 +
6 files changed, 12 insertions(+), 10 deletions(-)
diff --git a/dlls/d3d11/device.c b/dlls/d3d11/device.c
index 4c42fa284c..63d7f1dc2b 100644
--- a/dlls/d3d11/device.c
+++ b/dlls/d3d11/device.c
@@ -941,7 +941,6 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_RSSetState(ID3D11DeviceCon
if (!(rasterizer_state_impl = unsafe_impl_from_ID3D11RasterizerState(rasterizer_state)))
{
wined3d_device_set_rasterizer_state(device->wined3d_device, NULL);
- wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_CULLMODE, WINED3D_CULL_BACK);
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_SLOPESCALEDEPTHBIAS, 0);
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_DEPTHBIAS, 0);
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_SCISSORTESTENABLE, FALSE);
@@ -954,7 +953,6 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_RSSetState(ID3D11DeviceCon
wined3d_device_set_rasterizer_state(device->wined3d_device, rasterizer_state_impl->wined3d_state);
desc = &rasterizer_state_impl->desc;
- wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_CULLMODE, desc->CullMode);
scale_bias.f = desc->SlopeScaledDepthBias;
const_bias.f = desc->DepthBias;
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_SLOPESCALEDEPTHBIAS, scale_bias.d);
diff --git a/dlls/d3d11/state.c b/dlls/d3d11/state.c
index d63a1bc699..47d42fd6c5 100644
--- a/dlls/d3d11/state.c
+++ b/dlls/d3d11/state.c
@@ -1077,6 +1077,7 @@ static HRESULT d3d_rasterizer_state_init(struct d3d_rasterizer_state *state, str
}
wined3d_desc.fill_mode = desc->FillMode;
+ wined3d_desc.cull_mode = desc->CullMode;
wined3d_desc.front_ccw = desc->FrontCounterClockwise;
wined3d_desc.depth_clip = desc->DepthClipEnable;
wined3d_desc.depth_bias_clamp = desc->DepthBiasClamp;
diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c
index af2b00f88e..28e0d262a5 100644
--- a/dlls/wined3d/context.c
+++ b/dlls/wined3d/context.c
@@ -3150,7 +3150,7 @@ void wined3d_context_gl_apply_blit_state(struct wined3d_context_gl *context_gl,
gl_info->gl_ops.gl.p_glDisable(GL_BLEND);
context_invalidate_state(context, STATE_RENDER(WINED3D_RS_ALPHABLENDENABLE));
gl_info->gl_ops.gl.p_glDisable(GL_CULL_FACE);
- context_invalidate_state(context, STATE_RENDER(WINED3D_RS_CULLMODE));
+ context_invalidate_state(context, STATE_RASTERIZER);
gl_info->gl_ops.gl.p_glDisable(GL_STENCIL_TEST);
context_invalidate_state(context, STATE_RENDER(WINED3D_RS_STENCILENABLE));
gl_info->gl_ops.gl.p_glDisable(GL_SCISSOR_TEST);
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index 69ff7dd0cd..34482d8ea2 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -3599,6 +3599,7 @@ void CDECL wined3d_device_apply_stateblock(struct wined3d_device *device,
break;
case WINED3D_RS_FILLMODE:
+ case WINED3D_RS_CULLMODE:
set_rasterizer_state = TRUE;
break;
@@ -3616,6 +3617,7 @@ void CDECL wined3d_device_apply_stateblock(struct wined3d_device *device,
struct wine_rb_entry *entry;
desc.fill_mode = state->rs[WINED3D_RS_FILLMODE];
+ desc.cull_mode = state->rs[WINED3D_RS_CULLMODE];
desc.front_ccw = FALSE;
desc.depth_bias_clamp = 0.0f;
desc.depth_clip = TRUE;
diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c
index 388116bc66..5cf425f0a5 100644
--- a/dlls/wined3d/state.c
+++ b/dlls/wined3d/state.c
@@ -255,13 +255,13 @@ static void state_zenable(struct wined3d_context *context, const struct wined3d_
context_apply_state(context, state, STATE_TRANSFORM(WINED3D_TS_PROJECTION));
}
-static void state_cullmode(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id)
+static void cullmode(const struct wined3d_rasterizer_state *r, const struct wined3d_gl_info *gl_info)
{
- const struct wined3d_gl_info *gl_info = wined3d_context_gl(context)->gl_info;
+ enum wined3d_cull mode = r ? r->desc.cull_mode : WINED3D_CULL_BACK;
/* glFrontFace() is set in context.c at context init and on an
* offscreen / onscreen rendering switch. */
- switch (state->render_states[WINED3D_RS_CULLMODE])
+ switch (mode)
{
case WINED3D_CULL_NONE:
gl_info->gl_ops.gl.p_glDisable(GL_CULL_FACE);
@@ -280,8 +280,7 @@ static void state_cullmode(struct wined3d_context *context, const struct wined3d
checkGLcall("glCullFace(GL_BACK)");
break;
default:
- FIXME("Unrecognized cull mode %#x.\n",
- state->render_states[WINED3D_RS_CULLMODE]);
+ FIXME("Unrecognized cull mode %#x.\n", mode);
}
}
@@ -4335,6 +4334,7 @@ static void rasterizer(struct wined3d_context *context, const struct wined3d_sta
if (!isStateDirty(context, STATE_RENDER(WINED3D_RS_DEPTHBIAS)))
state_depthbias(context, state, STATE_RENDER(WINED3D_RS_DEPTHBIAS));
fillmode(r, gl_info);
+ cullmode(r, gl_info);
depth_clip(r, gl_info);
}
@@ -4351,6 +4351,7 @@ static void rasterizer_cc(struct wined3d_context *context, const struct wined3d_
if (!isStateDirty(context, STATE_RENDER(WINED3D_RS_DEPTHBIAS)))
state_depthbias(context, state, STATE_RENDER(WINED3D_RS_DEPTHBIAS));
fillmode(r, gl_info);
+ cullmode(r, gl_info);
depth_clip(r, gl_info);
}
@@ -4598,7 +4599,6 @@ const struct wined3d_state_entry_template misc_state_template[] =
{ STATE_RENDER(WINED3D_RS_PLANEMASK), { STATE_RENDER(WINED3D_RS_PLANEMASK), state_planemask }, WINED3D_GL_EXT_NONE },
{ STATE_RENDER(WINED3D_RS_ZWRITEENABLE), { STATE_RENDER(WINED3D_RS_ZWRITEENABLE), state_zwriteenable }, WINED3D_GL_EXT_NONE },
{ STATE_RENDER(WINED3D_RS_LASTPIXEL), { STATE_RENDER(WINED3D_RS_LASTPIXEL), state_lastpixel }, WINED3D_GL_EXT_NONE },
- { STATE_RENDER(WINED3D_RS_CULLMODE), { STATE_RENDER(WINED3D_RS_CULLMODE), state_cullmode }, WINED3D_GL_EXT_NONE },
{ STATE_RENDER(WINED3D_RS_ZFUNC), { STATE_RENDER(WINED3D_RS_ZFUNC), state_zfunc }, WINED3D_GL_EXT_NONE },
{ STATE_RENDER(WINED3D_RS_DITHERENABLE), { STATE_RENDER(WINED3D_RS_DITHERENABLE), state_ditherenable }, WINED3D_GL_EXT_NONE },
{ STATE_RENDER(WINED3D_RS_SUBPIXEL), { STATE_RENDER(WINED3D_RS_SUBPIXEL), state_subpixel }, WINED3D_GL_EXT_NONE },
@@ -5430,7 +5430,7 @@ static void validate_state_table(struct wined3d_state_entry *state_table)
{ 3, 3},
{ 8, 8},
{ 17, 18},
- { 21, 21},
+ { 21, 22},
{ 42, 45},
{ 47, 47},
{ 61, 127},
diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h
index 2370ca469f..bfdd1b9ca3 100644
--- a/include/wine/wined3d.h
+++ b/include/wine/wined3d.h
@@ -2034,6 +2034,7 @@ struct wined3d_blend_state_desc
struct wined3d_rasterizer_state_desc
{
enum wined3d_fill_mode fill_mode;
+ enum wined3d_cull cull_mode;
BOOL front_ccw;
float depth_bias_clamp;
BOOL depth_clip;
--
2.25.1
More information about the wine-devel
mailing list