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