Commit cf12f51b authored by Ričardas Barkauskas's avatar Ričardas Barkauskas Committed by Alexandre Julliard

wined3d: Make shader buffer dynamic.

parent b5ff0a69
...@@ -251,6 +251,7 @@ BOOL shader_buffer_init(struct wined3d_shader_buffer *buffer) ...@@ -251,6 +251,7 @@ BOOL shader_buffer_init(struct wined3d_shader_buffer *buffer)
ERR("Failed to allocate shader buffer memory.\n"); ERR("Failed to allocate shader buffer memory.\n");
return FALSE; return FALSE;
} }
buffer->buffer_size = SHADER_PGMSIZE;
shader_buffer_clear(buffer); shader_buffer_clear(buffer);
return TRUE; return TRUE;
...@@ -265,15 +266,28 @@ int shader_vaddline(struct wined3d_shader_buffer *buffer, const char *format, va ...@@ -265,15 +266,28 @@ int shader_vaddline(struct wined3d_shader_buffer *buffer, const char *format, va
{ {
char *base = buffer->buffer + buffer->content_size; char *base = buffer->buffer + buffer->content_size;
int rc; int rc;
char *new_buffer;
rc = vsnprintf(base, SHADER_PGMSIZE - 1 - buffer->content_size, format, args); while(1)
if (rc < 0 /* C89 */ || (unsigned int)rc > SHADER_PGMSIZE - 1 - buffer->content_size /* C99 */)
{ {
ERR("The buffer allocated for the shader program string " rc = vsnprintf(base, buffer->buffer_size - buffer->content_size, format, args);
"is too small at %d bytes.\n", SHADER_PGMSIZE); if (rc < 0 /* C89 */ || (unsigned int)rc >= buffer->buffer_size - buffer->content_size /* C99 */)
buffer->content_size = SHADER_PGMSIZE - 1; {
return -1; new_buffer = HeapReAlloc(GetProcessHeap(), 0, buffer->buffer, buffer->buffer_size * 2);
if (!new_buffer)
{
ERR("The buffer allocated for the shader program string is too small at %d bytes.\n", buffer->buffer_size);
buffer->content_size = buffer->buffer_size - 1;
return -1;
}
buffer->buffer = new_buffer;
buffer->buffer_size = buffer->buffer_size * 2;
base = buffer->buffer + buffer->content_size;
}
else
{
break;
}
} }
if (buffer->newline) if (buffer->newline)
......
...@@ -402,11 +402,12 @@ enum wined3d_shader_rel_op ...@@ -402,11 +402,12 @@ enum wined3d_shader_rel_op
* Shader model 3 according to msdn (and for software shaders) */ * Shader model 3 according to msdn (and for software shaders) */
#define MAX_LABELS 16 #define MAX_LABELS 16
#define SHADER_PGMSIZE 65535 #define SHADER_PGMSIZE 16384
struct wined3d_shader_buffer struct wined3d_shader_buffer
{ {
char *buffer; char *buffer;
unsigned int buffer_size;
unsigned int content_size; unsigned int content_size;
unsigned int lineNo; unsigned int lineNo;
BOOL newline; BOOL newline;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment