Module: wine Branch: master Commit: 6c866e06bfe24c37f7d53aa5adc3aed83819b2b2 URL: http://source.winehq.org/git/wine.git/?a=commit;h=6c866e06bfe24c37f7d53aa5ad...
Author: Michael Stefaniuc mstefani@redhat.de Date: Tue Jul 12 12:50:41 2011 +0200
d3d10core: Use unsafe_impl_from_ID3D10InputLayout for an app provided iface.
---
dlls/d3d10core/d3d10core_private.h | 1 + dlls/d3d10core/device.c | 3 ++- dlls/d3d10core/inputlayout.c | 15 +++++++++++++++ 3 files changed, 18 insertions(+), 1 deletions(-)
diff --git a/dlls/d3d10core/d3d10core_private.h b/dlls/d3d10core/d3d10core_private.h index 16cc17c..2fb21a5 100644 --- a/dlls/d3d10core/d3d10core_private.h +++ b/dlls/d3d10core/d3d10core_private.h @@ -164,6 +164,7 @@ struct d3d10_input_layout 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; +struct d3d10_input_layout *unsafe_impl_from_ID3D10InputLayout(ID3D10InputLayout *iface) DECLSPEC_HIDDEN;
/* ID3D10VertexShader */ struct d3d10_vertex_shader diff --git a/dlls/d3d10core/device.c b/dlls/d3d10core/device.c index 239f79a..e4916bc 100644 --- a/dlls/d3d10core/device.c +++ b/dlls/d3d10core/device.c @@ -192,11 +192,12 @@ static void STDMETHODCALLTYPE d3d10_device_IASetInputLayout(ID3D10Device *iface, ID3D10InputLayout *input_layout) { struct d3d10_device *This = impl_from_ID3D10Device(iface); + struct d3d10_input_layout *layout = unsafe_impl_from_ID3D10InputLayout(input_layout);
TRACE("iface %p, input_layout %p\n", iface, input_layout);
wined3d_device_set_vertex_declaration(This->wined3d_device, - input_layout ? ((struct d3d10_input_layout *)input_layout)->wined3d_decl : NULL); + layout ? layout->wined3d_decl : NULL); }
static void STDMETHODCALLTYPE d3d10_device_IASetVertexBuffers(ID3D10Device *iface, UINT start_slot, diff --git a/dlls/d3d10core/inputlayout.c b/dlls/d3d10core/inputlayout.c index f224559..d41a9cf 100644 --- a/dlls/d3d10core/inputlayout.c +++ b/dlls/d3d10core/inputlayout.c @@ -19,6 +19,7 @@
#include "config.h" #include "wine/port.h" +#include <assert.h>
#include "d3d10core_private.h"
@@ -100,6 +101,11 @@ static HRESULT d3d10_input_layout_to_wined3d_declaration(const D3D10_INPUT_ELEME return S_OK; }
+static inline struct d3d10_input_layout *impl_from_ID3D10InputLayout(ID3D10InputLayout *iface) +{ + return CONTAINING_RECORD(iface, struct d3d10_input_layout, vtbl); +} + /* IUnknown methods */
static HRESULT STDMETHODCALLTYPE d3d10_input_layout_QueryInterface(ID3D10InputLayout *iface, @@ -238,3 +244,12 @@ HRESULT d3d10_input_layout_init(struct d3d10_input_layout *layout, struct d3d10_
return S_OK; } + +struct d3d10_input_layout *unsafe_impl_from_ID3D10InputLayout(ID3D10InputLayout *iface) +{ + if (!iface) + return NULL; + assert(iface->lpVtbl == &d3d10_input_layout_vtbl); + + return impl_from_ID3D10InputLayout(iface); +}