wined3d: Make shader buffer dynamic.
This commit is contained in:
parent
b5ff0a6983
commit
cf12f51b15
@ -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
|
|||||||
{
|
{
|
||||||
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
|
|||||||
* 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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user