Matteo Bruni : d3dcompiler: Make SlWriteBytecode return the shader size.
Alexandre Julliard
julliard at winehq.org
Wed May 16 14:22:38 CDT 2012
Module: wine
Branch: master
Commit: ddab7fcda9af2d880e2b8e77538f3eb6d2f242a1
URL: http://source.winehq.org/git/wine.git/?a=commit;h=ddab7fcda9af2d880e2b8e77538f3eb6d2f242a1
Author: Matteo Bruni <mbruni at 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) \
More information about the wine-cvs
mailing list