r300g: support user buffers as constant buffers

This commit is contained in:
Marek Olšák 2010-12-29 04:04:32 +01:00
parent df4d83dca4
commit 48ed458e87
1 changed files with 9 additions and 3 deletions

View File

@ -1827,6 +1827,7 @@ static void r300_set_constant_buffer(struct pipe_context *pipe,
{
struct r300_context* r300 = r300_context(pipe);
struct r300_constant_buffer *cbuf;
struct r300_buffer *rbuf = r300_buffer(buf);
uint32_t *mapped;
switch (shader) {
@ -1840,10 +1841,15 @@ static void r300_set_constant_buffer(struct pipe_context *pipe,
return;
}
if (buf == NULL || buf->width0 == 0 ||
(mapped = (uint32_t*)r300_buffer(buf)->constant_buffer) == NULL) {
if (buf == NULL || buf->width0 == 0)
return;
if (rbuf->user_buffer)
mapped = (uint32_t*)rbuf->user_buffer;
else if (rbuf->constant_buffer)
mapped = (uint32_t*)rbuf->constant_buffer;
else
return;
}
if (shader == PIPE_SHADER_FRAGMENT ||
(shader == PIPE_SHADER_VERTEX && r300->screen->caps.has_tcl)) {