Henri Verbeet : wined3d: Add a frontend function to determine if there are any tokens left.

Alexandre Julliard julliard at winehq.org
Mon May 4 09:06:39 CDT 2009


Module: wine
Branch: master
Commit: 5f96c0083a0cd541589cc615e90838f2cbb99c98
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=5f96c0083a0cd541589cc615e90838f2cbb99c98

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Mon May  4 09:49:27 2009 +0200

wined3d: Add a frontend function to determine if there are any tokens left.

---

 dlls/wined3d/baseshader.c      |    8 ++++----
 dlls/wined3d/shader_sm1.c      |   14 ++++++++++++++
 dlls/wined3d/wined3d_private.h |    3 +--
 3 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/dlls/wined3d/baseshader.c b/dlls/wined3d/baseshader.c
index 9212288..b519fe5 100644
--- a/dlls/wined3d/baseshader.c
+++ b/dlls/wined3d/baseshader.c
@@ -326,7 +326,8 @@ HRESULT shader_get_registers_used(IWineD3DBaseShader *iface, const struct wined3
     reg_maps->shader_version = shader_version = *pToken++;
     pshader = shader_is_pshader_version(shader_version);
 
-    while (WINED3DVS_END() != *pToken) {
+    while (!fe->shader_is_end(&pToken))
+    {
         struct wined3d_shader_instruction ins;
         const char *comment;
         UINT param_size;
@@ -569,7 +570,6 @@ HRESULT shader_get_registers_used(IWineD3DBaseShader *iface, const struct wined3
             }
         }
     }
-    ++pToken;
     reg_maps->loop_depth = max_loop_depth;
 
     This->baseShader.functionLength = ((char *)pToken - (char *)byte_code);
@@ -870,7 +870,7 @@ void shader_generate_main(IWineD3DBaseShader *iface, SHADER_BUFFER *buffer,
         return;
     }
 
-    while (WINED3DPS_END() != *pToken)
+    while (!fe->shader_is_end(&pToken))
     {
         const char *comment;
         UINT param_size;
@@ -980,7 +980,7 @@ void shader_trace_init(const struct wined3d_shader_frontend *fe,
     TRACE("%s_%u_%u\n", shader_is_pshader_version(shader_version) ? "ps": "vs",
             WINED3DSHADER_VERSION_MAJOR(shader_version), WINED3DSHADER_VERSION_MINOR(shader_version));
 
-    while (WINED3DVS_END() != *pToken)
+    while (!fe->shader_is_end(&pToken))
     {
         struct wined3d_shader_instruction ins;
         const char *comment;
diff --git a/dlls/wined3d/shader_sm1.c b/dlls/wined3d/shader_sm1.c
index 878ba72..225f632 100644
--- a/dlls/wined3d/shader_sm1.c
+++ b/dlls/wined3d/shader_sm1.c
@@ -84,6 +84,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(d3d_shader);
 #define WINED3DSP_SRCMOD_SHIFT                  24
 #define WINED3DSP_SRCMOD_MASK                   (0xf << WINED3DSP_SRCMOD_SHIFT)
 
+#define WINED3DSP_END                           0x0000ffff
+
 enum WINED3DSHADER_ADDRESSMODE_TYPE
 {
     WINED3DSHADER_ADDRMODE_ABSOLUTE = 0 << WINED3DSHADER_ADDRESSMODE_SHIFT,
@@ -303,6 +305,17 @@ static void shader_sm1_read_comment(const DWORD **ptr, const char **comment)
     *ptr += (token & WINED3DSI_COMMENTSIZE_MASK) >> WINED3DSI_COMMENTSIZE_SHIFT;
 }
 
+static BOOL shader_sm1_is_end(const DWORD **ptr)
+{
+    if (**ptr == WINED3DSP_END)
+    {
+        ++(*ptr);
+        return TRUE;
+    }
+
+    return FALSE;
+}
+
 const struct wined3d_shader_frontend sm1_shader_frontend =
 {
     shader_sm1_read_opcode,
@@ -310,4 +323,5 @@ const struct wined3d_shader_frontend sm1_shader_frontend =
     shader_sm1_read_dst_param,
     shader_sm1_read_semantic,
     shader_sm1_read_comment,
+    shader_sm1_is_end,
 };
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 95af9fe..b22c191 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -475,8 +475,6 @@ typedef enum COMPARISON_TYPE
 #define WINED3DVS_VERSION(major, minor) (0xfffe0000 | ((major) << 8) | (minor))
 #define WINED3DSHADER_VERSION_MAJOR(version) (((version) >> 8) & 0xff)
 #define WINED3DSHADER_VERSION_MINOR(version) (((version) >> 0) & 0xff)
-#define WINED3DPS_END() 0x0000ffff
-#define WINED3DVS_END() 0x0000ffff
 
 /* Shader backends */
 
@@ -684,6 +682,7 @@ struct wined3d_shader_frontend
             struct wined3d_shader_src_param *dst_rel_addr, DWORD shader_version);
     void (*shader_read_semantic)(const DWORD **ptr, struct wined3d_shader_semantic *semantic);
     void (*shader_read_comment)(const DWORD **ptr, const char **comment);
+    BOOL (*shader_is_end)(const DWORD **ptr);
 };
 
 extern const struct wined3d_shader_frontend sm1_shader_frontend;




More information about the wine-cvs mailing list