Henri Verbeet : d3d10core: Add a separate function for d3d10_geometry_shader initialization.

Alexandre Julliard julliard at winehq.org
Fri Oct 30 11:04:32 CDT 2009


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

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Thu Oct 29 18:56:22 2009 +0100

d3d10core: Add a separate function for d3d10_geometry_shader initialization.

---

 dlls/d3d10core/d3d10core_private.h |    3 ++-
 dlls/d3d10core/device.c            |   10 ++++++++--
 dlls/d3d10core/shader.c            |   10 +++++++++-
 3 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/dlls/d3d10core/d3d10core_private.h b/dlls/d3d10core/d3d10core_private.h
index a698bf0..9e9d802 100644
--- a/dlls/d3d10core/d3d10core_private.h
+++ b/dlls/d3d10core/d3d10core_private.h
@@ -145,13 +145,14 @@ HRESULT d3d10_vertex_shader_init(struct d3d10_vertex_shader *shader, struct d3d1
         const void *byte_code, SIZE_T byte_code_length) DECLSPEC_HIDDEN;
 
 /* ID3D10GeometryShader */
-extern const struct ID3D10GeometryShaderVtbl d3d10_geometry_shader_vtbl DECLSPEC_HIDDEN;
 struct d3d10_geometry_shader
 {
     const struct ID3D10GeometryShaderVtbl *vtbl;
     LONG refcount;
 };
 
+HRESULT d3d10_geometry_shader_init(struct d3d10_geometry_shader *shader);
+
 /* ID3D10PixelShader */
 struct d3d10_pixel_shader
 {
diff --git a/dlls/d3d10core/device.c b/dlls/d3d10core/device.c
index 8e44bcc..4439f1f 100644
--- a/dlls/d3d10core/device.c
+++ b/dlls/d3d10core/device.c
@@ -965,6 +965,7 @@ static HRESULT STDMETHODCALLTYPE d3d10_device_CreateGeometryShader(ID3D10Device
         const void *byte_code, SIZE_T byte_code_length, ID3D10GeometryShader **shader)
 {
     struct d3d10_geometry_shader *object;
+    HRESULT hr;
 
     FIXME("iface %p, byte_code %p, byte_code_length %lu, shader %p stub!\n",
             iface, byte_code, byte_code_length, shader);
@@ -976,9 +977,14 @@ static HRESULT STDMETHODCALLTYPE d3d10_device_CreateGeometryShader(ID3D10Device
         return E_OUTOFMEMORY;
     }
 
-    object->vtbl = &d3d10_geometry_shader_vtbl;
-    object->refcount = 1;
+    hr = d3d10_geometry_shader_init(object);
+    if (FAILED(hr))
+    {
+        WARN("Failed to initialize geometry shader, hr %#x.\n", hr);
+        HeapFree(GetProcessHeap(), 0, object);
+    }
 
+    TRACE("Created geometry shader %p.\n", object);
     *shader = (ID3D10GeometryShader *)object;
 
     return S_OK;
diff --git a/dlls/d3d10core/shader.c b/dlls/d3d10core/shader.c
index bf7a6ab..e8602b5 100644
--- a/dlls/d3d10core/shader.c
+++ b/dlls/d3d10core/shader.c
@@ -352,7 +352,7 @@ static HRESULT STDMETHODCALLTYPE d3d10_geometry_shader_SetPrivateDataInterface(I
     return E_NOTIMPL;
 }
 
-const struct ID3D10GeometryShaderVtbl d3d10_geometry_shader_vtbl =
+static const struct ID3D10GeometryShaderVtbl d3d10_geometry_shader_vtbl =
 {
     /* IUnknown methods */
     d3d10_geometry_shader_QueryInterface,
@@ -365,6 +365,14 @@ const struct ID3D10GeometryShaderVtbl d3d10_geometry_shader_vtbl =
     d3d10_geometry_shader_SetPrivateDataInterface,
 };
 
+HRESULT d3d10_geometry_shader_init(struct d3d10_geometry_shader *shader)
+{
+    shader->vtbl = &d3d10_geometry_shader_vtbl;
+    shader->refcount = 1;
+
+    return S_OK;
+}
+
 /* IUnknown methods */
 
 static HRESULT STDMETHODCALLTYPE d3d10_pixel_shader_QueryInterface(ID3D10PixelShader *iface,




More information about the wine-cvs mailing list