diff --git a/dlls/d3d8/device.c b/dlls/d3d8/device.c index 206697d99d4..4b24ac8a3f6 100644 --- a/dlls/d3d8/device.c +++ b/dlls/d3d8/device.c @@ -1789,7 +1789,7 @@ static HRESULT WINAPI IDirect3DDevice8Impl_CreateVertexShader(LPDIRECT3DDEVICE8 { /* Usage is missing ... Use SetRenderState to set the sw vp render state in SetVertexShader */ hrc = IWineD3DDevice_CreateVertexShader(This->WineD3DDevice, wined3d_vertex_declaration, - pFunction, &object->wineD3DVertexShader, (IUnknown *)object); + pFunction, NULL /* output signature */, &object->wineD3DVertexShader, (IUnknown *)object); if (FAILED(hrc)) { diff --git a/dlls/d3d9/vertexshader.c b/dlls/d3d9/vertexshader.c index fd2837d53be..c138690b42f 100644 --- a/dlls/d3d9/vertexshader.c +++ b/dlls/d3d9/vertexshader.c @@ -126,7 +126,8 @@ HRESULT WINAPI IDirect3DDevice9Impl_CreateVertexShader(LPDIRECT3DDEVICE9EX iface object->ref = 1; object->lpVtbl = &Direct3DVertexShader9_Vtbl; EnterCriticalSection(&d3d9_cs); - hrc= IWineD3DDevice_CreateVertexShader(This->WineD3DDevice, NULL /* declaration */, pFunction, &object->wineD3DVertexShader, (IUnknown *)object); + hrc= IWineD3DDevice_CreateVertexShader(This->WineD3DDevice, NULL /* declaration */, pFunction, + NULL /* output signature */, &object->wineD3DVertexShader, (IUnknown *)object); LeaveCriticalSection(&d3d9_cs); if (FAILED(hrc)) { diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index a7cb78875bb..91a02660602 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -2328,7 +2328,11 @@ static HRESULT WINAPI IWineD3DDeviceImpl_CreateVertexDeclarationFromFVF(IWineD3D return WINED3D_OK; } -static HRESULT WINAPI IWineD3DDeviceImpl_CreateVertexShader(IWineD3DDevice *iface, IWineD3DVertexDeclaration *vertex_declaration, CONST DWORD *pFunction, IWineD3DVertexShader **ppVertexShader, IUnknown *parent) { +static HRESULT WINAPI IWineD3DDeviceImpl_CreateVertexShader(IWineD3DDevice *iface, + IWineD3DVertexDeclaration *vertex_declaration, const DWORD *pFunction, + const struct wined3d_shader_signature *output_signature, + IWineD3DVertexShader **ppVertexShader, IUnknown *parent) +{ IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface; IWineD3DVertexShaderImpl *object; /* NOTE: impl usage is ok, this is a create */ HRESULT hr = WINED3D_OK; @@ -2355,7 +2359,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_CreateVertexShader(IWineD3DDevice *ifac IWineD3DVertexShader_FakeSemantics(*ppVertexShader, vertex_declaration); } - hr = IWineD3DVertexShader_SetFunction(*ppVertexShader, pFunction, NULL); + hr = IWineD3DVertexShader_SetFunction(*ppVertexShader, pFunction, output_signature); if (FAILED(hr)) { WARN("(%p) : Failed to set function, returning %#x\n", iface, hr); diff --git a/include/wine/wined3d.idl b/include/wine/wined3d.idl index 7a476e858e1..7c875e4973c 100644 --- a/include/wine/wined3d.idl +++ b/include/wine/wined3d.idl @@ -3013,6 +3013,7 @@ interface IWineD3DDevice : IWineD3DBase HRESULT CreateVertexShader( [in] IWineD3DVertexDeclaration *declaration, [in] const DWORD *function, + [in] const struct wined3d_shader_signature *output_signature, [out] IWineD3DVertexShader **shader, [in] IUnknown *parent );