[WINED3D 3/11] Allow multiple output modifiers.
Ivan Gyurdiev
ivg2 at cornell.edu
Wed May 17 00:58:19 CDT 2006
There can be several output modifiers on the same token.
-------------- next part --------------
---
dlls/wined3d/baseshader.c | 14 +++++++-------
dlls/wined3d/pixelshader.c | 28 +++++++++++++++++-----------
2 files changed, 24 insertions(+), 18 deletions(-)
608ec91140e51900faaf22f5bc00bf091257c042
diff --git a/dlls/wined3d/baseshader.c b/dlls/wined3d/baseshader.c
index 92db8ab..79a47e6 100644
--- a/dlls/wined3d/baseshader.c
+++ b/dlls/wined3d/baseshader.c
@@ -547,13 +547,13 @@ void shader_dump_ins_modifiers(const DWO
default: TRACE("_unhandled_shift(%ld)", shift); break;
}
- switch(mmask) {
- case D3DSPDM_NONE: break;
- case D3DSPDM_SATURATE: TRACE("_sat"); break;
- case D3DSPDM_PARTIALPRECISION: TRACE("_pp"); break;
- case D3DSPDM_MSAMPCENTROID: TRACE("_centroid"); break;
- default: TRACE("_unhandled_modifier(%#lx)", mmask); break;
- }
+ if (mmask & D3DSPDM_SATURATE) TRACE("_sat");
+ if (mmask & D3DSPDM_PARTIALPRECISION) TRACE("_pp");
+ if (mmask & D3DSPDM_MSAMPCENTROID) TRACE("_centroid");
+
+ mmask &= ~(D3DSPDM_SATURATE | D3DSPDM_PARTIALPRECISION | D3DSPDM_MSAMPCENTROID);
+ if (mmask)
+ FIXME("_unrecognized_modifier(%#lx)", mmask >> D3DSP_DSTMOD_SHIFT);
}
/* TODO: Move other shared code here */
diff --git a/dlls/wined3d/pixelshader.c b/dlls/wined3d/pixelshader.c
index 5bda1f1..0547105 100644
--- a/dlls/wined3d/pixelshader.c
+++ b/dlls/wined3d/pixelshader.c
@@ -981,9 +981,13 @@ void pshader_hw_map2gl(SHADER_OPCODE_ARG
unsigned int i;
char tmpLine[256];
+
+ /* Output token related */
char output_rname[256];
char output_wmask[20];
BOOL saturate = FALSE;
+ BOOL centroid = FALSE;
+ BOOL partialprecision = FALSE;
DWORD shift;
TRACE("Appending glname %s to tmpLine\n", curOpcode->glname);
@@ -992,17 +996,19 @@ void pshader_hw_map2gl(SHADER_OPCODE_ARG
/* Process modifiers */
if (0 != (dst & D3DSP_DSTMOD_MASK)) {
DWORD mask = dst & D3DSP_DSTMOD_MASK;
- switch (mask) {
- case D3DSPDM_SATURATE: saturate = TRUE; break;
-#if 0 /* as yet unhandled modifiers */
- case D3DSPDM_CENTROID: centroid = TRUE; break;
- case D3DSPDM_PP: partialpresision = TRUE; break;
-#endif
- default:
- TRACE("_unhandled_modifier(0x%08lx)\n", mask);
- }
- }
- shift = (dst & D3DSP_DSTSHIFT_MASK) >> D3DSP_DSTSHIFT_SHIFT;
+
+ saturate = mask & D3DSPDM_SATURATE;
+ centroid = mask & D3DSPDM_MSAMPCENTROID;
+ partialprecision = mask & D3DSPDM_PARTIALPRECISION;
+ mask &= ~(D3DSPDM_MSAMPCENTROID | D3DSPDM_PARTIALPRECISION | D3DSPDM_SATURATE);
+
+ if (mask)
+ FIXME("Unrecognized modifier(0x%#lx)\n", mask >> D3DSP_DSTMOD_SHIFT);
+
+ if (centroid)
+ FIXME("Unhandled modifier(0x%#lx)\n", mask >> D3DSP_DSTMOD_SHIFT);
+ }
+ shift = (dst & D3DSP_DSTSHIFT_MASK) >> D3DSP_DSTSHIFT_SHIFT;
/* Generate input and output registers */
if (curOpcode->num_params > 0) {
--
1.3.1
More information about the wine-patches
mailing list