wined3d: Implement shader_sm4_is_end().

Henri Verbeet hverbeet at codeweavers.com
Tue May 5 02:38:03 CDT 2009


---
 dlls/wined3d/baseshader.c      |   12 ++++++------
 dlls/wined3d/shader_sm1.c      |    4 ++--
 dlls/wined3d/shader_sm4.c      |   15 +++++++++------
 dlls/wined3d/wined3d_private.h |    4 ++--
 4 files changed, 19 insertions(+), 16 deletions(-)

diff --git a/dlls/wined3d/baseshader.c b/dlls/wined3d/baseshader.c
index b8918be..4c2905a 100644
--- a/dlls/wined3d/baseshader.c
+++ b/dlls/wined3d/baseshader.c
@@ -334,11 +334,11 @@ HRESULT shader_get_registers_used(IWineD3DBaseShader *iface, const struct wined3
     shader_delete_constant_list(&This->baseShader.constantsB);
     shader_delete_constant_list(&This->baseShader.constantsI);
 
-    fe->shader_read_header(&pToken, &shader_version);
+    fe->shader_read_header(fe_data, &pToken, &shader_version);
     reg_maps->shader_version = shader_version;
     pshader = shader_is_pshader_version(shader_version);
 
-    while (!fe->shader_is_end(&pToken))
+    while (!fe->shader_is_end(fe_data, &pToken))
     {
         struct wined3d_shader_instruction ins;
         const char *comment;
@@ -876,9 +876,9 @@ void shader_generate_main(IWineD3DBaseShader *iface, SHADER_BUFFER *buffer,
     ins.src = src_param;
     This->baseShader.parse_state.current_row = 0;
 
-    fe->shader_read_header(&pToken, &shader_version);
+    fe->shader_read_header(fe_data, &pToken, &shader_version);
 
-    while (!fe->shader_is_end(&pToken))
+    while (!fe->shader_is_end(fe_data, &pToken))
     {
         const char *comment;
         UINT param_size;
@@ -977,12 +977,12 @@ void shader_trace_init(const struct wined3d_shader_frontend *fe, void *fe_data,
 
     TRACE("Parsing %p\n", pFunction);
 
-    fe->shader_read_header(&pToken, &shader_version);
+    fe->shader_read_header(fe_data, &pToken, &shader_version);
 
     TRACE("%s_%u_%u\n", shader_is_pshader_version(shader_version) ? "ps": "vs",
             WINED3DSHADER_VERSION_MAJOR(shader_version), WINED3DSHADER_VERSION_MINOR(shader_version));
 
-    while (!fe->shader_is_end(&pToken))
+    while (!fe->shader_is_end(fe_data, &pToken))
     {
         struct wined3d_shader_instruction ins;
         const char *comment;
diff --git a/dlls/wined3d/shader_sm1.c b/dlls/wined3d/shader_sm1.c
index 3d678d7..a353f48 100644
--- a/dlls/wined3d/shader_sm1.c
+++ b/dlls/wined3d/shader_sm1.c
@@ -434,7 +434,7 @@ static void shader_sm1_free(void *data)
     HeapFree(GetProcessHeap(), 0, data);
 }
 
-static void shader_sm1_read_header(const DWORD **ptr, DWORD *shader_version)
+static void shader_sm1_read_header(void *data, const DWORD **ptr, DWORD *shader_version)
 {
     TRACE("version: 0x%08x\n", **ptr);
     *shader_version = *(*ptr)++;
@@ -525,7 +525,7 @@ 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)
+static BOOL shader_sm1_is_end(void *data, const DWORD **ptr)
 {
     if (**ptr == WINED3DSP_END)
     {
diff --git a/dlls/wined3d/shader_sm4.c b/dlls/wined3d/shader_sm4.c
index 33b8f9d..99b6523 100644
--- a/dlls/wined3d/shader_sm4.c
+++ b/dlls/wined3d/shader_sm4.c
@@ -30,7 +30,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(d3d_shader);
 
 struct wined3d_sm4_data
 {
-    /* We don't store a lot in here yet. */
+    const DWORD *end;
 };
 
 static void *shader_sm4_init(const DWORD *byte_code)
@@ -50,12 +50,15 @@ static void shader_sm4_free(void *data)
     HeapFree(GetProcessHeap(), 0, data);
 }
 
-static void shader_sm4_read_header(const DWORD **ptr, DWORD *shader_version)
+static void shader_sm4_read_header(void *data, const DWORD **ptr, DWORD *shader_version)
 {
+    struct wined3d_sm4_data *priv = data;
+    priv->end = *ptr;
+
     TRACE("version: 0x%08x\n", **ptr);
     *shader_version = *(*ptr)++;
     TRACE("token count: %u\n", **ptr);
-    ++(*ptr);
+    priv->end += *(*ptr)++;
 }
 
 static void shader_sm4_read_opcode(void *data, const DWORD **ptr, struct wined3d_shader_instruction *ins,
@@ -100,10 +103,10 @@ static void shader_sm4_read_comment(const DWORD **ptr, const char **comment)
     *comment = NULL;
 }
 
-static BOOL shader_sm4_is_end(const DWORD **ptr)
+static BOOL shader_sm4_is_end(void *data, const DWORD **ptr)
 {
-    FIXME("ptr %p stub!\n", ptr);
-    return TRUE;
+    struct wined3d_sm4_data *priv = data;
+    return *ptr == priv->end;
 }
 
 const struct wined3d_shader_frontend sm4_shader_frontend =
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 1bee62e..f1efce8 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -672,7 +672,7 @@ struct wined3d_shader_frontend
 {
     void *(*shader_init)(const DWORD *ptr);
     void (*shader_free)(void *data);
-    void (*shader_read_header)(const DWORD **ptr, DWORD *shader_version);
+    void (*shader_read_header)(void *data, const DWORD **ptr, DWORD *shader_version);
     void (*shader_read_opcode)(void *data, const DWORD **ptr, struct wined3d_shader_instruction *ins,
             UINT *param_size, DWORD shader_version);
     void (*shader_read_src_param)(const DWORD **ptr, struct wined3d_shader_src_param *src_param,
@@ -681,7 +681,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);
+    BOOL (*shader_is_end)(void *data, const DWORD **ptr);
 };
 
 extern const struct wined3d_shader_frontend sm1_shader_frontend;
-- 
1.6.0.6



--------------080805070500050809030508--



More information about the wine-patches mailing list