wined3d: Add functions to initialize and free shader buffers.
authorHenri Verbeet <hverbeet@codeweavers.com>
Tue, 9 Dec 2008 08:52:38 +0000 (09:52 +0100)
committerAlexandre Julliard <julliard@winehq.org>
Tue, 9 Dec 2008 10:27:13 +0000 (11:27 +0100)
dlls/wined3d/arb_program_shader.c
dlls/wined3d/baseshader.c
dlls/wined3d/glsl_shader.c
dlls/wined3d/pixelshader.c
dlls/wined3d/vertexshader.c
dlls/wined3d/wined3d_private.h

index 9d5125042f37cf72a4da2b2c2547ce790e512013..3faa17c8b2a6c0af5338db52f62eaa9cd77dd74d 100644 (file)
@@ -2694,10 +2694,7 @@ static GLuint gen_arbfp_ffp_shader(const struct ffp_frag_settings *settings, IWi
     }
 
     /* Shader header */
-    buffer.bsize = 0;
-    buffer.lineNo = 0;
-    buffer.newline = TRUE;
-    buffer.buffer = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, SHADER_PGMSIZE);
+    shader_buffer_init(&buffer);
 
     shader_addline(&buffer, "!!ARBfp1.0\n");
 
@@ -2888,7 +2885,7 @@ static GLuint gen_arbfp_ffp_shader(const struct ffp_frag_settings *settings, IWi
         FIXME("Fragment program error at position %d: %s\n", pos,
               debugstr_a((const char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB)));
     }
-    HeapFree(GetProcessHeap(), 0, buffer.buffer);
+    shader_buffer_free(&buffer);
     return ret;
 }
 
@@ -3426,10 +3423,7 @@ static GLuint gen_yuv_shader(IWineD3DDeviceImpl *device, enum yuv_fixup yuv_fixu
     struct arbfp_blit_priv *priv = (struct arbfp_blit_priv *) device->blit_priv;
 
     /* Shader header */
-    buffer.bsize = 0;
-    buffer.lineNo = 0;
-    buffer.newline = TRUE;
-    buffer.buffer = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, SHADER_PGMSIZE);
+    shader_buffer_init(&buffer);
 
     ENTER_GL();
     GL_EXTCALL(glGenProgramsARB(1, &shader));
