Module: wine Branch: master Commit: ddab7fcda9af2d880e2b8e77538f3eb6d2f242a1 URL: http://source.winehq.org/git/wine.git/?a=commit;h=ddab7fcda9af2d880e2b8e7753...
Author: Matteo Bruni mbruni@codeweavers.com Date: Tue May 15 16:12:53 2012 +0200
d3dcompiler: Make SlWriteBytecode return the shader size.
---
dlls/d3dcompiler_43/bytecodewriter.c | 26 ++++---------------------- dlls/d3dcompiler_43/compiler.c | 8 +++----- dlls/d3dcompiler_43/d3dcompiler_private.h | 2 +- 3 files changed, 8 insertions(+), 28 deletions(-)
diff --git a/dlls/d3dcompiler_43/bytecodewriter.c b/dlls/d3dcompiler_43/bytecodewriter.c index 54321ed..5a3e7f2 100644 --- a/dlls/d3dcompiler_43/bytecodewriter.c +++ b/dlls/d3dcompiler_43/bytecodewriter.c @@ -2543,22 +2543,8 @@ static HRESULT call_instr_handler(struct bc_writer *writer, return E_INVALIDARG; }
-/* SlWriteBytecode (wineshader.@) - * - * Writes shader version specific bytecode from the shader passed in. - * The returned bytecode can be passed to the Direct3D runtime like - * IDirect3DDevice9::Create*Shader. - * - * Parameters: - * shader: Shader to translate into bytecode - * version: Shader version to generate(d3d version token) - * dxversion: DirectX version the code targets - * result: the resulting shader bytecode - * - * Return values: - * S_OK on success - */ -DWORD SlWriteBytecode(const struct bwriter_shader *shader, int dxversion, DWORD **result) { +HRESULT SlWriteBytecode(const struct bwriter_shader *shader, int dxversion, DWORD **result, DWORD *size) +{ struct bc_writer *writer; struct bytecode_buffer *buffer = NULL; HRESULT hr; @@ -2610,12 +2596,8 @@ DWORD SlWriteBytecode(const struct bwriter_shader *shader, int dxversion, DWORD goto error; }
- /* Cut off unneeded memory from the result buffer */ - *result = d3dcompiler_realloc(buffer->data, - sizeof(DWORD) * buffer->size); - if(!*result) { - *result = buffer->data; - } + *size = buffer->size * sizeof(DWORD); + *result = buffer->data; buffer->data = NULL; hr = S_OK;
diff --git a/dlls/d3dcompiler_43/compiler.c b/dlls/d3dcompiler_43/compiler.c index 7f4ebdb..e273d6b 100644 --- a/dlls/d3dcompiler_43/compiler.c +++ b/dlls/d3dcompiler_43/compiler.c @@ -396,9 +396,8 @@ static HRESULT assemble_shader(const char *preproc_shader, struct bwriter_shader *shader; char *messages = NULL; HRESULT hr; - DWORD *res; - LPD3DBLOB buffer; - int size; + DWORD *res, size; + ID3DBlob *buffer; char *pos;
shader = SlAssembleShader(preproc_shader, &messages); @@ -443,7 +442,7 @@ static HRESULT assemble_shader(const char *preproc_shader, return D3DXERR_INVALIDDATA; }
- hr = SlWriteBytecode(shader, 9, &res); + hr = SlWriteBytecode(shader, 9, &res, &size); SlDeleteShader(shader); if (FAILED(hr)) { @@ -453,7 +452,6 @@ static HRESULT assemble_shader(const char *preproc_shader,
if (shader_blob) { - size = HeapSize(GetProcessHeap(), 0, res); hr = D3DCreateBlob(size, &buffer); if (FAILED(hr)) { diff --git a/dlls/d3dcompiler_43/d3dcompiler_private.h b/dlls/d3dcompiler_43/d3dcompiler_private.h index d719021..e64f4cf 100644 --- a/dlls/d3dcompiler_43/d3dcompiler_private.h +++ b/dlls/d3dcompiler_43/d3dcompiler_private.h @@ -570,7 +570,7 @@ typedef enum _BWRITERDECLUSAGE { #define T3_REG 5
struct bwriter_shader *SlAssembleShader(const char *text, char **messages) DECLSPEC_HIDDEN; -DWORD SlWriteBytecode(const struct bwriter_shader *shader, int dxversion, DWORD **result) DECLSPEC_HIDDEN; +HRESULT SlWriteBytecode(const struct bwriter_shader *shader, int dxversion, DWORD **result, DWORD *size) DECLSPEC_HIDDEN; void SlDeleteShader(struct bwriter_shader *shader) DECLSPEC_HIDDEN;
#define MAKE_TAG(ch0, ch1, ch2, ch3) \