[PATCH 4/5] wined3d: Factor our init_default_render_states().
Zebediah Figura
z.figura12 at gmail.com
Mon Jan 28 23:09:14 CST 2019
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
dlls/wined3d/stateblock.c | 256 +++++++++++++++++++-------------------
1 file changed, 130 insertions(+), 126 deletions(-)
diff --git a/dlls/wined3d/stateblock.c b/dlls/wined3d/stateblock.c
index a87e3ebbbf..80d02a3414 100644
--- a/dlls/wined3d/stateblock.c
+++ b/dlls/wined3d/stateblock.c
@@ -1159,7 +1159,7 @@ void CDECL wined3d_stateblock_apply(const struct wined3d_stateblock *stateblock)
TRACE("Applied stateblock %p.\n", stateblock);
}
-static void state_init_default(struct wined3d_state *state, const struct wined3d_d3d_info *d3d_info)
+static void init_default_render_states(DWORD rs[WINEHIGHEST_RENDER_STATE + 1], const struct wined3d_d3d_info *d3d_info)
{
union
{
@@ -1171,150 +1171,154 @@ static void state_init_default(struct wined3d_state *state, const struct wined3d
float f;
DWORD d;
} tmpfloat;
- unsigned int i;
- struct wined3d_matrix identity;
-
- TRACE("state %p, d3d_info %p.\n", state, d3d_info);
- get_identity_matrix(&identity);
- state->gl_primitive_type = ~0u;
- state->gl_patch_vertices = 0;
-
- /* Set some of the defaults for lights, transforms etc */
- state->transforms[WINED3D_TS_PROJECTION] = identity;
- state->transforms[WINED3D_TS_VIEW] = identity;
- for (i = 0; i < 256; ++i)
- {
- state->transforms[WINED3D_TS_WORLD_MATRIX(i)] = identity;
- }
-
- TRACE("Render states\n");
- /* Render states: */
- state->render_states[WINED3D_RS_ZENABLE] = WINED3D_ZB_TRUE;
- state->render_states[WINED3D_RS_FILLMODE] = WINED3D_FILL_SOLID;
- state->render_states[WINED3D_RS_SHADEMODE] = WINED3D_SHADE_GOURAUD;
+ rs[WINED3D_RS_ZENABLE] = WINED3D_ZB_TRUE;
+ rs[WINED3D_RS_FILLMODE] = WINED3D_FILL_SOLID;
+ rs[WINED3D_RS_SHADEMODE] = WINED3D_SHADE_GOURAUD;
lp.lp.repeat_factor = 0;
lp.lp.line_pattern = 0;
- state->render_states[WINED3D_RS_LINEPATTERN] = lp.d;
- state->render_states[WINED3D_RS_ZWRITEENABLE] = TRUE;
- state->render_states[WINED3D_RS_ALPHATESTENABLE] = FALSE;
- state->render_states[WINED3D_RS_LASTPIXEL] = TRUE;
- state->render_states[WINED3D_RS_SRCBLEND] = WINED3D_BLEND_ONE;
- state->render_states[WINED3D_RS_DESTBLEND] = WINED3D_BLEND_ZERO;
- state->render_states[WINED3D_RS_CULLMODE] = WINED3D_CULL_BACK;
- state->render_states[WINED3D_RS_ZFUNC] = WINED3D_CMP_LESSEQUAL;
- state->render_states[WINED3D_RS_ALPHAFUNC] = WINED3D_CMP_ALWAYS;
- state->render_states[WINED3D_RS_ALPHAREF] = 0;
- state->render_states[WINED3D_RS_DITHERENABLE] = FALSE;
- state->render_states[WINED3D_RS_ALPHABLENDENABLE] = FALSE;
- state->render_states[WINED3D_RS_FOGENABLE] = FALSE;
- state->render_states[WINED3D_RS_SPECULARENABLE] = FALSE;
- state->render_states[WINED3D_RS_ZVISIBLE] = 0;
- state->render_states[WINED3D_RS_FOGCOLOR] = 0;
- state->render_states[WINED3D_RS_FOGTABLEMODE] = WINED3D_FOG_NONE;
+ rs[WINED3D_RS_LINEPATTERN] = lp.d;
+ rs[WINED3D_RS_ZWRITEENABLE] = TRUE;
+ rs[WINED3D_RS_ALPHATESTENABLE] = FALSE;
+ rs[WINED3D_RS_LASTPIXEL] = TRUE;
+ rs[WINED3D_RS_SRCBLEND] = WINED3D_BLEND_ONE;
+ rs[WINED3D_RS_DESTBLEND] = WINED3D_BLEND_ZERO;
+ rs[WINED3D_RS_CULLMODE] = WINED3D_CULL_BACK;
+ rs[WINED3D_RS_ZFUNC] = WINED3D_CMP_LESSEQUAL;
+ rs[WINED3D_RS_ALPHAFUNC] = WINED3D_CMP_ALWAYS;
+ rs[WINED3D_RS_ALPHAREF] = 0;
+ rs[WINED3D_RS_DITHERENABLE] = FALSE;
+ rs[WINED3D_RS_ALPHABLENDENABLE] = FALSE;
+ rs[WINED3D_RS_FOGENABLE] = FALSE;
+ rs[WINED3D_RS_SPECULARENABLE] = FALSE;
+ rs[WINED3D_RS_ZVISIBLE] = 0;
+ rs[WINED3D_RS_FOGCOLOR] = 0;
+ rs[WINED3D_RS_FOGTABLEMODE] = WINED3D_FOG_NONE;
tmpfloat.f = 0.0f;
- state->render_states[WINED3D_RS_FOGSTART] = tmpfloat.d;
+ rs[WINED3D_RS_FOGSTART] = tmpfloat.d;
tmpfloat.f = 1.0f;
- state->render_states[WINED3D_RS_FOGEND] = tmpfloat.d;
+ rs[WINED3D_RS_FOGEND] = tmpfloat.d;
tmpfloat.f = 1.0f;
- state->render_states[WINED3D_RS_FOGDENSITY] = tmpfloat.d;
- state->render_states[WINED3D_RS_EDGEANTIALIAS] = FALSE;
- state->render_states[WINED3D_RS_RANGEFOGENABLE] = FALSE;
- state->render_states[WINED3D_RS_STENCILENABLE] = FALSE;
- state->render_states[WINED3D_RS_STENCILFAIL] = WINED3D_STENCIL_OP_KEEP;
- state->render_states[WINED3D_RS_STENCILZFAIL] = WINED3D_STENCIL_OP_KEEP;
- state->render_states[WINED3D_RS_STENCILPASS] = WINED3D_STENCIL_OP_KEEP;
- state->render_states[WINED3D_RS_STENCILREF] = 0;
- state->render_states[WINED3D_RS_STENCILMASK] = 0xffffffff;
- state->render_states[WINED3D_RS_STENCILFUNC] = WINED3D_CMP_ALWAYS;
- state->render_states[WINED3D_RS_STENCILWRITEMASK] = 0xffffffff;
- state->render_states[WINED3D_RS_TEXTUREFACTOR] = 0xffffffff;
- state->render_states[WINED3D_RS_WRAP0] = 0;
- state->render_states[WINED3D_RS_WRAP1] = 0;
- state->render_states[WINED3D_RS_WRAP2] = 0;
- state->render_states[WINED3D_RS_WRAP3] = 0;
- state->render_states[WINED3D_RS_WRAP4] = 0;
- state->render_states[WINED3D_RS_WRAP5] = 0;
- state->render_states[WINED3D_RS_WRAP6] = 0;
- state->render_states[WINED3D_RS_WRAP7] = 0;
- state->render_states[WINED3D_RS_CLIPPING] = TRUE;
- state->render_states[WINED3D_RS_LIGHTING] = TRUE;
- state->render_states[WINED3D_RS_AMBIENT] = 0;
- state->render_states[WINED3D_RS_FOGVERTEXMODE] = WINED3D_FOG_NONE;
- state->render_states[WINED3D_RS_COLORVERTEX] = TRUE;
- state->render_states[WINED3D_RS_LOCALVIEWER] = TRUE;
- state->render_states[WINED3D_RS_NORMALIZENORMALS] = FALSE;
- state->render_states[WINED3D_RS_DIFFUSEMATERIALSOURCE] = WINED3D_MCS_COLOR1;
- state->render_states[WINED3D_RS_SPECULARMATERIALSOURCE] = WINED3D_MCS_COLOR2;
- state->render_states[WINED3D_RS_AMBIENTMATERIALSOURCE] = WINED3D_MCS_MATERIAL;
- state->render_states[WINED3D_RS_EMISSIVEMATERIALSOURCE] = WINED3D_MCS_MATERIAL;
- state->render_states[WINED3D_RS_VERTEXBLEND] = WINED3D_VBF_DISABLE;
- state->render_states[WINED3D_RS_CLIPPLANEENABLE] = 0;
- state->render_states[WINED3D_RS_SOFTWAREVERTEXPROCESSING] = FALSE;
+ rs[WINED3D_RS_FOGDENSITY] = tmpfloat.d;
+ rs[WINED3D_RS_EDGEANTIALIAS] = FALSE;
+ rs[WINED3D_RS_RANGEFOGENABLE] = FALSE;
+ rs[WINED3D_RS_STENCILENABLE] = FALSE;
+ rs[WINED3D_RS_STENCILFAIL] = WINED3D_STENCIL_OP_KEEP;
+ rs[WINED3D_RS_STENCILZFAIL] = WINED3D_STENCIL_OP_KEEP;
+ rs[WINED3D_RS_STENCILPASS] = WINED3D_STENCIL_OP_KEEP;
+ rs[WINED3D_RS_STENCILREF] = 0;
+ rs[WINED3D_RS_STENCILMASK] = 0xffffffff;
+ rs[WINED3D_RS_STENCILFUNC] = WINED3D_CMP_ALWAYS;
+ rs[WINED3D_RS_STENCILWRITEMASK] = 0xffffffff;
+ rs[WINED3D_RS_TEXTUREFACTOR] = 0xffffffff;
+ rs[WINED3D_RS_WRAP0] = 0;
+ rs[WINED3D_RS_WRAP1] = 0;
+ rs[WINED3D_RS_WRAP2] = 0;
+ rs[WINED3D_RS_WRAP3] = 0;
+ rs[WINED3D_RS_WRAP4] = 0;
+ rs[WINED3D_RS_WRAP5] = 0;
+ rs[WINED3D_RS_WRAP6] = 0;
+ rs[WINED3D_RS_WRAP7] = 0;
+ rs[WINED3D_RS_CLIPPING] = TRUE;
+ rs[WINED3D_RS_LIGHTING] = TRUE;
+ rs[WINED3D_RS_AMBIENT] = 0;
+ rs[WINED3D_RS_FOGVERTEXMODE] = WINED3D_FOG_NONE;
+ rs[WINED3D_RS_COLORVERTEX] = TRUE;
+ rs[WINED3D_RS_LOCALVIEWER] = TRUE;
+ rs[WINED3D_RS_NORMALIZENORMALS] = FALSE;
+ rs[WINED3D_RS_DIFFUSEMATERIALSOURCE] = WINED3D_MCS_COLOR1;
+ rs[WINED3D_RS_SPECULARMATERIALSOURCE] = WINED3D_MCS_COLOR2;
+ rs[WINED3D_RS_AMBIENTMATERIALSOURCE] = WINED3D_MCS_MATERIAL;
+ rs[WINED3D_RS_EMISSIVEMATERIALSOURCE] = WINED3D_MCS_MATERIAL;
+ rs[WINED3D_RS_VERTEXBLEND] = WINED3D_VBF_DISABLE;
+ rs[WINED3D_RS_CLIPPLANEENABLE] = 0;
+ rs[WINED3D_RS_SOFTWAREVERTEXPROCESSING] = FALSE;
tmpfloat.f = 1.0f;
- state->render_states[WINED3D_RS_POINTSIZE] = tmpfloat.d;
+ rs[WINED3D_RS_POINTSIZE] = tmpfloat.d;
tmpfloat.f = 1.0f;
- state->render_states[WINED3D_RS_POINTSIZE_MIN] = tmpfloat.d;
- state->render_states[WINED3D_RS_POINTSPRITEENABLE] = FALSE;
- state->render_states[WINED3D_RS_POINTSCALEENABLE] = FALSE;
+ rs[WINED3D_RS_POINTSIZE_MIN] = tmpfloat.d;
+ rs[WINED3D_RS_POINTSPRITEENABLE] = FALSE;
+ rs[WINED3D_RS_POINTSCALEENABLE] = FALSE;
tmpfloat.f = 1.0f;
- state->render_states[WINED3D_RS_POINTSCALE_A] = tmpfloat.d;
+ rs[WINED3D_RS_POINTSCALE_A] = tmpfloat.d;
tmpfloat.f = 0.0f;
- state->render_states[WINED3D_RS_POINTSCALE_B] = tmpfloat.d;
+ rs[WINED3D_RS_POINTSCALE_B] = tmpfloat.d;
tmpfloat.f = 0.0f;
- state->render_states[WINED3D_RS_POINTSCALE_C] = tmpfloat.d;
- state->render_states[WINED3D_RS_MULTISAMPLEANTIALIAS] = TRUE;
- state->render_states[WINED3D_RS_MULTISAMPLEMASK] = 0xffffffff;
- state->render_states[WINED3D_RS_PATCHEDGESTYLE] = WINED3D_PATCH_EDGE_DISCRETE;
+ rs[WINED3D_RS_POINTSCALE_C] = tmpfloat.d;
+ rs[WINED3D_RS_MULTISAMPLEANTIALIAS] = TRUE;
+ rs[WINED3D_RS_MULTISAMPLEMASK] = 0xffffffff;
+ rs[WINED3D_RS_PATCHEDGESTYLE] = WINED3D_PATCH_EDGE_DISCRETE;
tmpfloat.f = 1.0f;
- state->render_states[WINED3D_RS_PATCHSEGMENTS] = tmpfloat.d;
- state->render_states[WINED3D_RS_DEBUGMONITORTOKEN] = 0xbaadcafe;
+ rs[WINED3D_RS_PATCHSEGMENTS] = tmpfloat.d;
+ rs[WINED3D_RS_DEBUGMONITORTOKEN] = 0xbaadcafe;
tmpfloat.f = d3d_info->limits.pointsize_max;
- state->render_states[WINED3D_RS_POINTSIZE_MAX] = tmpfloat.d;
- state->render_states[WINED3D_RS_INDEXEDVERTEXBLENDENABLE] = FALSE;
- state->render_states[WINED3D_RS_COLORWRITEENABLE] = 0x0000000f;
+ rs[WINED3D_RS_POINTSIZE_MAX] = tmpfloat.d;
+ rs[WINED3D_RS_INDEXEDVERTEXBLENDENABLE] = FALSE;
+ rs[WINED3D_RS_COLORWRITEENABLE] = 0x0000000f;
tmpfloat.f = 0.0f;
- state->render_states[WINED3D_RS_TWEENFACTOR] = tmpfloat.d;
- state->render_states[WINED3D_RS_BLENDOP] = WINED3D_BLEND_OP_ADD;
- state->render_states[WINED3D_RS_POSITIONDEGREE] = WINED3D_DEGREE_CUBIC;
- state->render_states[WINED3D_RS_NORMALDEGREE] = WINED3D_DEGREE_LINEAR;
+ rs[WINED3D_RS_TWEENFACTOR] = tmpfloat.d;
+ rs[WINED3D_RS_BLENDOP] = WINED3D_BLEND_OP_ADD;
+ rs[WINED3D_RS_POSITIONDEGREE] = WINED3D_DEGREE_CUBIC;
+ rs[WINED3D_RS_NORMALDEGREE] = WINED3D_DEGREE_LINEAR;
/* states new in d3d9 */
- state->render_states[WINED3D_RS_SCISSORTESTENABLE] = FALSE;
- state->render_states[WINED3D_RS_SLOPESCALEDEPTHBIAS] = 0;
+ rs[WINED3D_RS_SCISSORTESTENABLE] = FALSE;
+ rs[WINED3D_RS_SLOPESCALEDEPTHBIAS] = 0;
tmpfloat.f = 1.0f;
- state->render_states[WINED3D_RS_MINTESSELLATIONLEVEL] = tmpfloat.d;
- state->render_states[WINED3D_RS_MAXTESSELLATIONLEVEL] = tmpfloat.d;
- state->render_states[WINED3D_RS_ANTIALIASEDLINEENABLE] = FALSE;
+ rs[WINED3D_RS_MINTESSELLATIONLEVEL] = tmpfloat.d;
+ rs[WINED3D_RS_MAXTESSELLATIONLEVEL] = tmpfloat.d;
+ rs[WINED3D_RS_ANTIALIASEDLINEENABLE] = FALSE;
tmpfloat.f = 0.0f;
- state->render_states[WINED3D_RS_ADAPTIVETESS_X] = tmpfloat.d;
- state->render_states[WINED3D_RS_ADAPTIVETESS_Y] = tmpfloat.d;
+ rs[WINED3D_RS_ADAPTIVETESS_X] = tmpfloat.d;
+ rs[WINED3D_RS_ADAPTIVETESS_Y] = tmpfloat.d;
tmpfloat.f = 1.0f;
- state->render_states[WINED3D_RS_ADAPTIVETESS_Z] = tmpfloat.d;
+ rs[WINED3D_RS_ADAPTIVETESS_Z] = tmpfloat.d;
tmpfloat.f = 0.0f;
- state->render_states[WINED3D_RS_ADAPTIVETESS_W] = tmpfloat.d;
- state->render_states[WINED3D_RS_ENABLEADAPTIVETESSELLATION] = FALSE;
- state->render_states[WINED3D_RS_TWOSIDEDSTENCILMODE] = FALSE;
- state->render_states[WINED3D_RS_BACK_STENCILFAIL] = WINED3D_STENCIL_OP_KEEP;
- state->render_states[WINED3D_RS_BACK_STENCILZFAIL] = WINED3D_STENCIL_OP_KEEP;
- state->render_states[WINED3D_RS_BACK_STENCILPASS] = WINED3D_STENCIL_OP_KEEP;
- state->render_states[WINED3D_RS_BACK_STENCILFUNC] = WINED3D_CMP_ALWAYS;
- state->render_states[WINED3D_RS_COLORWRITEENABLE1] = 0x0000000f;
- state->render_states[WINED3D_RS_COLORWRITEENABLE2] = 0x0000000f;
- state->render_states[WINED3D_RS_COLORWRITEENABLE3] = 0x0000000f;
- state->render_states[WINED3D_RS_SRGBWRITEENABLE] = 0;
- state->render_states[WINED3D_RS_DEPTHBIAS] = 0;
- state->render_states[WINED3D_RS_WRAP8] = 0;
- state->render_states[WINED3D_RS_WRAP9] = 0;
- state->render_states[WINED3D_RS_WRAP10] = 0;
- state->render_states[WINED3D_RS_WRAP11] = 0;
- state->render_states[WINED3D_RS_WRAP12] = 0;
- state->render_states[WINED3D_RS_WRAP13] = 0;
- state->render_states[WINED3D_RS_WRAP14] = 0;
- state->render_states[WINED3D_RS_WRAP15] = 0;
- state->render_states[WINED3D_RS_SEPARATEALPHABLENDENABLE] = FALSE;
- state->render_states[WINED3D_RS_SRCBLENDALPHA] = WINED3D_BLEND_ONE;
- state->render_states[WINED3D_RS_DESTBLENDALPHA] = WINED3D_BLEND_ZERO;
- state->render_states[WINED3D_RS_BLENDOPALPHA] = WINED3D_BLEND_OP_ADD;
+ rs[WINED3D_RS_ADAPTIVETESS_W] = tmpfloat.d;
+ rs[WINED3D_RS_ENABLEADAPTIVETESSELLATION] = FALSE;
+ rs[WINED3D_RS_TWOSIDEDSTENCILMODE] = FALSE;
+ rs[WINED3D_RS_BACK_STENCILFAIL] = WINED3D_STENCIL_OP_KEEP;
+ rs[WINED3D_RS_BACK_STENCILZFAIL] = WINED3D_STENCIL_OP_KEEP;
+ rs[WINED3D_RS_BACK_STENCILPASS] = WINED3D_STENCIL_OP_KEEP;
+ rs[WINED3D_RS_BACK_STENCILFUNC] = WINED3D_CMP_ALWAYS;
+ rs[WINED3D_RS_COLORWRITEENABLE1] = 0x0000000f;
+ rs[WINED3D_RS_COLORWRITEENABLE2] = 0x0000000f;
+ rs[WINED3D_RS_COLORWRITEENABLE3] = 0x0000000f;
+ rs[WINED3D_RS_SRGBWRITEENABLE] = 0;
+ rs[WINED3D_RS_DEPTHBIAS] = 0;
+ rs[WINED3D_RS_WRAP8] = 0;
+ rs[WINED3D_RS_WRAP9] = 0;
+ rs[WINED3D_RS_WRAP10] = 0;
+ rs[WINED3D_RS_WRAP11] = 0;
+ rs[WINED3D_RS_WRAP12] = 0;
+ rs[WINED3D_RS_WRAP13] = 0;
+ rs[WINED3D_RS_WRAP14] = 0;
+ rs[WINED3D_RS_WRAP15] = 0;
+ rs[WINED3D_RS_SEPARATEALPHABLENDENABLE] = FALSE;
+ rs[WINED3D_RS_SRCBLENDALPHA] = WINED3D_BLEND_ONE;
+ rs[WINED3D_RS_DESTBLENDALPHA] = WINED3D_BLEND_ZERO;
+ rs[WINED3D_RS_BLENDOPALPHA] = WINED3D_BLEND_OP_ADD;
+}
+
+static void state_init_default(struct wined3d_state *state, const struct wined3d_d3d_info *d3d_info)
+{
+ unsigned int i;
+ struct wined3d_matrix identity;
+
+ TRACE("state %p, d3d_info %p.\n", state, d3d_info);
+
+ get_identity_matrix(&identity);
+ state->gl_primitive_type = ~0u;
+ state->gl_patch_vertices = 0;
+
+ /* Set some of the defaults for lights, transforms etc */
+ state->transforms[WINED3D_TS_PROJECTION] = identity;
+ state->transforms[WINED3D_TS_VIEW] = identity;
+ for (i = 0; i < 256; ++i)
+ {
+ state->transforms[WINED3D_TS_WORLD_MATRIX(i)] = identity;
+ }
+
+ init_default_render_states(state->render_states, d3d_info);
/* Texture Stage States - Put directly into state block, we will call function below */
for (i = 0; i < MAX_TEXTURES; ++i)
--
2.20.1
More information about the wine-devel
mailing list