Module: wine Branch: master Commit: e4f8fb3d003170c3c520367109a40eccff1a20ba URL: https://gitlab.winehq.org/wine/wine/-/commit/e4f8fb3d003170c3c520367109a40ec...
Author: Elizabeth Figura zfigura@codeweavers.com Date: Wed Nov 15 11:26:42 2023 -0600
wined3d: Feed WINED3D_RS_TEXTUREFACTOR through a push constant buffer.
---
dlls/wined3d/ffp_gl.c | 3 +-- dlls/wined3d/glsl_shader.c | 7 +------ dlls/wined3d/shader_spirv.c | 1 - dlls/wined3d/stateblock.c | 22 ++++++++++++++++++---- dlls/wined3d/wined3d_private.h | 1 + 5 files changed, 21 insertions(+), 13 deletions(-)
diff --git a/dlls/wined3d/ffp_gl.c b/dlls/wined3d/ffp_gl.c index b1a3c56a097..bab0f752df8 100644 --- a/dlls/wined3d/ffp_gl.c +++ b/dlls/wined3d/ffp_gl.c @@ -1678,8 +1678,7 @@ static void validate_state_table(struct wined3d_state_entry *state_table) { 30, 33}, { 39, 40}, { 42, 47}, - { 49, 59}, - { 61, 135}, + { 49, 135}, {138, 138}, {144, 144}, {149, 150}, diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c index 3f7199de87d..41e6949b7af 100644 --- a/dlls/wined3d/glsl_shader.c +++ b/dlls/wined3d/glsl_shader.c @@ -1894,16 +1894,12 @@ static void shader_glsl_load_constants(struct shader_glsl_priv *priv, if (update_mask & WINED3D_SHADER_CONST_FFP_PS) { const struct wined3d_ffp_ps_constants *constants; - struct wined3d_color color;
constants = wined3d_buffer_load_sysmem( context_gl->c.device->push_constants[WINED3D_PUSH_CONSTANTS_PS_FFP], &context_gl->c);
if (prog->ps.tex_factor_location != -1) - { - wined3d_color_from_d3dcolor(&color, state->render_states[WINED3D_RS_TEXTUREFACTOR]); - GL_EXTCALL(glUniform4fv(prog->ps.tex_factor_location, 1, &color.r)); - } + GL_EXTCALL(glUniform4fv(prog->ps.tex_factor_location, 1, &constants->texture_factor.r));
if (state->render_states[WINED3D_RS_SPECULARENABLE]) 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_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_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 }, diff --git a/dlls/wined3d/shader_spirv.c b/dlls/wined3d/shader_spirv.c index 110fdfeff39..b4ef9f61f43 100644 --- a/dlls/wined3d/shader_spirv.c +++ b/dlls/wined3d/shader_spirv.c @@ -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_FOGDENSITY), {STATE_RENDER(WINED3D_RS_FOGDENSITY), 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_POINTSPRITEENABLE), {STATE_RENDER(WINED3D_RS_POINTSPRITEENABLE), state_nop}}, {STATE_RENDER(WINED3D_RS_SRGBWRITEENABLE), {STATE_RENDER(WINED3D_RS_SRGBWRITEENABLE), state_nop}}, diff --git a/dlls/wined3d/stateblock.c b/dlls/wined3d/stateblock.c index 267da31ff19..28aa2a46f08 100644 --- a/dlls/wined3d/stateblock.c +++ b/dlls/wined3d/stateblock.c @@ -1532,11 +1532,22 @@ void CDECL wined3d_stateblock_set_render_state(struct wined3d_stateblock *stateb stateblock->stateblock_state.rs[state] = value; stateblock->changed.renderState[state >> 5] |= 1u << (state & 0x1f);
- if (state == WINED3D_RS_POINTSIZE - && (value == WINED3D_ALPHA_TO_COVERAGE_ENABLE || value == WINED3D_ALPHA_TO_COVERAGE_DISABLE)) + switch (state) { - stateblock->changed.alpha_to_coverage = 1; - stateblock->stateblock_state.alpha_to_coverage = (value == WINED3D_ALPHA_TO_COVERAGE_ENABLE); + case WINED3D_RS_POINTSIZE: + if (value == WINED3D_ALPHA_TO_COVERAGE_ENABLE || value == WINED3D_ALPHA_TO_COVERAGE_DISABLE) + { + stateblock->changed.alpha_to_coverage = 1; + 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; } }
@@ -2805,6 +2816,7 @@ void CDECL wined3d_device_apply_stateblock(struct wined3d_device *device, break;
case WINED3D_RS_ADAPTIVETESS_Y: + case WINED3D_RS_TEXTUREFACTOR: break;
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) 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_SHADER_CONST_FFP_PS, 0, sizeof(constants), &constants); } diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index f0e1d3ed615..46cc0ec30ce 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -2770,6 +2770,7 @@ BOOL wined3d_get_app_name(char *app_name, unsigned int app_name_size); struct wined3d_ffp_ps_constants { struct wined3d_color texture_constants[WINED3D_MAX_FFP_TEXTURES]; + struct wined3d_color texture_factor; };
enum wined3d_push_constants