[PATCH 5/5] wined3d: Get rid of the WINED3DTEXTURETRANSFORMFLAGS typedef.
Henri Verbeet
hverbeet at codeweavers.com
Mon Jan 9 15:16:52 CST 2012
---
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 05f1f1d..27dbfb0 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 5684651..50233e9 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 fb7349b..fd03942 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 c53fdb0..309f747 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 581377f..7b9b1ed 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
-{
- WINED3DTTFF_DISABLE = 0,
- WINED3DTTFF_COUNT1 = 1,
- WINED3DTTFF_COUNT2 = 2,
- WINED3DTTFF_COUNT3 = 3,
- WINED3DTTFF_COUNT4 = 4,
- WINED3DTTFF_PROJECTED = 256,
- WINED3DTTFF_FORCE_DWORD = 0x7fffffff
-} WINED3DTEXTURETRANSFORMFLAGS;
+enum wined3d_texture_transform_flags
+{
+ 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
{
--
1.7.3.4
More information about the wine-patches
mailing list