Henri Verbeet : d3d10core: Add a separate function for d3d10_input_layout initialization.
Alexandre Julliard
julliard at winehq.org
Wed Sep 23 11:02:58 CDT 2009
Module: wine
Branch: master
Commit: cc68900d86608fd503c6000a537f19bd0fcc9ca1
URL: http://source.winehq.org/git/wine.git/?a=commit;h=cc68900d86608fd503c6000a537f19bd0fcc9ca1
Author: Henri Verbeet <hverbeet at codeweavers.com>
Date: Wed Sep 23 10:05:48 2009 +0200
d3d10core: Add a separate function for d3d10_input_layout initialization.
---
dlls/d3d10core/d3d10core_private.h | 7 +++----
dlls/d3d10core/device.c | 16 ++++------------
dlls/d3d10core/inputlayout.c | 35 +++++++++++++++++++++++++++++++++--
3 files changed, 40 insertions(+), 18 deletions(-)
diff --git a/dlls/d3d10core/d3d10core_private.h b/dlls/d3d10core/d3d10core_private.h
index 42fe735..5d1e6ee 100644
--- a/dlls/d3d10core/d3d10core_private.h
+++ b/dlls/d3d10core/d3d10core_private.h
@@ -119,7 +119,6 @@ struct d3d10_rendertarget_view
};
/* ID3D10InputLayout */
-extern const struct ID3D10InputLayoutVtbl d3d10_input_layout_vtbl DECLSPEC_HIDDEN;
struct d3d10_input_layout
{
const struct ID3D10InputLayoutVtbl *vtbl;
@@ -128,9 +127,9 @@ struct d3d10_input_layout
IWineD3DVertexDeclaration *wined3d_decl;
};
-HRESULT d3d10_input_layout_to_wined3d_declaration(const D3D10_INPUT_ELEMENT_DESC *element_descs,
- UINT element_count, const void *shader_byte_code, SIZE_T shader_byte_code_length,
- WINED3DVERTEXELEMENT **wined3d_elements, UINT *wined3d_element_count) DECLSPEC_HIDDEN;
+HRESULT d3d10_input_layout_init(struct d3d10_input_layout *layout, struct d3d10_device *device,
+ const D3D10_INPUT_ELEMENT_DESC *element_descs, UINT element_count,
+ const void *shader_byte_code, SIZE_T shader_byte_code_length) DECLSPEC_HIDDEN;
/* ID3D10VertexShader */
extern const struct ID3D10VertexShaderVtbl d3d10_vertex_shader_vtbl DECLSPEC_HIDDEN;
diff --git a/dlls/d3d10core/device.c b/dlls/d3d10core/device.c
index 80cbc61..5027092 100644
--- a/dlls/d3d10core/device.c
+++ b/dlls/d3d10core/device.c
@@ -901,8 +901,6 @@ static HRESULT STDMETHODCALLTYPE d3d10_device_CreateInputLayout(ID3D10Device *if
{
struct d3d10_device *This = (struct d3d10_device *)iface;
struct d3d10_input_layout *object;
- WINED3DVERTEXELEMENT *wined3d_elements;
- UINT wined3d_element_count;
HRESULT hr;
TRACE("iface %p, element_descs %p, element_count %u, shader_byte_code %p,"
@@ -917,22 +915,16 @@ static HRESULT STDMETHODCALLTYPE d3d10_device_CreateInputLayout(ID3D10Device *if
return E_OUTOFMEMORY;
}
- object->vtbl = &d3d10_input_layout_vtbl;
- object->refcount = 1;
-
- hr = d3d10_input_layout_to_wined3d_declaration(element_descs, element_count,
- shader_byte_code, shader_byte_code_length, &wined3d_elements, &wined3d_element_count);
+ hr = d3d10_input_layout_init(object, This, element_descs, element_count,
+ shader_byte_code, shader_byte_code_length);
if (FAILED(hr))
{
+ WARN("Failed to initialize input layout, hr %#x.\n", hr);
HeapFree(GetProcessHeap(), 0, object);
return hr;
}
- IWineD3DDevice_CreateVertexDeclaration(This->wined3d_device, &object->wined3d_decl,
- (IUnknown *)object, wined3d_elements, wined3d_element_count);
-
- HeapFree(GetProcessHeap(), 0, wined3d_elements);
-
+ TRACE("Created input layout %p.\n", object);
*input_layout = (ID3D10InputLayout *)object;
return S_OK;
diff --git a/dlls/d3d10core/inputlayout.c b/dlls/d3d10core/inputlayout.c
index 69d2173..6300a9d 100644
--- a/dlls/d3d10core/inputlayout.c
+++ b/dlls/d3d10core/inputlayout.c
@@ -39,7 +39,7 @@ static HRESULT isgn_handler(const char *data, DWORD data_size, DWORD tag, void *
}
}
-HRESULT d3d10_input_layout_to_wined3d_declaration(const D3D10_INPUT_ELEMENT_DESC *element_descs,
+static HRESULT d3d10_input_layout_to_wined3d_declaration(const D3D10_INPUT_ELEMENT_DESC *element_descs,
UINT element_count, const void *shader_byte_code, SIZE_T shader_byte_code_length,
WINED3DVERTEXELEMENT **wined3d_elements, UINT *wined3d_element_count)
{
@@ -181,7 +181,7 @@ static HRESULT STDMETHODCALLTYPE d3d10_input_layout_SetPrivateDataInterface(ID3D
return E_NOTIMPL;
}
-const struct ID3D10InputLayoutVtbl d3d10_input_layout_vtbl =
+static const struct ID3D10InputLayoutVtbl d3d10_input_layout_vtbl =
{
/* IUnknown methods */
d3d10_input_layout_QueryInterface,
@@ -193,3 +193,34 @@ const struct ID3D10InputLayoutVtbl d3d10_input_layout_vtbl =
d3d10_input_layout_SetPrivateData,
d3d10_input_layout_SetPrivateDataInterface,
};
+
+HRESULT d3d10_input_layout_init(struct d3d10_input_layout *layout, struct d3d10_device *device,
+ const D3D10_INPUT_ELEMENT_DESC *element_descs, UINT element_count,
+ const void *shader_byte_code, SIZE_T shader_byte_code_length)
+{
+ WINED3DVERTEXELEMENT *wined3d_elements;
+ UINT wined3d_element_count;
+ HRESULT hr;
+
+ layout->vtbl = &d3d10_input_layout_vtbl;
+ layout->refcount = 1;
+
+ hr = d3d10_input_layout_to_wined3d_declaration(element_descs, element_count,
+ shader_byte_code, shader_byte_code_length, &wined3d_elements, &wined3d_element_count);
+ if (FAILED(hr))
+ {
+ WARN("Failed to create wined3d vertex declaration elements, hr %#x.\n", hr);
+ return hr;
+ }
+
+ hr = IWineD3DDevice_CreateVertexDeclaration(device->wined3d_device, &layout->wined3d_decl,
+ (IUnknown *)layout, wined3d_elements, wined3d_element_count);
+ HeapFree(GetProcessHeap(), 0, wined3d_elements);
+ if (FAILED(hr))
+ {
+ WARN("Failed to create wined3d vertex declaration, hr %#x.\n", hr);
+ return hr;
+ }
+
+ return S_OK;
+}
More information about the wine-cvs
mailing list