[WINED3D 6/6] Move D3DSP dest modifier related items into the
WINED3D namespace.
Ivan Gyurdiev
ivg231 at gmail.com
Mon Oct 9 18:48:12 CDT 2006
-------------- next part --------------
---
dlls/wined3d/arb_program_shader.c | 40 +++++++++++++++++-----------------
dlls/wined3d/baseshader.c | 24 ++++++++++----------
dlls/wined3d/glsl_shader.c | 22 +++++++++----------
dlls/wined3d/vertexshader.c | 16 ++++++++------
dlls/wined3d/wined3d_private_types.h | 22 +++++++++++++++++++
5 files changed, 74 insertions(+), 50 deletions(-)
diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c
index d7136f6..bf838d6 100644
--- a/dlls/wined3d/arb_program_shader.c
+++ b/dlls/wined3d/arb_program_shader.c
@@ -208,24 +208,24 @@ static const char* shift_tab[] = {
static void pshader_get_write_mask(const DWORD output_reg, char *write_mask) {
*write_mask = 0;
- if ((output_reg & D3DSP_WRITEMASK_ALL) != D3DSP_WRITEMASK_ALL) {
+ if ((output_reg & WINED3DSP_WRITEMASK_ALL) != WINED3DSP_WRITEMASK_ALL) {
strcat(write_mask, ".");
- if (output_reg & D3DSP_WRITEMASK_0) strcat(write_mask, "r");
- if (output_reg & D3DSP_WRITEMASK_1) strcat(write_mask, "g");
- if (output_reg & D3DSP_WRITEMASK_2) strcat(write_mask, "b");
- if (output_reg & D3DSP_WRITEMASK_3) strcat(write_mask, "a");
+ if (output_reg & WINED3DSP_WRITEMASK_0) strcat(write_mask, "r");
+ if (output_reg & WINED3DSP_WRITEMASK_1) strcat(write_mask, "g");
+ if (output_reg & WINED3DSP_WRITEMASK_2) strcat(write_mask, "b");
+ if (output_reg & WINED3DSP_WRITEMASK_3) strcat(write_mask, "a");
}
}
/* TODO: merge with pixel shader */
static void vshader_program_add_output_param_swizzle(const DWORD param, int is_color, char *hwLine) {
/** operand output */
- if ((param & D3DSP_WRITEMASK_ALL) != D3DSP_WRITEMASK_ALL) {
+ if ((param & WINED3DSP_WRITEMASK_ALL) != WINED3DSP_WRITEMASK_ALL) {
strcat(hwLine, ".");
- if (param & D3DSP_WRITEMASK_0) { strcat(hwLine, "x"); }
- if (param & D3DSP_WRITEMASK_1) { strcat(hwLine, "y"); }
- if (param & D3DSP_WRITEMASK_2) { strcat(hwLine, "z"); }
- if (param & D3DSP_WRITEMASK_3) { strcat(hwLine, "w"); }
+ if (param & WINED3DSP_WRITEMASK_0) { strcat(hwLine, "x"); }
+ if (param & WINED3DSP_WRITEMASK_1) { strcat(hwLine, "y"); }
+ if (param & WINED3DSP_WRITEMASK_2) { strcat(hwLine, "z"); }
+ if (param & WINED3DSP_WRITEMASK_3) { strcat(hwLine, "w"); }
}
}
@@ -569,20 +569,20 @@ void pshader_hw_map2gl(SHADER_OPCODE_ARG
strcpy(tmpLine, curOpcode->glname);
/* Process modifiers */
- if (0 != (dst & D3DSP_DSTMOD_MASK)) {
- DWORD mask = dst & D3DSP_DSTMOD_MASK;
+ if (0 != (dst & WINED3DSP_DSTMOD_MASK)) {
+ DWORD mask = dst & WINED3DSP_DSTMOD_MASK;
- saturate = mask & D3DSPDM_SATURATE;
- centroid = mask & D3DSPDM_MSAMPCENTROID;
- partialprecision = mask & D3DSPDM_PARTIALPRECISION;
- mask &= ~(D3DSPDM_MSAMPCENTROID | D3DSPDM_PARTIALPRECISION | D3DSPDM_SATURATE);
+ saturate = mask & WINED3DSPDM_SATURATE;
+ centroid = mask & WINED3DSPDM_MSAMPCENTROID;
+ partialprecision = mask & WINED3DSPDM_PARTIALPRECISION;
+ mask &= ~(WINED3DSPDM_MSAMPCENTROID | WINED3DSPDM_PARTIALPRECISION | WINED3DSPDM_SATURATE);
if (mask)
- FIXME("Unrecognized modifier(0x%#x)\n", mask >> D3DSP_DSTMOD_SHIFT);
+ FIXME("Unrecognized modifier(0x%#x)\n", mask >> WINED3DSP_DSTMOD_SHIFT);
if (centroid)
- FIXME("Unhandled modifier(0x%#x)\n", mask >> D3DSP_DSTMOD_SHIFT);
+ FIXME("Unhandled modifier(0x%#x)\n", mask >> WINED3DSP_DSTMOD_SHIFT);
}
- shift = (dst & D3DSP_DSTSHIFT_MASK) >> D3DSP_DSTSHIFT_SHIFT;
+ shift = (dst & WINED3DSP_DSTSHIFT_MASK) >> WINED3DSP_DSTSHIFT_SHIFT;
/* Generate input and output registers */
if (curOpcode->num_params > 0) {
@@ -877,7 +877,7 @@ void vshader_hw_mnxn(SHADER_OPCODE_ARG*
}
for (i = 0; i < nComponents; i++) {
- tmpArg.dst = ((arg->dst) & ~D3DSP_WRITEMASK_ALL)|(D3DSP_WRITEMASK_0<<i);
+ tmpArg.dst = ((arg->dst) & ~WINED3DSP_WRITEMASK_ALL)|(WINED3DSP_WRITEMASK_0<<i);
tmpArg.src[1] = arg->src[1]+i;
vshader_hw_map2gl(&tmpArg);
}
diff --git a/dlls/wined3d/baseshader.c b/dlls/wined3d/baseshader.c
index 4d9a289..3903fe5 100644
--- a/dlls/wined3d/baseshader.c
+++ b/dlls/wined3d/baseshader.c
@@ -606,12 +606,12 @@ void shader_dump_param(
if (!input) {
/* operand output (for modifiers and shift, see dump_ins_modifiers) */
- if ((param & D3DSP_WRITEMASK_ALL) != D3DSP_WRITEMASK_ALL) {
+ if ((param & WINED3DSP_WRITEMASK_ALL) != WINED3DSP_WRITEMASK_ALL) {
TRACE(".");
- if (param & D3DSP_WRITEMASK_0) TRACE("%c", swizzle_reg_chars[0]);
- if (param & D3DSP_WRITEMASK_1) TRACE("%c", swizzle_reg_chars[1]);
- if (param & D3DSP_WRITEMASK_2) TRACE("%c", swizzle_reg_chars[2]);
- if (param & D3DSP_WRITEMASK_3) TRACE("%c", swizzle_reg_chars[3]);
+ if (param & WINED3DSP_WRITEMASK_0) TRACE("%c", swizzle_reg_chars[0]);
+ if (param & WINED3DSP_WRITEMASK_1) TRACE("%c", swizzle_reg_chars[1]);
+ if (param & WINED3DSP_WRITEMASK_2) TRACE("%c", swizzle_reg_chars[2]);
+ if (param & WINED3DSP_WRITEMASK_3) TRACE("%c", swizzle_reg_chars[3]);
}
} else {
@@ -782,8 +782,8 @@ void shader_generate_main(
void shader_dump_ins_modifiers(const DWORD output) {
- DWORD shift = (output & D3DSP_DSTSHIFT_MASK) >> D3DSP_DSTSHIFT_SHIFT;
- DWORD mmask = output & D3DSP_DSTMOD_MASK;
+ DWORD shift = (output & WINED3DSP_DSTSHIFT_MASK) >> WINED3DSP_DSTSHIFT_SHIFT;
+ DWORD mmask = output & WINED3DSP_DSTMOD_MASK;
switch (shift) {
case 0: break;
@@ -796,13 +796,13 @@ void shader_dump_ins_modifiers(const DWO
default: TRACE("_unhandled_shift(%d)", shift); break;
}
- if (mmask & D3DSPDM_SATURATE) TRACE("_sat");
- if (mmask & D3DSPDM_PARTIALPRECISION) TRACE("_pp");
- if (mmask & D3DSPDM_MSAMPCENTROID) TRACE("_centroid");
+ if (mmask & WINED3DSPDM_SATURATE) TRACE("_sat");
+ if (mmask & WINED3DSPDM_PARTIALPRECISION) TRACE("_pp");
+ if (mmask & WINED3DSPDM_MSAMPCENTROID) TRACE("_centroid");
- mmask &= ~(D3DSPDM_SATURATE | D3DSPDM_PARTIALPRECISION | D3DSPDM_MSAMPCENTROID);
+ mmask &= ~(WINED3DSPDM_SATURATE | WINED3DSPDM_PARTIALPRECISION | WINED3DSPDM_MSAMPCENTROID);
if (mmask)
- FIXME("_unrecognized_modifier(%#x)", mmask >> D3DSP_DSTMOD_SHIFT);
+ FIXME("_unrecognized_modifier(%#x)", mmask >> WINED3DSP_DSTMOD_SHIFT);
}
/* First pass: trace shader, initialize length and version */
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index 9cd4e4d..9ced8be 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -504,7 +504,7 @@ static const char* shift_glsl_tab[] = {
* Will also change the reg_mask if necessary (not all register types are equal in DX vs GL) */
static void shader_glsl_add_dst(DWORD param, const char* reg_name, char* reg_mask, char* outStr) {
- int shift = (param & D3DSP_DSTSHIFT_MASK) >> D3DSP_DSTSHIFT_SHIFT;
+ int shift = (param & WINED3DSP_DSTSHIFT_MASK) >> WINED3DSP_DSTSHIFT_SHIFT;
char cast[6];
if ((shader_get_regtype(param) == WINED3DSPR_RASTOUT)
@@ -728,12 +728,12 @@ static void shader_glsl_get_output_regis
char *write_mask) {
*write_mask = 0;
- if ((param & D3DSP_WRITEMASK_ALL) != D3DSP_WRITEMASK_ALL) {
+ if ((param & WINED3DSP_WRITEMASK_ALL) != WINED3DSP_WRITEMASK_ALL) {
strcat(write_mask, ".");
- if (param & D3DSP_WRITEMASK_0) strcat(write_mask, "x");
- if (param & D3DSP_WRITEMASK_1) strcat(write_mask, "y");
- if (param & D3DSP_WRITEMASK_2) strcat(write_mask, "z");
- if (param & D3DSP_WRITEMASK_3) strcat(write_mask, "w");
+ if (param & WINED3DSP_WRITEMASK_0) strcat(write_mask, "x");
+ if (param & WINED3DSP_WRITEMASK_1) strcat(write_mask, "y");
+ if (param & WINED3DSP_WRITEMASK_2) strcat(write_mask, "z");
+ if (param & WINED3DSP_WRITEMASK_3) strcat(write_mask, "w");
}
}
@@ -816,7 +816,7 @@ static void shader_glsl_add_param(
/** Process GLSL instruction modifiers */
void shader_glsl_add_instruction_modifiers(SHADER_OPCODE_ARG* arg) {
- DWORD mask = arg->dst & D3DSP_DSTMOD_MASK;
+ DWORD mask = arg->dst & WINED3DSP_DSTMOD_MASK;
if (arg->opcode->dst_token && mask != 0) {
char dst_reg[50];
@@ -825,14 +825,14 @@ void shader_glsl_add_instruction_modifie
shader_glsl_add_param(arg, arg->dst, 0, FALSE, dst_reg, dst_mask, dst_str);
- if (mask & D3DSPDM_SATURATE) {
+ if (mask & WINED3DSPDM_SATURATE) {
/* _SAT means to clamp the value of the register to between 0 and 1 */
shader_addline(arg->buffer, "%s%s = clamp(%s%s, 0.0, 1.0);\n", dst_reg, dst_mask, dst_reg, dst_mask);
}
- if (mask & D3DSPDM_MSAMPCENTROID) {
+ if (mask & WINED3DSPDM_MSAMPCENTROID) {
FIXME("_centroid modifier not handled\n");
}
- if (mask & D3DSPDM_PARTIALPRECISION) {
+ if (mask & WINED3DSPDM_PARTIALPRECISION) {
/* MSDN says this modifier can be safely ignored, so that's what we'll do. */
}
}
@@ -1163,7 +1163,7 @@ void shader_glsl_mnxn(SHADER_OPCODE_ARG*
}
for (i = 0; i < nComponents; i++) {
- tmpArg.dst = ((arg->dst) & ~D3DSP_WRITEMASK_ALL)|(D3DSP_WRITEMASK_0<<i);
+ tmpArg.dst = ((arg->dst) & ~WINED3DSP_WRITEMASK_ALL)|(WINED3DSP_WRITEMASK_0<<i);
tmpArg.src[1] = arg->src[1]+i;
shader_glsl_dot(&tmpArg);
}
diff --git a/dlls/wined3d/vertexshader.c b/dlls/wined3d/vertexshader.c
index 7eca23f..07429b6 100644
--- a/dlls/wined3d/vertexshader.c
+++ b/dlls/wined3d/vertexshader.c
@@ -627,7 +627,7 @@ static void vshader_set_input(
/* Fake register; set reserved bit, regnum, type: input, wmask: all */
DWORD reg_token = (0x1 << 31) |
- D3DSP_WRITEMASK_ALL | (WINED3DSPR_INPUT << WINED3DSP_REGTYPE_SHIFT) | regnum;
+ WINED3DSP_WRITEMASK_ALL | (WINED3DSPR_INPUT << WINED3DSP_REGTYPE_SHIFT) | regnum;
This->semantics_in[regnum].usage = usage_token;
This->semantics_in[regnum].reg = reg_token;
@@ -991,7 +991,7 @@ #endif
p_send[i] = &s[i];
}
} else { /* output reg */
- if ((pToken[i] & D3DSP_WRITEMASK_ALL) == D3DSP_WRITEMASK_ALL) {
+ if ((pToken[i] & WINED3DSP_WRITEMASK_ALL) == WINED3DSP_WRITEMASK_ALL) {
p_send[i] = p[i];
} else {
p_send[i] = &d; /* to be post-processed for modifiers management */
@@ -1027,11 +1027,13 @@ #endif
}
/* check if output reg modifier post-process */
- if (curOpcode->num_params > 0 && (pToken[0] & D3DSP_WRITEMASK_ALL) != D3DSP_WRITEMASK_ALL) {
- if (pToken[0] & D3DSP_WRITEMASK_0) p[0]->x = d.x;
- if (pToken[0] & D3DSP_WRITEMASK_1) p[0]->y = d.y;
- if (pToken[0] & D3DSP_WRITEMASK_2) p[0]->z = d.z;
- if (pToken[0] & D3DSP_WRITEMASK_3) p[0]->w = d.w;
+ if (curOpcode->num_params > 0 &&
+ (pToken[0] & WINED3DSP_WRITEMASK_ALL) != WINED3DSP_WRITEMASK_ALL) {
+
+ if (pToken[0] & WINED3DSP_WRITEMASK_0) p[0]->x = d.x;
+ if (pToken[0] & WINED3DSP_WRITEMASK_1) p[0]->y = d.y;
+ if (pToken[0] & WINED3DSP_WRITEMASK_2) p[0]->z = d.z;
+ if (pToken[0] & WINED3DSP_WRITEMASK_3) p[0]->w = d.w;
}
#if 0
TRACE_VSVECTOR(output->oPos);
diff --git a/dlls/wined3d/wined3d_private_types.h b/dlls/wined3d/wined3d_private_types.h
index 5aac864..c075c70 100644
--- a/dlls/wined3d/wined3d_private_types.h
+++ b/dlls/wined3d/wined3d_private_types.h
@@ -134,6 +134,28 @@ typedef enum _WINED3DSHADER_PARAM_SRCMOD
WINED3DSPSM_FORCE_DWORD = 0x7FFFFFFF
} WINED3DSHADER_PARAM_SRCMOD_TYPE;
+/** Destination register modifiers **/
+#define WINED3DSP_WRITEMASK_0 0x00010000 /* .x r */
+#define WINED3DSP_WRITEMASK_1 0x00020000 /* .y g */
+#define WINED3DSP_WRITEMASK_2 0x00040000 /* .z b */
+#define WINED3DSP_WRITEMASK_3 0x00080000 /* .w a */
+#define WINED3DSP_WRITEMASK_ALL 0x000F0000 /* all */
+
+#define WINED3DSP_DSTMOD_SHIFT 20
+#define WINED3DSP_DSTMOD_MASK (0xF << WINED3DSP_DSTMOD_SHIFT)
+
+typedef enum _WINED3DSHADER_PARAM_DSTMOD_TYPE {
+ WINED3DSPDM_NONE = 0 << WINED3DSP_DSTMOD_SHIFT,
+ WINED3DSPDM_SATURATE = 1 << WINED3DSP_DSTMOD_SHIFT,
+ WINED3DSPDM_PARTIALPRECISION = 2 << WINED3DSP_DSTMOD_SHIFT,
+ WINED3DSPDM_MSAMPCENTROID = 4 << WINED3DSP_DSTMOD_SHIFT,
+
+ WINED3DSPDM_FORCE_DWORD = 0x7FFFFFFF
+} WINED3DSHADER_PARAM_DSTMOD_TYPE;
+
+#define WINED3DSP_DSTSHIFT_SHIFT 24
+#define WINED3DSP_DSTSHIFT_MASK (0xF << WINED3DSP_DSTSHIFT_SHIFT)
+
/** opcodes types for PS and VS */
typedef enum _WINED3DSHADER_INSTRUCTION_OPCODE_TYPE {
WINED3DSIO_NOP = 0,
--
1.4.2.1
More information about the wine-patches
mailing list