diff options
Diffstat (limited to 'src/gallium/drivers/svga')
-rw-r--r-- | src/gallium/drivers/svga/svga_pipe_constants.c | 15 | ||||
-rw-r--r-- | src/gallium/drivers/svga/svga_resource.c | 1 | ||||
-rw-r--r-- | src/gallium/drivers/svga/svga_resource_buffer.c | 1 | ||||
-rw-r--r-- | src/gallium/drivers/svga/svga_resource_buffer.h | 6 | ||||
-rw-r--r-- | src/gallium/drivers/svga/svga_resource_buffer_upload.c | 18 | ||||
-rw-r--r-- | src/gallium/drivers/svga/svga_screen.c | 5 | ||||
-rw-r--r-- | src/gallium/drivers/svga/svga_swtnl_draw.c | 20 |
7 files changed, 31 insertions, 35 deletions
diff --git a/src/gallium/drivers/svga/svga_pipe_constants.c b/src/gallium/drivers/svga/svga_pipe_constants.c index 2fa2142d07d..cfa823b345d 100644 --- a/src/gallium/drivers/svga/svga_pipe_constants.c +++ b/src/gallium/drivers/svga/svga_pipe_constants.c @@ -29,6 +29,7 @@ #include "tgsi/tgsi_parse.h" #include "svga_context.h" +#include "svga_resource_buffer.h" /*********************************************************************** * Constant buffers @@ -45,9 +46,17 @@ struct svga_constbuf static void svga_set_constant_buffer(struct pipe_context *pipe, uint shader, uint index, - struct pipe_resource *buf) + struct pipe_constant_buffer *cb) { struct svga_context *svga = svga_context(pipe); + struct pipe_resource *buf = cb ? cb->buffer : NULL; + + if (cb && cb->user_buffer) { + buf = svga_user_buffer_create(pipe->screen, + (void *) cb->user_buffer, + cb->buffer_size, + PIPE_BIND_CONSTANT_BUFFER); + } assert(shader < PIPE_SHADER_TYPES); assert(index == 0); @@ -59,6 +68,10 @@ static void svga_set_constant_buffer(struct pipe_context *pipe, svga->dirty |= SVGA_NEW_FS_CONST_BUFFER; else svga->dirty |= SVGA_NEW_VS_CONST_BUFFER; + + if (cb && cb->user_buffer) { + pipe_resource_reference(&buf, NULL); + } } diff --git a/src/gallium/drivers/svga/svga_resource.c b/src/gallium/drivers/svga/svga_resource.c index bb6236dce67..b86469af12d 100644 --- a/src/gallium/drivers/svga/svga_resource.c +++ b/src/gallium/drivers/svga/svga_resource.c @@ -64,7 +64,6 @@ svga_init_resource_functions(struct svga_context *svga) svga->pipe.transfer_unmap = u_transfer_unmap_vtbl; svga->pipe.transfer_destroy = u_transfer_destroy_vtbl; svga->pipe.transfer_inline_write = u_transfer_inline_write_vtbl; - svga->pipe.redefine_user_buffer = svga_redefine_user_buffer; } void diff --git a/src/gallium/drivers/svga/svga_resource_buffer.c b/src/gallium/drivers/svga/svga_resource_buffer.c index ff53b827855..fa713ee88ad 100644 --- a/src/gallium/drivers/svga/svga_resource_buffer.c +++ b/src/gallium/drivers/svga/svga_resource_buffer.c @@ -394,7 +394,6 @@ svga_user_buffer_create(struct pipe_screen *screen, sbuf->b.b.height0 = 1; sbuf->b.b.depth0 = 1; sbuf->b.b.array_size = 1; - sbuf->b.b.user_ptr = ptr; sbuf->swbuf = ptr; sbuf->user = TRUE; diff --git a/src/gallium/drivers/svga/svga_resource_buffer.h b/src/gallium/drivers/svga/svga_resource_buffer.h index ca8c8d1f5ea..da85f1a002e 100644 --- a/src/gallium/drivers/svga/svga_resource_buffer.h +++ b/src/gallium/drivers/svga/svga_resource_buffer.h @@ -243,10 +243,4 @@ svga_winsys_buffer_create(struct svga_context *svga, unsigned usage, unsigned size); -void -svga_redefine_user_buffer(struct pipe_context *ctx, - struct pipe_resource *resource, - unsigned offset, - unsigned size); - #endif /* SVGA_BUFFER_H */ diff --git a/src/gallium/drivers/svga/svga_resource_buffer_upload.c b/src/gallium/drivers/svga/svga_resource_buffer_upload.c index e5273009d41..94a324d6dba 100644 --- a/src/gallium/drivers/svga/svga_resource_buffer_upload.c +++ b/src/gallium/drivers/svga/svga_resource_buffer_upload.c @@ -644,21 +644,3 @@ svga_context_flush_buffers(struct svga_context *svga) next = curr->next; } } - - -void -svga_redefine_user_buffer(struct pipe_context *pipe, - struct pipe_resource *resource, - unsigned offset, - unsigned size) -{ - struct svga_buffer *sbuf = svga_buffer(resource); - - assert(sbuf->user); - assert(!sbuf->dma.pending); - assert(!sbuf->handle); - assert(!sbuf->hwbuf); - - /* use the default action of simply resizing the user buffer's size */ - u_default_redefine_user_buffer(pipe, resource, offset, size); -} diff --git a/src/gallium/drivers/svga/svga_screen.c b/src/gallium/drivers/svga/svga_screen.c index 5a8434a04dc..64ec658b80e 100644 --- a/src/gallium/drivers/svga/svga_screen.c +++ b/src/gallium/drivers/svga/svga_screen.c @@ -161,7 +161,12 @@ svga_get_param(struct pipe_screen *screen, enum pipe_cap param) case PIPE_CAP_TEXTURE_SWIZZLE: return 1; case PIPE_CAP_USER_VERTEX_BUFFERS: + case PIPE_CAP_USER_INDEX_BUFFERS: + return 0; + case PIPE_CAP_USER_CONSTANT_BUFFERS: return 1; + case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT: + return 16; case PIPE_CAP_MAX_TEXTURE_2D_LEVELS: { diff --git a/src/gallium/drivers/svga/svga_swtnl_draw.c b/src/gallium/drivers/svga/svga_swtnl_draw.c index 377026411f2..bb6870f6572 100644 --- a/src/gallium/drivers/svga/svga_swtnl_draw.c +++ b/src/gallium/drivers/svga/svga_swtnl_draw.c @@ -66,12 +66,14 @@ svga_swtnl_draw_vbo(struct svga_context *svga, * Map vertex buffers */ for (i = 0; i < svga->curr.num_vertex_buffers; i++) { - map = pipe_buffer_map(&svga->pipe, - svga->curr.vb[i].buffer, - PIPE_TRANSFER_READ, - &vb_transfer[i]); - - draw_set_mapped_vertex_buffer(draw, i, map); + if (svga->curr.vb[i].buffer) { + map = pipe_buffer_map(&svga->pipe, + svga->curr.vb[i].buffer, + PIPE_TRANSFER_READ, + &vb_transfer[i]); + + draw_set_mapped_vertex_buffer(draw, i, map); + } } /* TODO move this to update_swtnl_draw */ @@ -109,8 +111,10 @@ svga_swtnl_draw_vbo(struct svga_context *svga, * unmap vertex/index buffers */ for (i = 0; i < svga->curr.num_vertex_buffers; i++) { - pipe_buffer_unmap(&svga->pipe, vb_transfer[i]); - draw_set_mapped_vertex_buffer(draw, i, NULL); + if (svga->curr.vb[i].buffer) { + pipe_buffer_unmap(&svga->pipe, vb_transfer[i]); + draw_set_mapped_vertex_buffer(draw, i, NULL); + } } if (ib_transfer) { |