Ivan Gyurdiev : wined3d: Share get_opcode.

Alexandre Julliard julliard at wine.codeweavers.com
Tue May 9 14:15:33 CDT 2006


Module: wine
Branch: refs/heads/master
Commit: 1d0c67239311d5b3cca4a49175b627d22e66c700
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=1d0c67239311d5b3cca4a49175b627d22e66c700

Author: Ivan Gyurdiev <ivg2 at cornell.edu>
Date:   Tue May  9 07:57:36 2006 -0400

wined3d: Share get_opcode.

---

 dlls/wined3d/baseshader.c      |   24 ++++++++++++++++++++++++
 dlls/wined3d/pixelshader.c     |   25 +++----------------------
 dlls/wined3d/vertexshader.c    |   23 ++++-------------------
 dlls/wined3d/wined3d_private.h |    4 ++++
 4 files changed, 35 insertions(+), 41 deletions(-)

diff --git a/dlls/wined3d/baseshader.c b/dlls/wined3d/baseshader.c
index 5b39e9a..7f34bfd 100644
--- a/dlls/wined3d/baseshader.c
+++ b/dlls/wined3d/baseshader.c
@@ -54,4 +54,28 @@ int shader_addline(
     return 0;
 }
 
+const SHADER_OPCODE* shader_get_opcode(
+    IWineD3DBaseShader *iface, const DWORD code) {
+
+    IWineD3DBaseShaderImpl *This = (IWineD3DBaseShaderImpl*) iface;
+
+    DWORD i = 0;
+    DWORD version = This->baseShader.version;
+    DWORD hex_version = This->baseShader.hex_version;
+    const SHADER_OPCODE *shader_ins = This->baseShader.shader_ins;
+
+    /** TODO: use dichotomic search */
+    while (NULL != shader_ins[i].name) {
+        if (((code & D3DSI_OPCODE_MASK) == shader_ins[i].opcode) &&
+            (((hex_version >= shader_ins[i].min_version) && (hex_version <= shader_ins[i].max_version)) ||
+            ((shader_ins[i].min_version == 0) && (shader_ins[i].max_version == 0)))) {
+            return &shader_ins[i];
+        }
+        ++i;
+    }
+    FIXME("Unsupported opcode %lx(%ld) masked %lx version %ld\n", 
+       code, code, code & D3DSI_OPCODE_MASK, version);
+    return NULL;
+}
+
 /* TODO: Move other shared code here */
diff --git a/dlls/wined3d/pixelshader.c b/dlls/wined3d/pixelshader.c
index f52c98c..4265f0c 100644
--- a/dlls/wined3d/pixelshader.c
+++ b/dlls/wined3d/pixelshader.c
@@ -719,25 +719,6 @@ CONST SHADER_OPCODE IWineD3DPixelShaderI
     {0,               NULL,       NULL,   0, NULL,            0, 0}
 };
 
-inline static const SHADER_OPCODE* pshader_program_get_opcode(IWineD3DPixelShaderImpl *This, const DWORD code) {
-    DWORD i = 0;
-    DWORD version = This->baseShader.version;
-    DWORD hex_version = D3DPS_VERSION(version/10, version%10);
-    const SHADER_OPCODE *shader_ins = This->baseShader.shader_ins;
-
-    /** TODO: use dichotomic search */
-    while (NULL != shader_ins[i].name) {
-        if (((code & D3DSI_OPCODE_MASK) == shader_ins[i].opcode) &&
-            (((hex_version >= shader_ins[i].min_version) && (hex_version <= shader_ins[i].max_version)) ||
-            ((shader_ins[i].min_version == 0) && (shader_ins[i].max_version == 0)))) {
-            return &shader_ins[i];
-        }
-        ++i;
-    }
-    FIXME("Unsupported opcode %lx(%ld) masked %lx version %ld\n", code, code, code & D3DSI_OPCODE_MASK, version);
-    return NULL;
-}
-
 inline static BOOL pshader_is_version_token(DWORD token) {
     return 0xFFFF0000 == (token & 0xFFFF0000);
 }
@@ -945,7 +926,7 @@ inline static void pshader_program_get_r
         }
 
         /* Fetch opcode */       
