HRESULT WINAPI D3DAssemble(const void *data, SIZE_T datasize, const char *filename, const D3D_SHADER_MACRO *defines, ID3DInclude *include, UINT flags, ID3DBlob **shader, ID3DBlob **error_messages) { HRESULT hr; TRACE("data %p, datasize %lu, filename %s, defines %p, include %p, sflags %#x,\n" "shader %p, error_messages %p\n", data, datasize, debugstr_a(filename), defines, include, flags, shader, error_messages); EnterCriticalSection(&wpp_mutex); /* TODO: flags */ if (flags) FIXME("flags %x\n", flags); if (shader) *shader = NULL; if (error_messages) *error_messages = NULL; hr = preprocess_shader(data, datasize, filename, defines, include, error_messages); if (SUCCEEDED(hr)) hr = assemble_shader(wpp_output, shader, error_messages); HeapFree(GetProcessHeap(), 0, wpp_output); LeaveCriticalSection(&wpp_mutex); return hr; }
HRESULT WINAPI D3DCompile2(const void *data, SIZE_T data_size, const char *filename, const D3D_SHADER_MACRO *defines, ID3DInclude *include, const char *entrypoint, const char *target, UINT sflags, UINT eflags, UINT secondary_flags, const void *secondary_data, SIZE_T secondary_data_size, ID3DBlob **shader, ID3DBlob **error_messages) { HRESULT hr; TRACE("data %p, data_size %lu, filename %s, defines %p, include %p, entrypoint %s, " "target %s, sflags %#x, eflags %#x, secondary_flags %#x, secondary_data %p, " "secondary_data_size %lu, shader %p, error_messages %p.\n", data, data_size, debugstr_a(filename), defines, include, debugstr_a(entrypoint), debugstr_a(target), sflags, eflags, secondary_flags, secondary_data, secondary_data_size, shader, error_messages); if (secondary_data) FIXME("secondary data not implemented yet\n"); if (shader) *shader = NULL; if (error_messages) *error_messages = NULL; EnterCriticalSection(&wpp_mutex); hr = preprocess_shader(data, data_size, filename, defines, include, error_messages); if (SUCCEEDED(hr)) hr = compile_shader(wpp_output, target, entrypoint, shader, error_messages); HeapFree(GetProcessHeap(), 0, wpp_output); LeaveCriticalSection(&wpp_mutex); return hr; }
HRESULT WINAPI D3DPreprocess(const void *data, SIZE_T size, const char *filename, const D3D_SHADER_MACRO *defines, ID3DInclude *include, ID3DBlob **shader, ID3DBlob **error_messages) { HRESULT hr; ID3DBlob *buffer; TRACE("data %p, size %lu, filename %s, defines %p, include %p, shader %p, error_messages %p\n", data, size, debugstr_a(filename), defines, include, shader, error_messages); if (!data) return E_INVALIDARG; EnterCriticalSection(&wpp_mutex); if (shader) *shader = NULL; if (error_messages) *error_messages = NULL; hr = preprocess_shader(data, size, filename, defines, include, error_messages); if (SUCCEEDED(hr)) { if (shader) { hr = D3DCreateBlob(wpp_output_size, &buffer); if (FAILED(hr)) goto cleanup; CopyMemory(ID3D10Blob_GetBufferPointer(buffer), wpp_output, wpp_output_size); *shader = buffer; } else hr = E_INVALIDARG; } cleanup: HeapFree(GetProcessHeap(), 0, wpp_output); LeaveCriticalSection(&wpp_mutex); return hr; }