Michael Stefaniuc : d3d10: COM cleanup for the ID3D10EffectType iface.

Alexandre Julliard julliard at winehq.org
Thu Jun 2 11:22:59 CDT 2011


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

Author: Michael Stefaniuc <mstefani at redhat.de>
Date:   Thu Jun  2 11:19:38 2011 +0200

d3d10: COM cleanup for the ID3D10EffectType iface.

---

 dlls/d3d10/d3d10_private.h |    2 +-
 dlls/d3d10/effect.c        |   61 ++++++++++++++++++++++++-------------------
 2 files changed, 35 insertions(+), 28 deletions(-)

diff --git a/dlls/d3d10/d3d10_private.h b/dlls/d3d10/d3d10_private.h
index 20871ae..5cf1a24 100644
--- a/dlls/d3d10/d3d10_private.h
+++ b/dlls/d3d10/d3d10_private.h
@@ -93,7 +93,7 @@ struct d3d10_effect_shader_variable
 /* ID3D10EffectType */
 struct d3d10_effect_type
 {
-    const struct ID3D10EffectTypeVtbl *vtbl;
+    ID3D10EffectType ID3D10EffectType_iface;
 
     char *name;
     D3D10_SHADER_VARIABLE_TYPE basetype;
diff --git a/dlls/d3d10/effect.c b/dlls/d3d10/effect.c
index a51d6c3..81384af 100644
--- a/dlls/d3d10/effect.c
+++ b/dlls/d3d10/effect.c
@@ -60,7 +60,7 @@ static const struct ID3D10EffectTypeVtbl d3d10_effect_type_vtbl;
 /* null objects - needed for invalid calls */
 static struct d3d10_effect_technique null_technique = {&d3d10_effect_technique_vtbl};
 static struct d3d10_effect_pass null_pass = {&d3d10_effect_pass_vtbl};
-static struct d3d10_effect_type null_type = {&d3d10_effect_type_vtbl};
+static struct d3d10_effect_type null_type = {{&d3d10_effect_type_vtbl}};
 static struct d3d10_effect_variable null_local_buffer = {(const ID3D10EffectVariableVtbl *)&d3d10_effect_constant_buffer_vtbl,
         &null_local_buffer, &null_type};
 static struct d3d10_effect_variable null_variable = {&d3d10_effect_variable_vtbl,
@@ -95,12 +95,12 @@ static char anonymous_name[] = "$Anonymous";
 static char anonymous_vertexshader_name[] = "vertexshader";
 static char anonymous_pixelshader_name[] = "pixelshader";
 static char anonymous_geometryshader_name[] = "geometryshader";
-static struct d3d10_effect_type anonymous_vs_type = {&d3d10_effect_type_vtbl, anonymous_vertexshader_name,
-        D3D10_SVT_VERTEXSHADER, D3D10_SVC_OBJECT};
-static struct d3d10_effect_type anonymous_ps_type = {&d3d10_effect_type_vtbl, anonymous_pixelshader_name,
-        D3D10_SVT_PIXELSHADER, D3D10_SVC_OBJECT};
-static struct d3d10_effect_type anonymous_gs_type = {&d3d10_effect_type_vtbl, anonymous_geometryshader_name,
-        D3D10_SVT_GEOMETRYSHADER, D3D10_SVC_OBJECT};
+static struct d3d10_effect_type anonymous_vs_type = {{&d3d10_effect_type_vtbl},
+        anonymous_vertexshader_name, D3D10_SVT_VERTEXSHADER, D3D10_SVC_OBJECT};
+static struct d3d10_effect_type anonymous_ps_type = {{&d3d10_effect_type_vtbl},
+        anonymous_pixelshader_name, D3D10_SVT_PIXELSHADER, D3D10_SVC_OBJECT};
+static struct d3d10_effect_type anonymous_gs_type = {{&d3d10_effect_type_vtbl},
+        anonymous_geometryshader_name, D3D10_SVT_GEOMETRYSHADER, D3D10_SVC_OBJECT};
 static struct d3d10_effect_variable anonymous_vs = {(const ID3D10EffectVariableVtbl *)&d3d10_effect_shader_variable_vtbl,
         &null_local_buffer, &anonymous_vs_type, &null_shader_variable, anonymous_name};
 static struct d3d10_effect_variable anonymous_ps = {(const ID3D10EffectVariableVtbl *)&d3d10_effect_shader_variable_vtbl,
@@ -524,7 +524,7 @@ static HRESULT parse_fx10_type(struct d3d10_effect_type *t, const char *ptr, con
         }
 
         /* create a copy of the original type with some minor changes */
-        t->elementtype->vtbl = &d3d10_effect_type_vtbl;
+        t->elementtype->ID3D10EffectType_iface.lpVtbl = &d3d10_effect_type_vtbl;
         t->elementtype->effect = t->effect;
 
         if (!copy_name(t->name, &t->elementtype->name))
@@ -591,7 +591,7 @@ static struct d3d10_effect_type *get_fx10_type(struct d3d10_effect *effect, cons
         return NULL;
     }
 
-    type->vtbl = &d3d10_effect_type_vtbl;
+    type->ID3D10EffectType_iface.lpVtbl = &d3d10_effect_type_vtbl;
     type->id = offset;
     type->effect = effect;
     hr = parse_fx10_type(type, data + offset, data);
@@ -867,7 +867,7 @@ static HRESULT parse_fx10_anonymous_shader(struct d3d10_effect *e, struct d3d10_
 
     t->type_class = D3D10_SVC_OBJECT;
 
-    t->vtbl = &d3d10_effect_type_vtbl;
+    t->ID3D10EffectType_iface.lpVtbl = &d3d10_effect_type_vtbl;
 
     v->type = t;
     v->effect = e;
@@ -1315,7 +1315,7 @@ static HRESULT parse_fx10_local_buffer(struct d3d10_effect_variable *l, const ch
         ERR("Failed to allocate local buffer type memory.\n");
         return E_OUTOFMEMORY;
     }
-    l->type->vtbl = &d3d10_effect_type_vtbl;
+    l->type->ID3D10EffectType_iface.lpVtbl = &d3d10_effect_type_vtbl;
     l->type->type_class = D3D10_SVC_OBJECT;
     l->type->effect = l->effect;
 
@@ -2673,7 +2673,7 @@ static struct ID3D10EffectType * STDMETHODCALLTYPE d3d10_effect_variable_GetType
 
     TRACE("iface %p\n", iface);
 
-    return (ID3D10EffectType *)This->type;
+    return &This->type->ID3D10EffectType_iface;
 }
 
 static HRESULT STDMETHODCALLTYPE d3d10_effect_variable_GetDesc(ID3D10EffectVariable *iface,
@@ -6187,16 +6187,23 @@ static const struct ID3D10EffectSamplerVariableVtbl d3d10_effect_sampler_variabl
 
 /* ID3D10EffectType methods */
 
+static inline struct d3d10_effect_type *impl_from_ID3D10EffectType(ID3D10EffectType *iface)
+{
+    return CONTAINING_RECORD(iface, struct d3d10_effect_type, ID3D10EffectType_iface);
+}
+
 static BOOL STDMETHODCALLTYPE d3d10_effect_type_IsValid(ID3D10EffectType *iface)
 {
+    struct d3d10_effect_type *This = impl_from_ID3D10EffectType(iface);
+
     TRACE("iface %p\n", iface);
 
-    return (struct d3d10_effect_type *)iface != &null_type;
+    return This != &null_type;
 }
 
 static HRESULT STDMETHODCALLTYPE d3d10_effect_type_GetDesc(ID3D10EffectType *iface, D3D10_EFFECT_TYPE_DESC *desc)
 {
-    struct d3d10_effect_type *This = (struct d3d10_effect_type *)iface;
+    struct d3d10_effect_type *This = impl_from_ID3D10EffectType(iface);
 
     TRACE("iface %p, desc %p\n", iface, desc);
 
@@ -6229,7 +6236,7 @@ static HRESULT STDMETHODCALLTYPE d3d10_effect_type_GetDesc(ID3D10EffectType *ifa
 static struct ID3D10EffectType * STDMETHODCALLTYPE d3d10_effect_type_GetMemberTypeByIndex(ID3D10EffectType *iface,
         UINT index)
 {
-    struct d3d10_effect_type *This = (struct d3d10_effect_type *)iface;
+    struct d3d10_effect_type *This = impl_from_ID3D10EffectType(iface);
     struct d3d10_effect_type *t;
 
     TRACE("iface %p, index %u\n", iface, index);
@@ -6237,20 +6244,20 @@ static struct ID3D10EffectType * STDMETHODCALLTYPE d3d10_effect_type_GetMemberTy
     if (index >= This->member_count)
     {
         WARN("Invalid index specified\n");
-        return (ID3D10EffectType *)&null_type;
+        return &null_type.ID3D10EffectType_iface;
     }
 
     t = (&This->members[index])->type;
 
     TRACE("Returning member %p, %s\n", t, debugstr_a(t->name));
 
-    return (ID3D10EffectType *)t;
+    return &t->ID3D10EffectType_iface;
 }
 
 static struct ID3D10EffectType * STDMETHODCALLTYPE d3d10_effect_type_GetMemberTypeByName(ID3D10EffectType *iface,
         LPCSTR name)
 {
-    struct d3d10_effect_type *This = (struct d3d10_effect_type *)iface;
+    struct d3d10_effect_type *This = impl_from_ID3D10EffectType(iface);
     unsigned int i;
 
     TRACE("iface %p, name %s\n", iface, debugstr_a(name));
@@ -6258,7 +6265,7 @@ static struct ID3D10EffectType * STDMETHODCALLTYPE d3d10_effect_type_GetMemberTy
     if (!name)
     {
         WARN("Invalid name specified\n");
-        return (ID3D10EffectType *)&null_type;
+        return &null_type.ID3D10EffectType_iface;
     }
 
     for (i = 0; i < This->member_count; ++i)
@@ -6270,20 +6277,20 @@ static struct ID3D10EffectType * STDMETHODCALLTYPE d3d10_effect_type_GetMemberTy
             if (!strcmp(typem->name, name))
             {
                 TRACE("Returning type %p.\n", typem->type);
-                return (ID3D10EffectType *)typem->type;
+                return &typem->type->ID3D10EffectType_iface;
             }
         }
     }
 
     WARN("Invalid name specified\n");
 
-    return (ID3D10EffectType *)&null_type;
+    return &null_type.ID3D10EffectType_iface;
 }
 
 static struct ID3D10EffectType * STDMETHODCALLTYPE d3d10_effect_type_GetMemberTypeBySemantic(ID3D10EffectType *iface,
         LPCSTR semantic)
 {
-    struct d3d10_effect_type *This = (struct d3d10_effect_type *)iface;
+    struct d3d10_effect_type *This = impl_from_ID3D10EffectType(iface);
     unsigned int i;
 
     TRACE("iface %p, semantic %s\n", iface, debugstr_a(semantic));
@@ -6291,7 +6298,7 @@ static struct ID3D10EffectType * STDMETHODCALLTYPE d3d10_effect_type_GetMemberTy
     if (!semantic)
     {
         WARN("Invalid semantic specified\n");
-        return (ID3D10EffectType *)&null_type;
+        return &null_type.ID3D10EffectType_iface;
     }
 
     for (i = 0; i < This->member_count; ++i)
@@ -6303,19 +6310,19 @@ static struct ID3D10EffectType * STDMETHODCALLTYPE d3d10_effect_type_GetMemberTy
             if (!strcmp(typem->semantic, semantic))
             {
                 TRACE("Returning type %p.\n", typem->type);
-                return (ID3D10EffectType *)typem->type;
+                return &typem->type->ID3D10EffectType_iface;
             }
         }
     }
 
     WARN("Invalid semantic specified\n");
 
-    return (ID3D10EffectType *)&null_type;
+    return &null_type.ID3D10EffectType_iface;
 }
 
 static LPCSTR STDMETHODCALLTYPE d3d10_effect_type_GetMemberName(ID3D10EffectType *iface, UINT index)
 {
-    struct d3d10_effect_type *This = (struct d3d10_effect_type *)iface;
+    struct d3d10_effect_type *This = impl_from_ID3D10EffectType(iface);
     struct d3d10_effect_type_member *typem;
 
     TRACE("iface %p, index %u\n", iface, index);
@@ -6335,7 +6342,7 @@ static LPCSTR STDMETHODCALLTYPE d3d10_effect_type_GetMemberName(ID3D10EffectType
 
 static LPCSTR STDMETHODCALLTYPE d3d10_effect_type_GetMemberSemantic(ID3D10EffectType *iface, UINT index)
 {
-    struct d3d10_effect_type *This = (struct d3d10_effect_type *)iface;
+    struct d3d10_effect_type *This = impl_from_ID3D10EffectType(iface);
     struct d3d10_effect_type_member *typem;
 
     TRACE("iface %p, index %u\n", iface, index);




More information about the wine-cvs mailing list