-        curOpcode = pshader_program_get_opcode(This, *pToken);
+        curOpcode = shader_get_opcode((IWineD3DBaseShader*) This, *pToken);
         ++pToken;
 
         /* Skip declarations (for now) */
@@ -1134,7 +1115,7 @@ #if 0 /* Not sure what these are here fo
             code = *pToken;
 #endif
             pInstr = pToken;
-            curOpcode = pshader_program_get_opcode(This, *pToken);
+            curOpcode = shader_get_opcode((IWineD3DBaseShader*) This, *pToken);
             ++pToken;
             if (NULL == curOpcode) {
                 /* unknown current opcode ... (shouldn't be any!) */
@@ -1779,7 +1760,7 @@ HRESULT WINAPI IWineD3DPixelShaderImpl_S
             if (!This->baseShader.version) {
                 WARN("(%p) : pixel shader doesn't have a valid version identifier\n", This);
             }
-            curOpcode = pshader_program_get_opcode(This, *pToken);
+            curOpcode = shader_get_opcode((IWineD3DBaseShader*) This, *pToken);
             ++pToken;
             ++len;
             if (NULL == curOpcode) {
diff --git a/dlls/wined3d/vertexshader.c b/dlls/wined3d/vertexshader.c
index 382700b..56d322a 100644
--- a/dlls/wined3d/vertexshader.c
+++ b/dlls/wined3d/vertexshader.c
@@ -554,21 +554,6 @@ CONST SHADER_OPCODE IWineD3DVertexShader
     {0,               NULL,       NULL,   0, NULL,            0, 0}
 };
 
-inline static const SHADER_OPCODE* vshader_program_get_opcode(IWineD3DVertexShaderImpl *This, const DWORD code) {
-    DWORD i = 0;
-    const SHADER_OPCODE *shader_ins = This->baseShader.shader_ins;
-
-    /** TODO: use dichotomic search or hash table */
-    while (NULL != shader_ins[i].name) {
-        if ((code & D3DSI_OPCODE_MASK) == shader_ins[i].opcode) {
-            return &shader_ins[i];
-        }
-        ++i;
-    }
-    FIXME("Unsupported opcode %lx\n",code);
-    return NULL;
-}
-
 inline static void vshader_program_dump_vs_param(const DWORD param, int input) {
   static const char* rastout_reg_names[] = { "oPos", "oFog", "oPts" };
   static const char swizzle_reg_chars[] = "xyzw";
@@ -1147,7 +1132,7 @@ #endif
                 pToken += comment_len;
                 continue;
             }
-            curOpcode = vshader_program_get_opcode(This, *pToken);
+            curOpcode = shader_get_opcode((IWineD3DBaseShader*) This, *pToken);
             ++pToken;
             /* TODO: dcl's */
             /* TODO: Consts */
@@ -1274,7 +1259,7 @@ #endif
             continue;
       }
 
-      curOpcode = vshader_program_get_opcode(This, *pToken);
+      curOpcode = shader_get_opcode((IWineD3DBaseShader*) This, *pToken);
       ++pToken;
       if (NULL == curOpcode) {
         /* unknown current opcode ... (shouldn't be any!) */
@@ -1557,7 +1542,7 @@ #endif
             pToken += comment_len;
             continue ;
         }
-        curOpcode = vshader_program_get_opcode(This, *pToken);
+        curOpcode = shader_get_opcode((IWineD3DBaseShader*) This, *pToken);
         ++pToken;
         if (NULL == curOpcode) {
             i = 0;
@@ -1907,7 +1892,7 @@ HRESULT WINAPI IWineD3DVertexShaderImpl_
                 len += comment_len + 1;
                 continue;
             }
-            curOpcode = vshader_program_get_opcode(This, *pToken);
+            curOpcode = shader_get_opcode((IWineD3DBaseShader*) This, *pToken);
             ++pToken;
             ++len;
             if (NULL == curOpcode) {
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index de303c5..238d5ac 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -1220,6 +1220,10 @@ extern int shader_addline(
     SHADER_BUFFER* buffer,
     const char* fmt, ...);
 
+extern const SHADER_OPCODE* shader_get_opcode(
+    IWineD3DBaseShader *iface, 
+    const DWORD code);
+
 /*****************************************************************************
  * IDirect3DBaseShader implementation structure
  */




More information about the wine-cvs mailing list