wined3d: Pass a struct wined3d_shader_semantic to shader_dump_decl_usage().

Henri Verbeet hverbeet at codeweavers.com
Thu Apr 30 04:02:20 CDT 2009


---
 dlls/wined3d/baseshader.c |  161 +++++++++++++++++++-------------------------
 1 files changed, 70 insertions(+), 91 deletions(-)

diff --git a/dlls/wined3d/baseshader.c b/dlls/wined3d/baseshader.c
index b4a768e..96e09d6 100644
--- a/dlls/wined3d/baseshader.c
+++ b/dlls/wined3d/baseshader.c
@@ -840,82 +840,75 @@ HRESULT shader_get_registers_used(IWineD3DBaseShader *iface, struct shader_reg_m
     return WINED3D_OK;
 }
 
-static void shader_dump_decl_usage(DWORD decl, DWORD param, DWORD shader_version)
+static void shader_dump_decl_usage(const struct wined3d_shader_semantic *semantic, DWORD shader_version)
 {
-    DWORD regtype = shader_get_regtype(param);
-
     TRACE("dcl");
 
-    if (regtype == WINED3DSPR_SAMPLER) {
-        DWORD ttype = (decl & WINED3DSP_TEXTURETYPE_MASK) >> WINED3DSP_TEXTURETYPE_SHIFT;
-
-        switch (ttype) {
+    if (semantic->reg.register_type == WINED3DSPR_SAMPLER)
+    {
+        switch (semantic->sampler_type)
+        {
             case WINED3DSTT_2D: TRACE("_2d"); break;
             case WINED3DSTT_CUBE: TRACE("_cube"); break;
             case WINED3DSTT_VOLUME: TRACE("_volume"); break;
-            default: TRACE("_unknown_ttype(0x%08x)", ttype);
-       }
-
-    } else { 
-
-        DWORD usage = decl & WINED3DSP_DCL_USAGE_MASK;
-        DWORD idx = (decl & WINED3DSP_DCL_USAGEINDEX_MASK) >> WINED3DSP_DCL_USAGEINDEX_SHIFT;
-
+            default: TRACE("_unknown_ttype(0x%08x)", semantic->sampler_type);
+        }
+    }
+    else
+    {
         /* Pixel shaders 3.0 don't have usage semantics */
         if (shader_is_pshader_version(shader_version) && shader_version < WINED3DPS_VERSION(3,0))
             return;
         else
             TRACE("_");
 
-        switch(usage) {
-        case WINED3DDECLUSAGE_POSITION:
-            TRACE("position%d", idx);
-            break;
-        case WINED3DDECLUSAGE_BLENDINDICES:
-            TRACE("blend");
-            break;
-        case WINED3DDECLUSAGE_BLENDWEIGHT:
-            TRACE("weight");
-            break;
-        case WINED3DDECLUSAGE_NORMAL:
-            TRACE("normal%d", idx);
-            break;
-        case WINED3DDECLUSAGE_PSIZE:
-            TRACE("psize");
-            break;
-        case WINED3DDECLUSAGE_COLOR:
-            if(idx == 0)  {
-                TRACE("color");
-            } else {
-                TRACE("specular%d", (idx - 1));
-            }
-            break;
-        case WINED3DDECLUSAGE_TEXCOORD:
-            TRACE("texture%d", idx);
-            break;
-        case WINED3DDECLUSAGE_TANGENT:
-            TRACE("tangent");
-            break;
-        case WINED3DDECLUSAGE_BINORMAL:
-            TRACE("binormal");
-            break;
-        case WINED3DDECLUSAGE_TESSFACTOR:
-            TRACE("tessfactor");
-            break;
-        case WINED3DDECLUSAGE_POSITIONT:
-            TRACE("positionT%d", idx);
-            break;
-        case WINED3DDECLUSAGE_FOG:
-            TRACE("fog");
-            break;
-        case WINED3DDECLUSAGE_DEPTH:
-            TRACE("depth");
-            break;
-        case WINED3DDECLUSAGE_SAMPLE:
-            TRACE("sample");
-            break;
-        default:
-            FIXME("unknown_semantics(0x%08x)", usage);
+        switch (semantic->usage)
+        {
+            case WINED3DDECLUSAGE_POSITION:
+                TRACE("position%d", semantic->usage_idx);
+                break;
+            case WINED3DDECLUSAGE_BLENDINDICES:
+                TRACE("blend");
+                break;
+            case WINED3DDECLUSAGE_BLENDWEIGHT:
+                TRACE("weight");
+                break;
+            case WINED3DDECLUSAGE_NORMAL:
+                TRACE("normal%d", semantic->usage_idx);
+                break;
+            case WINED3DDECLUSAGE_PSIZE:
+                TRACE("psize");
+                break;
+            case WINED3DDECLUSAGE_COLOR:
+                if (semantic->usage_idx == 0) TRACE("color");
+                else TRACE("specular%d", (semantic->usage_idx - 1));
+                break;
+            case WINED3DDECLUSAGE_TEXCOORD:
+                TRACE("texture%d", semantic->usage_idx);
+                break;
+            case WINED3DDECLUSAGE_TANGENT:
+                TRACE("tangent");
+                break;
+            case WINED3DDECLUSAGE_BINORMAL:
+                TRACE("binormal");
+                break;
+            case WINED3DDECLUSAGE_TESSFACTOR:
+                TRACE("tessfactor");
+                break;
+            case WINED3DDECLUSAGE_POSITIONT:
+                TRACE("positionT%d", semantic->usage_idx);
+                break;
+            case WINED3DDECLUSAGE_FOG:
+                TRACE("fog");
+                break;
+            case WINED3DDECLUSAGE_DEPTH:
+                TRACE("depth");
+                break;
+            case WINED3DDECLUSAGE_SAMPLE:
+                TRACE("sample");
+                break;
+            default:
+                FIXME("unknown_semantics(0x%08x)", semantic->usage);
         }
     }
 }
@@ -1202,12 +1195,12 @@ void shader_generate_main(IWineD3DBaseShader *iface, SHADER_BUFFER* buffer,
     }
 }
 
-static void shader_dump_ins_modifiers(const DWORD output)
+static void shader_dump_ins_modifiers(const struct wined3d_shader_dst_param *dst)
 {
-    DWORD shift = (output & WINED3DSP_DSTSHIFT_MASK) >> WINED3DSP_DSTSHIFT_SHIFT;
-    DWORD mmask = output & WINED3DSP_DSTMOD_MASK;
+    DWORD mmask = dst->modifiers;
 
-    switch (shift) {
+    switch (dst->shift)
+    {
         case 0: break;
         case 13: TRACE("_d8"); break;
         case 14: TRACE("_d4"); break;
@@ -1215,7 +1208,7 @@ static void shader_dump_ins_modifiers(const DWORD output)
         case 1: TRACE("_x2"); break;
         case 2: TRACE("_x4"); break;
         case 3: TRACE("_x8"); break;
-        default: TRACE("_unhandled_shift(%d)", shift); break;
+        default: TRACE("_unhandled_shift(%d)", dst->shift); break;
     }
 
     if (mmask & WINED3DSPDM_SATURATE)         TRACE("_sat");
@@ -1269,18 +1262,15 @@ void shader_trace_init(const DWORD *pFunction, const SHADER_OPCODE *opcode_table
 
         if (ins.handler_idx == WINED3DSIH_DCL)
         {
-            struct wined3d_shader_dst_param dst;
-            DWORD usage = *pToken;
-            DWORD param = *(pToken + 1);
+            struct wined3d_shader_semantic semantic;
 
-            shader_parse_dst_param(param, NULL, &dst);
+            shader_sm1_read_semantic(&pToken, &semantic);
 
-            shader_dump_decl_usage(usage, param, shader_version);
-            shader_dump_ins_modifiers(param);
+            shader_dump_decl_usage(&semantic, shader_version);
+            shader_dump_ins_modifiers(&semantic.reg);
             TRACE(" ");
-            shader_dump_param(dst.register_type, dst.register_idx, FALSE,
-                    0, dst.write_mask, dst.rel_addr, shader_version);
-            pToken += 2;
+            shader_dump_param(semantic.reg.register_type, semantic.reg.register_idx, FALSE,
+                    0, semantic.reg.write_mask, semantic.reg.rel_addr, shader_version);
         }
         else if (ins.handler_idx == WINED3DSIH_DEF)
         {
@@ -1360,20 +1350,9 @@ void shader_trace_init(const DWORD *pFunction, const SHADER_OPCODE *opcode_table
                 struct wined3d_shader_dst_param dst;
                 struct wined3d_shader_src_param rel_addr;
 
-                tokens_read = shader_get_param(pToken, shader_version, &param, &addr_token);
-                pToken += tokens_read;
-
-                if (param & WINED3DSHADER_ADDRMODE_RELATIVE)
-                {
-                    shader_parse_src_param(addr_token, NULL, &rel_addr);
-                    shader_parse_dst_param(param, &rel_addr, &dst);
-                }
-                else
-                {
-                    shader_parse_dst_param(param, NULL, &dst);
-                }
+                shader_sm1_read_dst_param(&pToken, &dst, &rel_addr, shader_version);
 
-                shader_dump_ins_modifiers(param);
+                shader_dump_ins_modifiers(&dst);
                 TRACE(" ");
                 shader_dump_param(dst.register_type, dst.register_idx, FALSE,
                         0, dst.write_mask, dst.rel_addr, shader_version);
-- 
1.6.0.6



--------------000800030407070802080409--



More information about the wine-patches mailing list