From 7f7bc520b6610528b5db351502299b4c9589d6b6 Mon Sep 17 00:00:00 2001 From: Henri Verbeet Date: Mon, 9 Jan 2012 22:16:52 +0100 Subject: [PATCH] wined3d: Get rid of the WINED3DTEXTURETRANSFORMFLAGS typedef. --- dlls/wined3d/glsl_shader.c | 53 ++++++++++++++++++++++----------- dlls/wined3d/shader.c | 12 ++++---- dlls/wined3d/stateblock.c | 2 +- dlls/wined3d/utils.c | 60 +++++++++++++++++++++++--------------- include/wine/wined3d.h | 17 +++++------ 5 files changed, 88 insertions(+), 56 deletions(-) diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c index 05f1f1d8d49..27dbfb09571 100644 --- a/dlls/wined3d/glsl_shader.c +++ b/dlls/wined3d/glsl_shader.c @@ -3041,14 +3041,24 @@ static void shader_glsl_tex(const struct wined3d_shader_instruction *ins) enum wined3d_sampler_texture_type sampler_type = ins->ctx->reg_maps->sampler_type[sampler_idx]; /* Projected cube textures don't make a lot of sense, the resulting coordinates stay the same. */ - if (flags & WINED3D_PSARGS_PROJECTED && sampler_type != WINED3DSTT_CUBE) { + if (flags & WINED3D_PSARGS_PROJECTED && sampler_type != WINED3DSTT_CUBE) + { sample_flags |= WINED3D_GLSL_SAMPLE_PROJECTED; - switch (flags & ~WINED3D_PSARGS_PROJECTED) { - case WINED3DTTFF_COUNT1: FIXME("WINED3DTTFF_PROJECTED with WINED3DTTFF_COUNT1?\n"); break; - case WINED3DTTFF_COUNT2: mask = WINED3DSP_WRITEMASK_1; break; - case WINED3DTTFF_COUNT3: mask = WINED3DSP_WRITEMASK_2; break; - case WINED3DTTFF_COUNT4: - case WINED3DTTFF_DISABLE: mask = WINED3DSP_WRITEMASK_3; break; + switch (flags & ~WINED3D_PSARGS_PROJECTED) + { + case WINED3D_TTFF_COUNT1: + FIXME("WINED3D_TTFF_PROJECTED with WINED3D_TTFF_COUNT1?\n"); + break; + case WINED3D_TTFF_COUNT2: + mask = WINED3DSP_WRITEMASK_1; + break; + case WINED3D_TTFF_COUNT3: + mask = WINED3DSP_WRITEMASK_2; + break; + case WINED3D_TTFF_COUNT4: + case WINED3D_TTFF_DISABLE: + mask = WINED3DSP_WRITEMASK_3; + break; } } } @@ -3502,18 +3512,27 @@ static void shader_glsl_texbem(const struct wined3d_shader_instruction *ins) shader_glsl_write_mask_to_str(mask, coord_mask); - /* with projective textures, texbem only divides the static texture coord, not the displacement, - * so we can't let the GL handle this. - */ - if (flags & WINED3D_PSARGS_PROJECTED) { + /* With projected textures, texbem only divides the static texture coord, + * not the displacement, so we can't let GL handle this. */ + if (flags & WINED3D_PSARGS_PROJECTED) + { DWORD div_mask=0; char coord_div_mask[3]; - switch (flags & ~WINED3D_PSARGS_PROJECTED) { - case WINED3DTTFF_COUNT1: FIXME("WINED3DTTFF_PROJECTED with WINED3DTTFF_COUNT1?\n"); break; - case WINED3DTTFF_COUNT2: div_mask = WINED3DSP_WRITEMASK_1; break; - case WINED3DTTFF_COUNT3: div_mask = WINED3DSP_WRITEMASK_2; break; - case WINED3DTTFF_COUNT4: - case WINED3DTTFF_DISABLE: div_mask = WINED3DSP_WRITEMASK_3; break; + switch (flags & ~WINED3D_PSARGS_PROJECTED) + { + case WINED3D_TTFF_COUNT1: + FIXME("WINED3D_TTFF_PROJECTED with WINED3D_TTFF_COUNT1?\n"); + break; + case WINED3D_TTFF_COUNT2: + div_mask = WINED3DSP_WRITEMASK_1; + break; + case WINED3D_TTFF_COUNT3: + div_mask = WINED3DSP_WRITEMASK_2; + break; + case WINED3D_TTFF_COUNT4: + case WINED3D_TTFF_DISABLE: + div_mask = WINED3DSP_WRITEMASK_3; + break; } shader_glsl_write_mask_to_str(div_mask, coord_div_mask); shader_addline(ins->ctx->buffer, "T%u%s /= T%u%s;\n", sampler_idx, coord_mask, sampler_idx, coord_div_mask); diff --git a/dlls/wined3d/shader.c b/dlls/wined3d/shader.c index 5684651760e..50233e9406b 100644 --- a/dlls/wined3d/shader.c +++ b/dlls/wined3d/shader.c @@ -1912,11 +1912,11 @@ void find_ps_compile_args(const struct wined3d_state *state, { DWORD flags = state->texture_states[i][WINED3D_TSS_TEXTURE_TRANSFORM_FLAGS]; - if (flags & WINED3DTTFF_PROJECTED) + if (flags & WINED3D_TTFF_PROJECTED) { enum wined3d_sampler_texture_type sampler_type = shader->reg_maps.sampler_type[i]; - DWORD tex_transform = flags & ~WINED3DTTFF_PROJECTED; - DWORD max_valid = WINED3DTTFF_COUNT4; + DWORD tex_transform = flags & ~WINED3D_TTFF_PROJECTED; + DWORD max_valid = WINED3D_TTFF_COUNT4; if (!state->vertex_shader) { @@ -1943,9 +1943,9 @@ void find_ps_compile_args(const struct wined3d_state *state, tex_transform = max_valid; } - if ((sampler_type == WINED3DSTT_1D && tex_transform > WINED3DTTFF_COUNT1) - || (sampler_type == WINED3DSTT_2D && tex_transform > WINED3DTTFF_COUNT2) - || (sampler_type == WINED3DSTT_VOLUME && tex_transform > WINED3DTTFF_COUNT3)) + if ((sampler_type == WINED3DSTT_1D && tex_transform > WINED3D_TTFF_COUNT1) + || (sampler_type == WINED3DSTT_2D && tex_transform > WINED3D_TTFF_COUNT2) + || (sampler_type == WINED3DSTT_VOLUME && tex_transform > WINED3D_TTFF_COUNT3)) tex_transform |= WINED3D_PSARGS_PROJECTED; else WARN("Application requested projected texture with unsuitable texture coordinates.\n"); diff --git a/dlls/wined3d/stateblock.c b/dlls/wined3d/stateblock.c index fb7349b05fd..fd039423c29 100644 --- a/dlls/wined3d/stateblock.c +++ b/dlls/wined3d/stateblock.c @@ -1267,7 +1267,7 @@ void stateblock_init_default_state(struct wined3d_stateblock *stateblock) state->texture_states[i][WINED3D_TSS_TEXCOORD_INDEX] = i; state->texture_states[i][WINED3D_TSS_BUMPENV_LSCALE] = 0; state->texture_states[i][WINED3D_TSS_BUMPENV_LOFFSET] = 0; - state->texture_states[i][WINED3D_TSS_TEXTURE_TRANSFORM_FLAGS] = WINED3DTTFF_DISABLE; + state->texture_states[i][WINED3D_TSS_TEXTURE_TRANSFORM_FLAGS] = WINED3D_TTFF_DISABLE; state->texture_states[i][WINED3D_TSS_COLOR_ARG0] = WINED3DTA_CURRENT; state->texture_states[i][WINED3D_TSS_ALPHA_ARG0] = WINED3DTA_CURRENT; state->texture_states[i][WINED3D_TSS_RESULT_ARG] = WINED3DTA_CURRENT; diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c index c53fdb00419..309f747fd7e 100644 --- a/dlls/wined3d/utils.c +++ b/dlls/wined3d/utils.c @@ -2503,30 +2503,41 @@ void set_texture_matrix(const float *smat, DWORD flags, BOOL calculatedCoords, B glMatrixMode(GL_TEXTURE); checkGLcall("glMatrixMode(GL_TEXTURE)"); - if (flags == WINED3DTTFF_DISABLE || flags == WINED3DTTFF_COUNT1 || transformed) { + if (flags == WINED3D_TTFF_DISABLE || flags == WINED3D_TTFF_COUNT1 || transformed) + { glLoadIdentity(); checkGLcall("glLoadIdentity()"); return; } - if (flags == (WINED3DTTFF_COUNT1|WINED3DTTFF_PROJECTED)) { - ERR("Invalid texture transform flags: WINED3DTTFF_COUNT1|WINED3DTTFF_PROJECTED\n"); + if (flags == (WINED3D_TTFF_COUNT1 | WINED3D_TTFF_PROJECTED)) + { + ERR("Invalid texture transform flags: WINED3D_TTFF_COUNT1 | WINED3D_TTFF_PROJECTED.\n"); return; } memcpy(mat, smat, 16 * sizeof(float)); - if (flags & WINED3DTTFF_PROJECTED) { - if(!ffp_proj_control) { - switch (flags & ~WINED3DTTFF_PROJECTED) { - case WINED3DTTFF_COUNT2: - mat[3] = mat[1], mat[7] = mat[5], mat[11] = mat[9], mat[15] = mat[13]; - mat[1] = mat[5] = mat[9] = mat[13] = 0; - break; - case WINED3DTTFF_COUNT3: - mat[3] = mat[2], mat[7] = mat[6], mat[11] = mat[10], mat[15] = mat[14]; - mat[2] = mat[6] = mat[10] = mat[14] = 0; - break; + if (flags & WINED3D_TTFF_PROJECTED) + { + if (!ffp_proj_control) + { + switch (flags & ~WINED3D_TTFF_PROJECTED) + { + case WINED3D_TTFF_COUNT2: + mat[ 3] = mat[ 1]; + mat[ 7] = mat[ 5]; + mat[11] = mat[ 9]; + mat[15] = mat[13]; + mat[ 1] = mat[ 5] = mat[ 9] = mat[13] = 0.0f; + break; + case WINED3D_TTFF_COUNT3: + mat[ 3] = mat[ 2]; + mat[ 7] = mat[ 6]; + mat[11] = mat[10]; + mat[15] = mat[14]; + mat[ 2] = mat[ 6] = mat[10] = mat[14] = 0.0f; + break; } } } else { /* under directx the R/Z coord can be used for translation, under opengl we use the Q coord instead */ @@ -2564,10 +2575,13 @@ void set_texture_matrix(const float *smat, DWORD flags, BOOL calculatedCoords, B FIXME("Unexpected fixed function texture coord input\n"); } } - if(!ffp_proj_control) { - switch (flags & ~WINED3DTTFF_PROJECTED) { - /* case WINED3DTTFF_COUNT1: Won't ever get here */ - case WINED3DTTFF_COUNT2: mat[2] = mat[6] = mat[10] = mat[14] = 0; + if (!ffp_proj_control) + { + switch (flags & ~WINED3D_TTFF_PROJECTED) + { + /* case WINED3D_TTFF_COUNT1: Won't ever get here. */ + case WINED3D_TTFF_COUNT2: + mat[2] = mat[6] = mat[10] = mat[14] = 0; /* OpenGL divides the first 3 vertex coord by the 4th by default, * which is essentially the same as D3DTTFF_PROJECTED. Make sure that * the 4th coord evaluates to 1.0 to eliminate that. @@ -2579,9 +2593,9 @@ void set_texture_matrix(const float *smat, DWORD flags, BOOL calculatedCoords, B * * A more serious problem occurs if the app passes 4 coordinates in, and the * 4th is != 1.0(opengl default). This would have to be fixed in drawStridedSlow - * or a replacement shader - */ - default: mat[3] = mat[7] = mat[11] = 0; mat[15] = 1; + * or a replacement shader. */ + default: + mat[3] = mat[7] = mat[11] = 0; mat[15] = 1; } } } @@ -3015,9 +3029,9 @@ void gen_ffp_frag_op(const struct wined3d_device *device, const struct wined3d_s || aarg1 == WINED3DTA_TEXTURE || aarg2 == WINED3DTA_TEXTURE || aarg0 == WINED3DTA_TEXTURE) { ttff = state->texture_states[i][WINED3D_TSS_TEXTURE_TRANSFORM_FLAGS]; - if (ttff == (WINED3DTTFF_PROJECTED | WINED3DTTFF_COUNT3)) + if (ttff == (WINED3D_TTFF_PROJECTED | WINED3D_TTFF_COUNT3)) settings->op[i].projected = proj_count3; - else if (ttff & WINED3DTTFF_PROJECTED) + else if (ttff & WINED3D_TTFF_PROJECTED) settings->op[i].projected = proj_count4; else settings->op[i].projected = proj_none; diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h index 581377f2310..7b9b1ed62d7 100644 --- a/include/wine/wined3d.h +++ b/include/wine/wined3d.h @@ -572,16 +572,15 @@ enum wined3d_texture_stage_state }; #define WINED3D_HIGHEST_TEXTURE_STATE WINED3D_TSS_CONSTANT -typedef enum _WINED3DTEXTURETRANSFORMFLAGS +enum wined3d_texture_transform_flags { - WINED3DTTFF_DISABLE = 0, - WINED3DTTFF_COUNT1 = 1, - WINED3DTTFF_COUNT2 = 2, - WINED3DTTFF_COUNT3 = 3, - WINED3DTTFF_COUNT4 = 4, - WINED3DTTFF_PROJECTED = 256, - WINED3DTTFF_FORCE_DWORD = 0x7fffffff -} WINED3DTEXTURETRANSFORMFLAGS; + WINED3D_TTFF_DISABLE = 0, + WINED3D_TTFF_COUNT1 = 1, + WINED3D_TTFF_COUNT2 = 2, + WINED3D_TTFF_COUNT3 = 3, + WINED3D_TTFF_COUNT4 = 4, + WINED3D_TTFF_PROJECTED = 256, +}; typedef enum _WINED3DTEXTUREOP {