Henri Verbeet : d3d10: Merge parse_fx10_technique() and parse_fx10_technique_index().
Alexandre Julliard
julliard at winehq.org
Tue Jul 14 10:37:36 CDT 2009
Module: wine
Branch: master
Commit: c481e0a7d447cd0643f789054337e9080409a9df
URL: http://source.winehq.org/git/wine.git/?a=commit;h=c481e0a7d447cd0643f789054337e9080409a9df
Author: Henri Verbeet <hverbeet at codeweavers.com>
Date: Tue Jul 14 11:17:40 2009 +0200
d3d10: Merge parse_fx10_technique() and parse_fx10_technique_index().
---
dlls/d3d10/d3d10_private.h | 1 -
dlls/d3d10/effect.c | 82 ++++++++++++++++----------------------------
2 files changed, 30 insertions(+), 53 deletions(-)
diff --git a/dlls/d3d10/d3d10_private.h b/dlls/d3d10/d3d10_private.h
index 400ea73..8bf9a8b 100644
--- a/dlls/d3d10/d3d10_private.h
+++ b/dlls/d3d10/d3d10_private.h
@@ -84,7 +84,6 @@ struct d3d10_effect_technique
struct d3d10_effect *effect;
char *name;
- DWORD start;
DWORD pass_count;
struct d3d10_effect_pass *passes;
};
diff --git a/dlls/d3d10/effect.c b/dlls/d3d10/effect.c
index 31ef070..1a7c7b9 100644
--- a/dlls/d3d10/effect.c
+++ b/dlls/d3d10/effect.c
@@ -161,40 +161,6 @@ static HRESULT parse_fx10_pass_index(struct d3d10_effect_pass *p, const char **p
return S_OK;
}
-static HRESULT parse_fx10_technique_index(struct d3d10_effect_technique *t, const char **ptr)
-{
- HRESULT hr = S_OK;
- unsigned int i;
-
- read_dword(ptr, &t->start);
- TRACE("Technique starts at offset %#x\n", t->start);
-
- read_dword(ptr, &t->pass_count);
- TRACE("Technique has %u passes\n", t->pass_count);
-
- skip_dword_unknown(ptr, 1);
-
- t->passes = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, t->pass_count * sizeof(*t->passes));
- if (!t->passes)
- {
- ERR("Failed to allocate passes memory\n");
- return E_OUTOFMEMORY;
- }
-
- for (i = 0; i < t->pass_count; ++i)
- {
- struct d3d10_effect_pass *p = &t->passes[i];
-
- p->vtbl = &d3d10_effect_pass_vtbl;
- p->technique = t;
-
- hr = parse_fx10_pass_index(p, ptr);
- if (FAILED(hr)) break;
- }
-
- return hr;
-}
-
static char *copy_name(const char *ptr)
{
size_t name_len;
@@ -398,35 +364,50 @@ static HRESULT parse_fx10_pass(struct d3d10_effect_pass *p, const char *data)
return hr;
}
-static HRESULT parse_fx10_technique(struct d3d10_effect_technique *t, const char *data)
+static HRESULT parse_fx10_technique(struct d3d10_effect_technique *t, const char **ptr, const char *data)
{
- HRESULT hr = S_OK;
- const char *ptr;
- size_t name_len;
unsigned int i;
+ DWORD offset;
- ptr = data + t->start;
+ read_dword(ptr, &offset);
+ TRACE("Technique name at offset %#x.\n", offset);
- name_len = strlen(ptr) + 1;
- t->name = HeapAlloc(GetProcessHeap(), 0, name_len);
+ t->name = copy_name(data + offset);
if (!t->name)
{
- ERR("Failed to allocate name memory\n");
+ ERR("Failed to copy name.\n");
return E_OUTOFMEMORY;
}
+ TRACE("Technique name: %s.\n", t->name);
- memcpy(t->name, ptr, name_len);
- ptr += name_len;
+ read_dword(ptr, &t->pass_count);
+ TRACE("Technique has %u passes\n", t->pass_count);
+
+ skip_dword_unknown(ptr, 1);
- TRACE("technique name: %s\n", t->name);
+ t->passes = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, t->pass_count * sizeof(*t->passes));
+ if (!t->passes)
+ {
+ ERR("Failed to allocate passes memory\n");
+ return E_OUTOFMEMORY;
+ }
for (i = 0; i < t->pass_count; ++i)
{
- hr = parse_fx10_pass(&t->passes[i], data);
- if (FAILED(hr)) break;
+ struct d3d10_effect_pass *p = &t->passes[i];
+ HRESULT hr;
+
+ p->vtbl = &d3d10_effect_pass_vtbl;
+ p->technique = t;
+
+ hr = parse_fx10_pass_index(p, ptr);
+ if (FAILED(hr)) return hr;
+
+ hr = parse_fx10_pass(p, data);
+ if (FAILED(hr)) return hr;
}
- return hr;
+ return S_OK;
}
static HRESULT parse_fx10_local_buffer(struct d3d10_effect_local_buffer *l, const char **ptr, const char *data)
@@ -498,10 +479,7 @@ static HRESULT parse_fx10_body(struct d3d10_effect *e, const char *data, DWORD d
t->vtbl = &d3d10_effect_technique_vtbl;
t->effect = e;
- hr = parse_fx10_technique_index(t, &ptr);
- if (FAILED(hr)) return hr;
-
- hr = parse_fx10_technique(t, data);
+ hr = parse_fx10_technique(t, &ptr, data);
if (FAILED(hr)) return hr;
}
More information about the wine-cvs
mailing list