wined3d: Factor our init_default_render_states().

Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Zebediah Figura 2019-01-28 23:09:14 -06:00 committed by Alexandre Julliard
parent c1f6c489c1
commit 05149fa2d5
1 changed files with 132 additions and 128 deletions

View File

@ -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,6 +1171,136 @@ static void state_init_default(struct wined3d_state *state, const struct wined3d
float f;
DWORD d;
} tmpfloat;
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;
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;
rs[WINED3D_RS_FOGSTART] = tmpfloat.d;
tmpfloat.f = 1.0f;
rs[WINED3D_RS_FOGEND] = tmpfloat.d;
tmpfloat.f = 1.0f;
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;
rs[WINED3D_RS_POINTSIZE] = tmpfloat.d;
tmpfloat.f = 1.0f;
rs[WINED3D_RS_POINTSIZE_MIN] = tmpfloat.d;
rs[WINED3D_RS_POINTSPRITEENABLE] = FALSE;
rs[WINED3D_RS_POINTSCALEENABLE] = FALSE;
tmpfloat.f = 1.0f;
rs[WINED3D_RS_POINTSCALE_A] = tmpfloat.d;
tmpfloat.f = 0.0f;
rs[WINED3D_RS_POINTSCALE_B] = tmpfloat.d;
tmpfloat.f = 0.0f;
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;
rs[WINED3D_RS_PATCHSEGMENTS] = tmpfloat.d;
rs[WINED3D_RS_DEBUGMONITORTOKEN] = 0xbaadcafe;
tmpfloat.f = d3d_info->limits.pointsize_max;
rs[WINED3D_RS_POINTSIZE_MAX] = tmpfloat.d;
rs[WINED3D_RS_INDEXEDVERTEXBLENDENABLE] = FALSE;
rs[WINED3D_RS_COLORWRITEENABLE] = 0x0000000f;
tmpfloat.f = 0.0f;
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 */
rs[WINED3D_RS_SCISSORTESTENABLE] = FALSE;
rs[WINED3D_RS_SLOPESCALEDEPTHBIAS] = 0;
tmpfloat.f = 1.0f;
rs[WINED3D_RS_MINTESSELLATIONLEVEL] = tmpfloat.d;
rs[WINED3D_RS_MAXTESSELLATIONLEVEL] = tmpfloat.d;
rs[WINED3D_RS_ANTIALIASEDLINEENABLE] = FALSE;
tmpfloat.f = 0.0f;
rs[WINED3D_RS_ADAPTIVETESS_X] = tmpfloat.d;
rs[WINED3D_RS_ADAPTIVETESS_Y] = tmpfloat.d;
tmpfloat.f = 1.0f;
rs[WINED3D_RS_ADAPTIVETESS_Z] = tmpfloat.d;
tmpfloat.f = 0.0f;
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;
@ -1188,133 +1318,7 @@ static void state_init_default(struct wined3d_state *state, const struct wined3d
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;
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;
tmpfloat.f = 0.0f;
state->render_states[WINED3D_RS_FOGSTART] = tmpfloat.d;
tmpfloat.f = 1.0f;
state->render_states[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;
tmpfloat.f = 1.0f;
state->render_states[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;
tmpfloat.f = 1.0f;
state->render_states[WINED3D_RS_POINTSCALE_A] = tmpfloat.d;
tmpfloat.f = 0.0f;
state->render_states[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;
tmpfloat.f = 1.0f;
state->render_states[WINED3D_RS_PATCHSEGMENTS] = tmpfloat.d;
state->render_states[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;
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;
/* states new in d3d9 */
state->render_states[WINED3D_RS_SCISSORTESTENABLE] = FALSE;
state->render_states[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;
tmpfloat.f = 0.0f;
state->render_states[WINED3D_RS_ADAPTIVETESS_X] = tmpfloat.d;
state->render_states[WINED3D_RS_ADAPTIVETESS_Y] = tmpfloat.d;
tmpfloat.f = 1.0f;
state->render_states[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;
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)