mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-03 02:03:32 +00:00
wined3d: Feed WINED3D_RS_TEXTUREFACTOR through a push constant buffer.
This commit is contained in:
parent
aeb68e5df4
commit
e4f8fb3d00
|
@ -1678,8 +1678,7 @@ static void validate_state_table(struct wined3d_state_entry *state_table)
|
||||||
{ 30, 33},
|
{ 30, 33},
|
||||||
{ 39, 40},
|
{ 39, 40},
|
||||||
{ 42, 47},
|
{ 42, 47},
|
||||||
{ 49, 59},
|
{ 49, 135},
|
||||||
{ 61, 135},
|
|
||||||
{138, 138},
|
{138, 138},
|
||||||
{144, 144},
|
{144, 144},
|
||||||
{149, 150},
|
{149, 150},
|
||||||
|
|
|
@ -1894,16 +1894,12 @@ static void shader_glsl_load_constants(struct shader_glsl_priv *priv,
|
||||||
if (update_mask & WINED3D_SHADER_CONST_FFP_PS)
|
if (update_mask & WINED3D_SHADER_CONST_FFP_PS)
|
||||||
{
|
{
|
||||||
const struct wined3d_ffp_ps_constants *constants;
|
const struct wined3d_ffp_ps_constants *constants;
|
||||||
struct wined3d_color color;
|
|
||||||
|
|
||||||
constants = wined3d_buffer_load_sysmem(
|
constants = wined3d_buffer_load_sysmem(
|
||||||
context_gl->c.device->push_constants[WINED3D_PUSH_CONSTANTS_PS_FFP], &context_gl->c);
|
context_gl->c.device->push_constants[WINED3D_PUSH_CONSTANTS_PS_FFP], &context_gl->c);
|
||||||
|
|
||||||
if (prog->ps.tex_factor_location != -1)
|
if (prog->ps.tex_factor_location != -1)
|
||||||
{
|
GL_EXTCALL(glUniform4fv(prog->ps.tex_factor_location, 1, &constants->texture_factor.r));
|
||||||
wined3d_color_from_d3dcolor(&color, state->render_states[WINED3D_RS_TEXTUREFACTOR]);
|
|
||||||
GL_EXTCALL(glUniform4fv(prog->ps.tex_factor_location, 1, &color.r));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (state->render_states[WINED3D_RS_SPECULARENABLE])
|
if (state->render_states[WINED3D_RS_SPECULARENABLE])
|
||||||
GL_EXTCALL(glUniform4f(prog->ps.specular_enable_location, 1.0f, 1.0f, 1.0f, 0.0f));
|
GL_EXTCALL(glUniform4f(prog->ps.specular_enable_location, 1.0f, 1.0f, 1.0f, 0.0f));
|
||||||
|
@ -12355,7 +12351,6 @@ static const struct wined3d_state_entry_template glsl_fragment_pipe_state_templa
|
||||||
{
|
{
|
||||||
{STATE_VDECL, {STATE_VDECL, glsl_fragment_pipe_vdecl }, WINED3D_GL_EXT_NONE },
|
{STATE_VDECL, {STATE_VDECL, glsl_fragment_pipe_vdecl }, WINED3D_GL_EXT_NONE },
|
||||||
{STATE_SHADER(WINED3D_SHADER_TYPE_VERTEX), {STATE_SHADER(WINED3D_SHADER_TYPE_VERTEX), glsl_fragment_pipe_vs }, WINED3D_GL_EXT_NONE },
|
{STATE_SHADER(WINED3D_SHADER_TYPE_VERTEX), {STATE_SHADER(WINED3D_SHADER_TYPE_VERTEX), glsl_fragment_pipe_vs }, WINED3D_GL_EXT_NONE },
|
||||||
{STATE_RENDER(WINED3D_RS_TEXTUREFACTOR), {STATE_RENDER(WINED3D_RS_TEXTUREFACTOR), glsl_fragment_pipe_invalidate_constants}, WINED3D_GL_EXT_NONE },
|
|
||||||
{STATE_TEXTURESTAGE(0, WINED3D_TSS_COLOR_OP), {STATE_SHADER(WINED3D_SHADER_TYPE_PIXEL), NULL }, WINED3D_GL_EXT_NONE },
|
{STATE_TEXTURESTAGE(0, WINED3D_TSS_COLOR_OP), {STATE_SHADER(WINED3D_SHADER_TYPE_PIXEL), NULL }, WINED3D_GL_EXT_NONE },
|
||||||
{STATE_TEXTURESTAGE(0, WINED3D_TSS_COLOR_ARG1), {STATE_SHADER(WINED3D_SHADER_TYPE_PIXEL), NULL }, WINED3D_GL_EXT_NONE },
|
{STATE_TEXTURESTAGE(0, WINED3D_TSS_COLOR_ARG1), {STATE_SHADER(WINED3D_SHADER_TYPE_PIXEL), NULL }, WINED3D_GL_EXT_NONE },
|
||||||
{STATE_TEXTURESTAGE(0, WINED3D_TSS_COLOR_ARG2), {STATE_SHADER(WINED3D_SHADER_TYPE_PIXEL), NULL }, WINED3D_GL_EXT_NONE },
|
{STATE_TEXTURESTAGE(0, WINED3D_TSS_COLOR_ARG2), {STATE_SHADER(WINED3D_SHADER_TYPE_PIXEL), NULL }, WINED3D_GL_EXT_NONE },
|
||||||
|
|
|
@ -1260,7 +1260,6 @@ static const struct wined3d_state_entry_template spirv_fragment_pipe_vk_fp_state
|
||||||
{STATE_RENDER(WINED3D_RS_FOGEND), {STATE_RENDER(WINED3D_RS_FOGEND), state_nop}},
|
{STATE_RENDER(WINED3D_RS_FOGEND), {STATE_RENDER(WINED3D_RS_FOGEND), state_nop}},
|
||||||
{STATE_RENDER(WINED3D_RS_FOGDENSITY), {STATE_RENDER(WINED3D_RS_FOGDENSITY), state_nop}},
|
{STATE_RENDER(WINED3D_RS_FOGDENSITY), {STATE_RENDER(WINED3D_RS_FOGDENSITY), state_nop}},
|
||||||
{STATE_RENDER(WINED3D_RS_COLORKEYENABLE), {STATE_RENDER(WINED3D_RS_COLORKEYENABLE), state_nop}},
|
{STATE_RENDER(WINED3D_RS_COLORKEYENABLE), {STATE_RENDER(WINED3D_RS_COLORKEYENABLE), state_nop}},
|
||||||
{STATE_RENDER(WINED3D_RS_TEXTUREFACTOR), {STATE_RENDER(WINED3D_RS_TEXTUREFACTOR), state_nop}},
|
|
||||||
{STATE_RENDER(WINED3D_RS_FOGVERTEXMODE), {STATE_RENDER(WINED3D_RS_FOGVERTEXMODE), state_nop}},
|
{STATE_RENDER(WINED3D_RS_FOGVERTEXMODE), {STATE_RENDER(WINED3D_RS_FOGVERTEXMODE), state_nop}},
|
||||||
{STATE_RENDER(WINED3D_RS_POINTSPRITEENABLE), {STATE_RENDER(WINED3D_RS_POINTSPRITEENABLE), state_nop}},
|
{STATE_RENDER(WINED3D_RS_POINTSPRITEENABLE), {STATE_RENDER(WINED3D_RS_POINTSPRITEENABLE), state_nop}},
|
||||||
{STATE_RENDER(WINED3D_RS_SRGBWRITEENABLE), {STATE_RENDER(WINED3D_RS_SRGBWRITEENABLE), state_nop}},
|
{STATE_RENDER(WINED3D_RS_SRGBWRITEENABLE), {STATE_RENDER(WINED3D_RS_SRGBWRITEENABLE), state_nop}},
|
||||||
|
|
|
@ -1532,12 +1532,23 @@ void CDECL wined3d_stateblock_set_render_state(struct wined3d_stateblock *stateb
|
||||||
stateblock->stateblock_state.rs[state] = value;
|
stateblock->stateblock_state.rs[state] = value;
|
||||||
stateblock->changed.renderState[state >> 5] |= 1u << (state & 0x1f);
|
stateblock->changed.renderState[state >> 5] |= 1u << (state & 0x1f);
|
||||||
|
|
||||||
if (state == WINED3D_RS_POINTSIZE
|
switch (state)
|
||||||
&& (value == WINED3D_ALPHA_TO_COVERAGE_ENABLE || value == WINED3D_ALPHA_TO_COVERAGE_DISABLE))
|
{
|
||||||
|
case WINED3D_RS_POINTSIZE:
|
||||||
|
if (value == WINED3D_ALPHA_TO_COVERAGE_ENABLE || value == WINED3D_ALPHA_TO_COVERAGE_DISABLE)
|
||||||
{
|
{
|
||||||
stateblock->changed.alpha_to_coverage = 1;
|
stateblock->changed.alpha_to_coverage = 1;
|
||||||
stateblock->stateblock_state.alpha_to_coverage = (value == WINED3D_ALPHA_TO_COVERAGE_ENABLE);
|
stateblock->stateblock_state.alpha_to_coverage = (value == WINED3D_ALPHA_TO_COVERAGE_ENABLE);
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WINED3D_RS_TEXTUREFACTOR:
|
||||||
|
stateblock->changed.ffp_ps_constants = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CDECL wined3d_stateblock_set_sampler_state(struct wined3d_stateblock *stateblock,
|
void CDECL wined3d_stateblock_set_sampler_state(struct wined3d_stateblock *stateblock,
|
||||||
|
@ -2805,6 +2816,7 @@ void CDECL wined3d_device_apply_stateblock(struct wined3d_device *device,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WINED3D_RS_ADAPTIVETESS_Y:
|
case WINED3D_RS_ADAPTIVETESS_Y:
|
||||||
|
case WINED3D_RS_TEXTUREFACTOR:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WINED3D_RS_ANTIALIAS:
|
case WINED3D_RS_ANTIALIAS:
|
||||||
|
@ -3312,6 +3324,8 @@ void CDECL wined3d_device_apply_stateblock(struct wined3d_device *device,
|
||||||
for (i = 0; i < WINED3D_MAX_FFP_TEXTURES; ++i)
|
for (i = 0; i < WINED3D_MAX_FFP_TEXTURES; ++i)
|
||||||
wined3d_color_from_d3dcolor(&constants.texture_constants[i], state->texture_states[i][WINED3D_TSS_CONSTANT]);
|
wined3d_color_from_d3dcolor(&constants.texture_constants[i], state->texture_states[i][WINED3D_TSS_CONSTANT]);
|
||||||
|
|
||||||
|
wined3d_color_from_d3dcolor(&constants.texture_factor, state->rs[WINED3D_RS_TEXTUREFACTOR]);
|
||||||
|
|
||||||
wined3d_device_context_push_constants(context, WINED3D_PUSH_CONSTANTS_PS_FFP,
|
wined3d_device_context_push_constants(context, WINED3D_PUSH_CONSTANTS_PS_FFP,
|
||||||
WINED3D_SHADER_CONST_FFP_PS, 0, sizeof(constants), &constants);
|
WINED3D_SHADER_CONST_FFP_PS, 0, sizeof(constants), &constants);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2770,6 +2770,7 @@ BOOL wined3d_get_app_name(char *app_name, unsigned int app_name_size);
|
||||||
struct wined3d_ffp_ps_constants
|
struct wined3d_ffp_ps_constants
|
||||||
{
|
{
|
||||||
struct wined3d_color texture_constants[WINED3D_MAX_FFP_TEXTURES];
|
struct wined3d_color texture_constants[WINED3D_MAX_FFP_TEXTURES];
|
||||||
|
struct wined3d_color texture_factor;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum wined3d_push_constants
|
enum wined3d_push_constants
|
||||||
|
|
Loading…
Reference in a new issue