Module: wine Branch: master Commit: 454dd2ed07453e6af23fe1e81ec5276839d86371 URL: http://source.winehq.org/git/wine.git/?a=commit;h=454dd2ed07453e6af23fe1e81e...
Author: Henri Verbeet hverbeet@codeweavers.com Date: Tue May 5 09:38:03 2009 +0200
wined3d: Implement shader_sm4_is_end().
---
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;