From: Elizabeth Figura zfigura@codeweavers.com
--- dlls/d3d9/tests/visual.c | 1 - dlls/wined3d/ffp_hlsl.c | 36 ++++--------------------------- dlls/wined3d/glsl_shader.c | 39 +++++----------------------------- dlls/wined3d/utils.c | 19 +++-------------- dlls/wined3d/wined3d_private.h | 14 ++---------- 5 files changed, 14 insertions(+), 95 deletions(-)
diff --git a/dlls/d3d9/tests/visual.c b/dlls/d3d9/tests/visual.c index 8a35c4b379a..edadc7016d4 100644 --- a/dlls/d3d9/tests/visual.c +++ b/dlls/d3d9/tests/visual.c @@ -28826,7 +28826,6 @@ static void test_texture_transform_flags(void) colour = get_readback_vec4(&rb, 0, 0); /* We use point filtering, but we might have sampled the * neighbouring texel. */ -todo_wine_if ((vs_mode == VS_MODE_VS && ps_mode == PS_MODE_FFP && flags == (D3DTTFF_PROJECTED | D3DTTFF_COUNT3))) ok(fabsf(colour->x - expect[0]) <= 0.006f && fabsf(colour->y - expect[1]) <= 0.006f && colour->z == expect[2] && colour->w == expect[3], "Expected colour {%.8e, %.8e, %.8e, %.8e}; got {%.8e, %.8e, %.8e, %.8e}.\n", diff --git a/dlls/wined3d/ffp_hlsl.c b/dlls/wined3d/ffp_hlsl.c index a0d848a9c8f..dd03eeea793 100644 --- a/dlls/wined3d/ffp_hlsl.c +++ b/dlls/wined3d/ffp_hlsl.c @@ -740,26 +740,11 @@ static bool ffp_hlsl_generate_pixel_shader(const struct ffp_frag_settings *setti for (i = 0; i < WINED3D_MAX_FFP_TEXTURES && settings->op[i].cop != WINED3D_TOP_DISABLE; ++i) { const char *texture_function, *coord_mask; - bool proj; + bool proj = settings->op[i].projected;
if (!(tex_map & (1u << i))) continue;
- if (settings->op[i].projected == WINED3D_PROJECTION_NONE) - { - proj = false; - } - else if (settings->op[i].projected == WINED3D_PROJECTION_COUNT4 - || settings->op[i].projected == WINED3D_PROJECTION_COUNT3) - { - proj = true; - } - else - { - FIXME("Unexpected projection mode %d.\n", settings->op[i].projected); - proj = true; - } - switch (settings->op[i].tex_type) { case WINED3D_GL_RES_TYPE_TEX_1D: @@ -798,18 +783,10 @@ static bool ffp_hlsl_generate_pixel_shader(const struct ffp_frag_settings *setti /* With projective textures, texbem only divides the static texture * coordinate, not the displacement, so multiply the displacement * with the dividing parameter before sampling. */ - if (settings->op[i].projected != WINED3D_PROJECTION_NONE) + if (settings->op[i].projected) { - if (settings->op[i].projected == WINED3D_PROJECTION_COUNT4) - { - shader_addline(buffer, "ret.xy = (ret.xy * texcoord[%u].w) + texcoord[%u].xy;\n", i, i); - shader_addline(buffer, "ret.zw = texcoord[%u].ww;\n", i); - } - else - { - shader_addline(buffer, "ret.xy = (ret.xy * texcoord[%u].z) + texcoord[%u].xy;\n", i, i); - shader_addline(buffer, "ret.zw = texcoord[%u].zz;\n", i); - } + shader_addline(buffer, "ret.xy = (ret.xy * texcoord[%u].w) + texcoord[%u].xy;\n", i, i); + shader_addline(buffer, "ret.zw = texcoord[%u].ww;\n", i); } else { @@ -825,11 +802,6 @@ static bool ffp_hlsl_generate_pixel_shader(const struct ffp_frag_settings *setti i, i - 1, (i - 1) / 4, (i - 1) % 4, (i - 1) / 4, (i - 1) % 4); } } - else if (settings->op[i].projected == WINED3D_PROJECTION_COUNT3) - { - shader_addline(buffer, " tex%u = %s%s(ps_sampler%u, texcoord[%u].xyzz);\n", - i, texture_function, proj ? "proj" : "", i, i); - } else { shader_addline(buffer, " tex%u = %s%s(ps_sampler%u, texcoord[%u].%s);\n", diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c index 193badacfb0..97cdfa9f532 100644 --- a/dlls/wined3d/glsl_shader.c +++ b/dlls/wined3d/glsl_shader.c @@ -9867,26 +9867,11 @@ static GLuint shader_glsl_generate_ffp_fragment_shader(struct shader_glsl_priv * for (stage = 0; stage < WINED3D_MAX_FFP_TEXTURES && settings->op[stage].cop != WINED3D_TOP_DISABLE; ++stage) { const char *texture_function, *coord_mask; - BOOL proj; + BOOL proj = settings->op[stage].projected;
if (!(tex_map & (1u << stage))) continue;
- if (settings->op[stage].projected == WINED3D_PROJECTION_NONE) - { - proj = FALSE; - } - else if (settings->op[stage].projected == WINED3D_PROJECTION_COUNT4 - || settings->op[stage].projected == WINED3D_PROJECTION_COUNT3) - { - proj = TRUE; - } - else - { - FIXME("Unexpected projection mode %d\n", settings->op[stage].projected); - proj = TRUE; - } - if (settings->op[stage].tex_type == WINED3D_GL_RES_TYPE_TEX_CUBE) proj = FALSE;
@@ -9928,20 +9913,11 @@ static GLuint shader_glsl_generate_ffp_fragment_shader(struct shader_glsl_priv * * texture coordinate, not the displacement, so multiply the * displacement with the dividing parameter before passing it to * TXP. */ - if (settings->op[stage].projected != WINED3D_PROJECTION_NONE) + if (settings->op[stage].projected) { - if (settings->op[stage].projected == WINED3D_PROJECTION_COUNT4) - { - shader_addline(buffer, "ret.xy = (ret.xy * ffp_texcoord[%u].w) + ffp_texcoord[%u].xy;\n", - stage, stage); - shader_addline(buffer, "ret.zw = ffp_texcoord[%u].ww;\n", stage); - } - else - { - shader_addline(buffer, "ret.xy = (ret.xy * ffp_texcoord[%u].z) + ffp_texcoord[%u].xy;\n", - stage, stage); - shader_addline(buffer, "ret.zw = ffp_texcoord[%u].zz;\n", stage); - } + shader_addline(buffer, "ret.xy = (ret.xy * ffp_texcoord[%u].w) + ffp_texcoord[%u].xy;\n", + stage, stage); + shader_addline(buffer, "ret.zw = ffp_texcoord[%u].ww;\n", stage); } else { @@ -9955,11 +9931,6 @@ static GLuint shader_glsl_generate_ffp_fragment_shader(struct shader_glsl_priv * shader_addline(buffer, "tex%u *= clamp(tex%u.z * bumpenv_lum_scale%u + bumpenv_lum_offset%u, 0.0, 1.0);\n", stage, stage - 1, stage - 1, stage - 1); } - else if (settings->op[stage].projected == WINED3D_PROJECTION_COUNT3) - { - shader_addline(buffer, "tex%u = %s%s(ps_sampler%u, ffp_texcoord[%u].xyz);\n", - stage, texture_function, proj ? "Proj" : "", stage, stage); - } else { shader_addline(buffer, "tex%u = %s%s(ps_sampler%u, ffp_texcoord[%u].%s%s);\n", diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c index 69d8568254b..5c37dbba0e9 100644 --- a/dlls/wined3d/utils.c +++ b/dlls/wined3d/utils.c @@ -6240,7 +6240,6 @@ void wined3d_ffp_get_fs_settings(const struct wined3d_state *state, /* D3DTOP_LERP */ ARG1 | ARG2 | ARG0 }; unsigned int i; - DWORD ttff; DWORD cop, aop, carg0, carg1, carg2, aarg0, aarg1, aarg2; struct wined3d_texture *texture;
@@ -6258,7 +6257,7 @@ void wined3d_ffp_get_fs_settings(const struct wined3d_state *state, settings->op[i].color_fixup = COLOR_FIXUP_IDENTITY; settings->op[i].tmp_dst = 0; settings->op[i].tex_type = WINED3D_GL_RES_TYPE_TEX_1D; - settings->op[i].projected = WINED3D_PROJECTION_NONE; + settings->op[i].projected = 0; i++; break; } @@ -6350,21 +6349,9 @@ void wined3d_ffp_get_fs_settings(const struct wined3d_state *state, aop = WINED3D_TOP_SELECT_ARG1; }
- if (carg1 == WINED3DTA_TEXTURE || carg2 == WINED3DTA_TEXTURE || carg0 == WINED3DTA_TEXTURE + settings->op[i].projected = (carg1 == WINED3DTA_TEXTURE || carg2 == WINED3DTA_TEXTURE || carg0 == WINED3DTA_TEXTURE || aarg1 == WINED3DTA_TEXTURE || aarg2 == WINED3DTA_TEXTURE || aarg0 == WINED3DTA_TEXTURE) - { - ttff = state->texture_states[i][WINED3D_TSS_TEXTURE_TRANSFORM_FLAGS]; - if (ttff == (WINED3D_TTFF_PROJECTED | WINED3D_TTFF_COUNT3)) - settings->op[i].projected = WINED3D_PROJECTION_COUNT3; - else if (ttff & WINED3D_TTFF_PROJECTED) - settings->op[i].projected = WINED3D_PROJECTION_COUNT4; - else - settings->op[i].projected = WINED3D_PROJECTION_NONE; - } - else - { - settings->op[i].projected = WINED3D_PROJECTION_NONE; - } + && (state->texture_states[i][WINED3D_TSS_TEXTURE_TRANSFORM_FLAGS] & WINED3D_TTFF_PROJECTED);
settings->op[i].cop = cop; settings->op[i].aop = aop; diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index d3ab5b646f4..1a53ab9b151 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -2633,16 +2633,6 @@ BOOL wined3d_adapter_no3d_init_format_info(struct wined3d_adapter *adapter); ssize_t adapter_adjust_mapped_memory(struct wined3d_adapter *adapter, ssize_t size); UINT64 adapter_adjust_memory(struct wined3d_adapter *adapter, INT64 amount);
-enum wined3d_projection_type -{ - WINED3D_PROJECTION_NONE = 0, - WINED3D_PROJECTION_COUNT3 = 1, - WINED3D_PROJECTION_COUNT4 = 2 -}; - -/***************************************************************************** - * Fixed function pipeline replacements - */ #define ARG_UNUSED 0xff struct texture_stage_op { @@ -2659,8 +2649,8 @@ struct texture_stage_op struct color_fixup_desc color_fixup; unsigned tex_type : 3; unsigned tmp_dst : 1; - unsigned projected : 2; - unsigned padding : 10; + unsigned projected : 1; + unsigned padding : 11; };
struct ffp_frag_settings