Matteo Bruni : d3dcompiler: Fix error messages generation.

Alexandre Julliard julliard at winehq.org
Thu May 5 12:08:09 CDT 2011


Module: wine
Branch: master
Commit: bfda69d0e980435186cf7602ec33c046506f28c3
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=bfda69d0e980435186cf7602ec33c046506f28c3

Author: Matteo Bruni <mbruni at codeweavers.com>
Date:   Wed Apr 20 18:21:27 2011 +0200

d3dcompiler: Fix error messages generation.

---

 dlls/d3dcompiler_43/compiler.c |   27 ++++++++++-----------------
 1 files changed, 10 insertions(+), 17 deletions(-)

diff --git a/dlls/d3dcompiler_43/compiler.c b/dlls/d3dcompiler_43/compiler.c
index d925f95..0969ae8 100644
--- a/dlls/d3dcompiler_43/compiler.c
+++ b/dlls/d3dcompiler_43/compiler.c
@@ -390,7 +390,7 @@ cleanup:
     return hr;
 }
 
-static HRESULT assemble_shader(const char *preproc_shader, const char *preproc_messages,
+static HRESULT assemble_shader(const char *preproc_shader,
         ID3DBlob **shader_blob, ID3DBlob **error_messages)
 {
     struct bwriter_shader *shader;
@@ -403,26 +403,19 @@ static HRESULT assemble_shader(const char *preproc_shader, const char *preproc_m
 
     shader = SlAssembleShader(preproc_shader, &messages);
 
-    if (messages || preproc_messages)
+    if (messages)
     {
-        if (preproc_messages)
-        {
-            TRACE("Preprocessor messages:\n");
-            TRACE("%s", preproc_messages);
-        }
-        if (messages)
-        {
-            TRACE("Assembler messages:\n");
-            TRACE("%s", messages);
-        }
+        TRACE("Assembler messages:\n");
+        TRACE("%s", messages);
 
         TRACE("Shader source:\n");
         TRACE("%s\n", debugstr_a(preproc_shader));
 
         if (error_messages)
         {
-            size = (messages ? strlen(messages) : 0) +
-                (preproc_messages ? strlen(preproc_messages) : 0) + 1;
+            const char *preproc_messages = *error_messages ? ID3D10Blob_GetBufferPointer(*error_messages) : NULL;
+
+            size = strlen(messages) + (preproc_messages ? strlen(preproc_messages) : 0) + 1;
             hr = D3DCreateBlob(size, &buffer);
             if (FAILED(hr))
             {
@@ -436,9 +429,9 @@ static HRESULT assemble_shader(const char *preproc_shader, const char *preproc_m
                 CopyMemory(pos, preproc_messages, strlen(preproc_messages) + 1);
                 pos += strlen(preproc_messages);
             }
-            if (messages)
-                CopyMemory(pos, messages, strlen(messages) + 1);
+            CopyMemory(pos, messages, strlen(messages) + 1);
 
+            if (*error_messages) ID3D10Blob_Release(*error_messages);
             *error_messages = buffer;
         }
         HeapFree(GetProcessHeap(), 0, messages);
@@ -492,7 +485,7 @@ HRESULT WINAPI D3DAssemble(const void *data, SIZE_T datasize, const char *filena
 
     hr = preprocess_shader(data, datasize, defines, include, error_messages);
     if (SUCCEEDED(hr))
-        hr = assemble_shader(wpp_output, wpp_messages, shader, error_messages);
+        hr = assemble_shader(wpp_output, shader, error_messages);
 
     HeapFree(GetProcessHeap(), 0, wpp_output);
     LeaveCriticalSection(&wpp_mutex);




More information about the wine-cvs mailing list