Module: wine Branch: refs/heads/master Commit: d4dd9869b875f582285148173db12b5ec9d36cfe URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=d4dd9869b875f58228514817...
Author: Ivan Gyurdiev ivg2@cornell.edu Date: Wed May 17 01:58:19 2006 -0400
wined3d: Allow multiple output modifiers.
---
dlls/wined3d/baseshader.c | 14 +++++++------- dlls/wined3d/pixelshader.c | 28 +++++++++++++++++----------- 2 files changed, 24 insertions(+), 18 deletions(-)
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 ace0c2d..99c1fc9 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) {