From 53239a9aa21ccbc39fb13c97a4abb025526227b6 Mon Sep 17 00:00:00 2001 From: Henri Verbeet Date: Wed, 4 Mar 2009 07:07:38 +0100 Subject: [PATCH] d3d10core: Add a stub ID3D10PixelShader implementation. --- dlls/d3d10core/d3d10core_private.h | 8 +++ dlls/d3d10core/device.c | 16 ++++- dlls/d3d10core/shader.c | 93 ++++++++++++++++++++++++++++++ 3 files changed, 116 insertions(+), 1 deletion(-) diff --git a/dlls/d3d10core/d3d10core_private.h b/dlls/d3d10core/d3d10core_private.h index e3750682db6..97038219175 100644 --- a/dlls/d3d10core/d3d10core_private.h +++ b/dlls/d3d10core/d3d10core_private.h @@ -113,6 +113,14 @@ struct d3d10_geometry_shader LONG refcount; }; +/* ID3D10PixelShader */ +extern const struct ID3D10PixelShaderVtbl d3d10_pixel_shader_vtbl; +struct d3d10_pixel_shader +{ + const struct ID3D10PixelShaderVtbl *vtbl; + LONG refcount; +}; + /* Layered device */ enum dxgi_device_layer_id { diff --git a/dlls/d3d10core/device.c b/dlls/d3d10core/device.c index 0f66f7980a8..689de3e7a27 100644 --- a/dlls/d3d10core/device.c +++ b/dlls/d3d10core/device.c @@ -977,10 +977,24 @@ static HRESULT STDMETHODCALLTYPE d3d10_device_CreateGeometryShaderWithStreamOutp static HRESULT STDMETHODCALLTYPE d3d10_device_CreatePixelShader(ID3D10Device *iface, const void *byte_code, SIZE_T byte_code_length, ID3D10PixelShader **shader) { + struct d3d10_pixel_shader *object; + FIXME("iface %p, byte_code %p, byte_code_length %lu, shader %p stub!\n", iface, byte_code, byte_code_length, shader); - return E_NOTIMPL; + object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); + if (!object) + { + ERR("Failed to allocate D3D10 pixel shader object memory\n"); + return E_OUTOFMEMORY; + } + + object->vtbl = &d3d10_pixel_shader_vtbl; + object->refcount = 1; + + *shader = (ID3D10PixelShader *)object; + + return S_OK; } static HRESULT STDMETHODCALLTYPE d3d10_device_CreateBlendState(ID3D10Device *iface, diff --git a/dlls/d3d10core/shader.c b/dlls/d3d10core/shader.c index 01def340fd1..b614779bec1 100644 --- a/dlls/d3d10core/shader.c +++ b/dlls/d3d10core/shader.c @@ -209,3 +209,96 @@ const struct ID3D10GeometryShaderVtbl d3d10_geometry_shader_vtbl = d3d10_geometry_shader_SetPrivateData, d3d10_geometry_shader_SetPrivateDataInterface, }; + +/* IUnknown methods */ + +static HRESULT STDMETHODCALLTYPE d3d10_pixel_shader_QueryInterface(ID3D10PixelShader *iface, + REFIID riid, void **object) +{ + TRACE("iface %p, riid %s, object %p\n", iface, debugstr_guid(riid), object); + + if (IsEqualGUID(riid, &IID_ID3D10PixelShader) + || IsEqualGUID(riid, &IID_ID3D10DeviceChild) + || IsEqualGUID(riid, &IID_IUnknown)) + { + IUnknown_AddRef(iface); + *object = iface; + return S_OK; + } + + WARN("%s not implemented, returning E_NOINTERFACE\n", debugstr_guid(riid)); + + *object = NULL; + return E_NOINTERFACE; +} + +static ULONG STDMETHODCALLTYPE d3d10_pixel_shader_AddRef(ID3D10PixelShader *iface) +{ + struct d3d10_pixel_shader *This = (struct d3d10_pixel_shader *)iface; + ULONG refcount = InterlockedIncrement(&This->refcount); + + TRACE("%p increasing refcount to %u\n", This, refcount); + + return refcount; +} + +static ULONG STDMETHODCALLTYPE d3d10_pixel_shader_Release(ID3D10PixelShader *iface) +{ + struct d3d10_pixel_shader *This = (struct d3d10_pixel_shader *)iface; + ULONG refcount = InterlockedDecrement(&This->refcount); + + TRACE("%p decreasing refcount to %u\n", This, refcount); + + if (!refcount) + { + HeapFree(GetProcessHeap(), 0, This); + } + + return refcount; +} + +/* ID3D10DeviceChild methods */ + +static void STDMETHODCALLTYPE d3d10_pixel_shader_GetDevice(ID3D10PixelShader *iface, ID3D10Device **device) +{ + FIXME("iface %p, device %p stub!\n", iface, device); +} + +static HRESULT STDMETHODCALLTYPE d3d10_pixel_shader_GetPrivateData(ID3D10PixelShader *iface, + REFGUID guid, UINT *data_size, void *data) +{ + FIXME("iface %p, guid %s, data_size %p, data %p stub!\n", + iface, debugstr_guid(guid), data_size, data); + + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE d3d10_pixel_shader_SetPrivateData(ID3D10PixelShader *iface, + REFGUID guid, UINT data_size, const void *data) +{ + FIXME("iface %p, guid %s, data_size %u, data %p stub!\n", + iface, debugstr_guid(guid), data_size, data); + + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE d3d10_pixel_shader_SetPrivateDataInterface(ID3D10PixelShader *iface, + REFGUID guid, const IUnknown *data) +{ + FIXME("iface %p, guid %s, data %p stub!\n", iface, debugstr_guid(guid), data); + + return E_NOTIMPL; +} + +const struct ID3D10PixelShaderVtbl d3d10_pixel_shader_vtbl = +{ + /* IUnknown methods */ + d3d10_pixel_shader_QueryInterface, + d3d10_pixel_shader_AddRef, + d3d10_pixel_shader_Release, + /* ID3D10DeviceChild methods */ + d3d10_pixel_shader_GetDevice, + d3d10_pixel_shader_GetPrivateData, + d3d10_pixel_shader_SetPrivateData, + d3d10_pixel_shader_SetPrivateDataInterface, +};