X-Git-Url: https://git.reactos.org/?p=reactos.git;a=blobdiff_plain;f=dll%2Fdirectx%2Fwine%2Fd3dx9_36%2Fshader.c;h=c05f7b74d90c05d2e575fa530d0c243a8965fb70;hp=48499ac6df1a29bce990d1c3b516e9662097c5e1;hb=e4a060ead45b9dc87a64408b6d791ea4a5fef55e;hpb=2597cfe258b768473a744df30227f4067252d9b7 diff --git a/dll/directx/wine/d3dx9_36/shader.c b/dll/directx/wine/d3dx9_36/shader.c index 48499ac6df1..c05f7b74d90 100644 --- a/dll/directx/wine/d3dx9_36/shader.c +++ b/dll/directx/wine/d3dx9_36/shader.c @@ -19,9 +19,11 @@ #include "config.h" #include "wine/port.h" #include "wine/debug.h" +#include "wine/unicode.h" #include "windef.h" #include "wingdi.h" #include "d3dx9.h" +#include "d3dx9_36_private.h" WINE_DEFAULT_DEBUG_CHANNEL(d3dx); @@ -131,3 +133,90 @@ LPCSTR WINAPI D3DXGetVertexShaderProfile(LPDIRECT3DDEVICE9 device) return NULL; } + +HRESULT WINAPI D3DXAssembleShader(LPCSTR data, + UINT data_len, + CONST D3DXMACRO* defines, + LPD3DXINCLUDE include, + DWORD flags, + LPD3DXBUFFER* shader, + LPD3DXBUFFER* error_messages) +{ + FIXME("stub\n"); + return D3DERR_INVALIDCALL; +} + +HRESULT WINAPI D3DXAssembleShaderFromFileA(LPCSTR filename, + CONST D3DXMACRO* defines, + LPD3DXINCLUDE include, + DWORD flags, + LPD3DXBUFFER* shader, + LPD3DXBUFFER* error_messages) +{ + LPWSTR filename_w = NULL; + DWORD len; + HRESULT ret; + + if (!filename) return D3DXERR_INVALIDDATA; + + len = MultiByteToWideChar(CP_ACP, 0, filename, -1, NULL, 0); + filename_w = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + if (!filename_w) return E_OUTOFMEMORY; + MultiByteToWideChar(CP_ACP, 0, filename, -1, filename_w, len); + + ret = D3DXAssembleShaderFromFileW(filename_w, defines, include, flags, shader, error_messages); + + HeapFree(GetProcessHeap(), 0, filename_w); + return ret; +} + +HRESULT WINAPI D3DXAssembleShaderFromFileW(LPCWSTR filename, + CONST D3DXMACRO* defines, + LPD3DXINCLUDE include, + DWORD flags, + LPD3DXBUFFER* shader, + LPD3DXBUFFER* error_messages) +{ + FIXME("stub\n"); + return D3DERR_INVALIDCALL; +} + +HRESULT WINAPI D3DXAssembleShaderFromResourceA(HMODULE module, + LPCSTR resource, + CONST D3DXMACRO* defines, + LPD3DXINCLUDE include, + DWORD flags, + LPD3DXBUFFER* shader, + LPD3DXBUFFER* error_messages) +{ + HRSRC res; + LPCSTR buffer; + DWORD len; + + if (!(res = FindResourceA(module, resource, (LPCSTR)RT_RCDATA))) + return D3DXERR_INVALIDDATA; + if (FAILED(load_resource_into_memory(module, res, (LPVOID *)&buffer, &len))) + return D3DXERR_INVALIDDATA; + return D3DXAssembleShader(buffer, len, defines, include, flags, + shader, error_messages); +} + +HRESULT WINAPI D3DXAssembleShaderFromResourceW(HMODULE module, + LPCWSTR resource, + CONST D3DXMACRO* defines, + LPD3DXINCLUDE include, + DWORD flags, + LPD3DXBUFFER* shader, + LPD3DXBUFFER* error_messages) +{ + HRSRC res; + LPCSTR buffer; + DWORD len; + + if (!(res = FindResourceW(module, resource, (LPCWSTR)RT_RCDATA))) + return D3DXERR_INVALIDDATA; + if (FAILED(load_resource_into_memory(module, res, (LPVOID *)&buffer, &len))) + return D3DXERR_INVALIDDATA; + return D3DXAssembleShader(buffer, len, defines, include, flags, + shader, error_messages); +}