@@ -3438,7 +3432,7 @@ static GLuint gen_yuv_shader(IWineD3DDeviceImpl *device, enum yuv_fixup yuv_fixu
     checkGLcall("glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, shader)");
     LEAVE_GL();
     if(!shader) {
-        HeapFree(GetProcessHeap(), 0, buffer.buffer);
+        shader_buffer_free(&buffer);
         return 0;
     }
 
@@ -3493,7 +3487,7 @@ static GLuint gen_yuv_shader(IWineD3DDeviceImpl *device, enum yuv_fixup yuv_fixu
         case YUV_FIXUP_YUY2:
             if (!gen_planar_yuv_read(&buffer, yuv_fixup, textype, &luminance_component))
             {
-                HeapFree(GetProcessHeap(), 0, buffer.buffer);
+                shader_buffer_free(&buffer);
                 return 0;
             }
             break;
@@ -3501,14 +3495,14 @@ static GLuint gen_yuv_shader(IWineD3DDeviceImpl *device, enum yuv_fixup yuv_fixu
         case YUV_FIXUP_YV12:
             if (!gen_yv12_read(&buffer, textype, &luminance_component))
             {
-                HeapFree(GetProcessHeap(), 0, buffer.buffer);
+                shader_buffer_free(&buffer);
                 return 0;
             }
             break;
 
         default:
             FIXME("Unsupported YUV fixup %#x\n", yuv_fixup);
-            HeapFree(GetProcessHeap(), 0, buffer.buffer);
+            shader_buffer_free(&buffer);
             return 0;
     }
 
@@ -3533,7 +3527,7 @@ static GLuint gen_yuv_shader(IWineD3DDeviceImpl *device, enum yuv_fixup yuv_fixu
         FIXME("Fragment program error at position %d: %s\n", pos,
               debugstr_a((const char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB)));
     }
-    HeapFree(GetProcessHeap(), 0, buffer.buffer);
+    shader_buffer_free(&buffer);
     LEAVE_GL();
 
     switch (yuv_fixup)
index c0b149f82889e75e9822640f794e384b9f10e26c..941429227b2d2ee8995e82c9783c8f21b9d42cd2 100644 (file)
@@ -40,6 +40,20 @@ static inline BOOL shader_is_version_token(DWORD token) {
            shader_is_vshader_version(token);
 }
 
+void shader_buffer_init(struct SHADER_BUFFER *buffer)
+{
+    buffer->buffer = HeapAlloc(GetProcessHeap(), 0, SHADER_PGMSIZE);
+    buffer->buffer[0] = '\0';
+    buffer->bsize = 0;
+    buffer->lineNo = 0;
+    buffer->newline = TRUE;
+}
+
+void shader_buffer_free(struct SHADER_BUFFER *buffer)
+{
+    HeapFree(GetProcessHeap(), 0, buffer->buffer);
+}
+
 int shader_addline(
     SHADER_BUFFER* buffer,  
     const char *format, ...) {
index 4c1d2239a610512d6a5ff61f4df2368300f8bd13..f1a0f956a322fd58ff483d1dc890a184110f5cb4 100644 (file)
@@ -2958,10 +2958,7 @@ static GLhandleARB generate_param_reorder_function(IWineD3DVertexShader *vertexs
     char reg_mask[6];
     const struct semantic *semantics_out, *semantics_in;
 
-    buffer.buffer = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, SHADER_PGMSIZE);
-    buffer.bsize = 0;
-    buffer.lineNo = 0;
-    buffer.newline = TRUE;
+    shader_buffer_init(&buffer);
 
     shader_addline(&buffer, "#version 120\n");
 
@@ -3093,7 +3090,7 @@ static GLhandleARB generate_param_reorder_function(IWineD3DVertexShader *vertexs
     GL_EXTCALL(glCompileShaderARB(ret));
     checkGLcall("glCompileShaderARB(ret)");
 
-    HeapFree(GetProcessHeap(), 0, buffer.buffer);
+    shader_buffer_free(&buffer);
     return ret;
 }
 
index 6a4d7d5dc5c459f24c6111861f6badfe39c9a9ba..09a99dcf29cd8400a69df06734f8b28eead89bea 100644 (file)
@@ -277,14 +277,9 @@ static inline GLuint IWineD3DPixelShaderImpl_GenerateShader(
     SHADER_BUFFER buffer;
     GLuint shader;
 
-    buffer.buffer = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, SHADER_PGMSIZE);
-    buffer.bsize = 0;
-    buffer.lineNo = 0;
-    buffer.newline = TRUE;
-
+    shader_buffer_init(&buffer);
     shader = ((IWineD3DDeviceImpl *)This->baseShader.device)->shader_backend->shader_generate_pshader((IWineD3DPixelShader *)This, &buffer);
-
-    HeapFree(GetProcessHeap(), 0, buffer.buffer);
+    shader_buffer_free(&buffer);
 
     return shader;
 }
index 318026244637e993c0adc6adab00e829dba22fff..9c47930d1e059c58e7a0e20efcd906f652f4e58d 100644 (file)
@@ -325,14 +325,9 @@ static void IWineD3DVertexShaderImpl_GenerateShader(IWineD3DVertexShader *iface,
 
     find_swizzled_attribs(decl, This);
 
-    buffer.buffer = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, SHADER_PGMSIZE); 
-    buffer.bsize = 0;
-    buffer.lineNo = 0;
-    buffer.newline = TRUE;
-
+    shader_buffer_init(&buffer);
     ((IWineD3DDeviceImpl *)This->baseShader.device)->shader_backend->shader_generate_vshader(iface, &buffer);
-
-    HeapFree(GetProcessHeap(), 0, buffer.buffer);
+    shader_buffer_free(&buffer);
 }
 
 /* *******************************************
index 359be448f518b601f52632975df5639b892923b4..b4464f99864eb578d79fc72def310025313edc37 100644 (file)
@@ -2229,6 +2229,8 @@ typedef struct IWineD3DBaseShaderImpl {
 HRESULT  WINAPI IWineD3DBaseShaderImpl_QueryInterface(IWineD3DBaseShader *iface, REFIID riid, LPVOID *ppobj);
 ULONG  WINAPI IWineD3DBaseShaderImpl_AddRef(IWineD3DBaseShader *iface);
 ULONG  WINAPI IWineD3DBaseShaderImpl_Release(IWineD3DBaseShader *iface);
+void shader_buffer_init(struct SHADER_BUFFER *buffer);
+void shader_buffer_free(struct SHADER_BUFFER *buffer);
 
 extern HRESULT shader_get_registers_used(
     IWineD3DBaseShader *iface,