Module: wine Branch: master Commit: 033eb8d7cf613818c7cddd072ccb6fc7371014d7 URL: http://source.winehq.org/git/wine.git/?a=commit;h=033eb8d7cf613818c7cddd072c...
Author: Rico Schüller kgbricola@web.de Date: Thu Aug 20 19:02:11 2009 +0200
d3d10: Add annotation skipping.
---
dlls/d3d10/d3d10_private.h | 4 ++++ dlls/d3d10/effect.c | 34 ++++++++++++++++++++++++++++++---- 2 files changed, 34 insertions(+), 4 deletions(-)
diff --git a/dlls/d3d10/d3d10_private.h b/dlls/d3d10/d3d10_private.h index 60f2aa0..1624c50 100644 --- a/dlls/d3d10/d3d10_private.h +++ b/dlls/d3d10/d3d10_private.h @@ -65,6 +65,7 @@ struct d3d10_effect_variable
char *name; DWORD buffer_offset; + DWORD annotation_count; };
struct d3d10_effect_local_buffer @@ -72,6 +73,7 @@ struct d3d10_effect_local_buffer char *name; DWORD data_size; DWORD variable_count; + DWORD annotation_count; struct d3d10_effect_variable *variables; };
@@ -84,6 +86,7 @@ struct d3d10_effect_pass char *name; DWORD start; DWORD object_count; + DWORD annotation_count; struct d3d10_effect_object *objects; };
@@ -95,6 +98,7 @@ struct d3d10_effect_technique struct d3d10_effect *effect; char *name; DWORD pass_count; + DWORD annotation_count; struct d3d10_effect_pass *passes; };
diff --git a/dlls/d3d10/effect.c b/dlls/d3d10/effect.c index 37d2dcb..513dad9 100644 --- a/dlls/d3d10/effect.c +++ b/dlls/d3d10/effect.c @@ -249,6 +249,11 @@ static HRESULT parse_shader(struct d3d10_effect_object *o, const char *data) return parse_dxbc(ptr, dxbc_size, shader_chunk_handler, s); }
+static void parse_fx10_annotation(const char **ptr) +{ + skip_dword_unknown(ptr, 3); +} + static HRESULT parse_fx10_object(struct d3d10_effect_object *o, const char **ptr, const char *data) { const char *data_ptr; @@ -325,7 +330,11 @@ static HRESULT parse_fx10_pass(struct d3d10_effect_pass *p, const char **ptr, co read_dword(ptr, &p->object_count); TRACE("Pass has %u effect objects.\n", p->object_count);
- skip_dword_unknown(ptr, 1); + read_dword(ptr, &p->annotation_count); + for(i = 0; i < p->annotation_count; ++i) + { + parse_fx10_annotation(ptr); + }
p->objects = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, p->object_count * sizeof(*p->objects)); if (!p->objects) @@ -366,7 +375,11 @@ static HRESULT parse_fx10_technique(struct d3d10_effect_technique *t, const char read_dword(ptr, &t->pass_count); TRACE("Technique has %u passes\n", t->pass_count);
- skip_dword_unknown(ptr, 1); + read_dword(ptr, &t->annotation_count); + for(i = 0; i < t->annotation_count; ++i) + { + parse_fx10_annotation(ptr); + }
t->passes = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, t->pass_count * sizeof(*t->passes)); if (!t->passes) @@ -393,6 +406,7 @@ static HRESULT parse_fx10_technique(struct d3d10_effect_technique *t, const char static HRESULT parse_fx10_variable(struct d3d10_effect_variable *v, const char **ptr, const char *data) { DWORD offset; + unsigned int i;
read_dword(ptr, &offset); TRACE("Variable name at offset %#x.\n", offset); @@ -413,7 +427,13 @@ static HRESULT parse_fx10_variable(struct d3d10_effect_variable *v, const char * read_dword(ptr, &v->buffer_offset); TRACE("Variable offset in buffer: %#x.\n", v->buffer_offset);
- skip_dword_unknown(ptr, 3); + skip_dword_unknown(ptr, 2); + + read_dword(ptr, &v->annotation_count); + for(i = 0; i < v->annotation_count; ++i) + { + parse_fx10_annotation(ptr); + }
return S_OK; } @@ -442,7 +462,13 @@ static HRESULT parse_fx10_local_buffer(struct d3d10_effect_local_buffer *l, cons read_dword(ptr, &l->variable_count); TRACE("Local buffer variable count: %#x.\n", l->variable_count);
- skip_dword_unknown(ptr, 2); + skip_dword_unknown(ptr, 1); + + read_dword(ptr, &l->annotation_count); + for(i = 0; i < l->annotation_count; ++i) + { + parse_fx10_annotation(ptr); + }
l->variables = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, l->variable_count * sizeof(*l->variables)); if (!l->variables)