Module: wine Branch: master Commit: 39d6f64885cc46143ed6b043f0657f7c3852483a URL: http://source.winehq.org/git/wine.git/?a=commit;h=39d6f64885cc46143ed6b043f0...
Author: Henri Verbeet hverbeet@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,