summaryrefslogtreecommitdiffstats
path: root/src/gallium/auxiliary/util/u_suballoc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/auxiliary/util/u_suballoc.c')
-rw-r--r--src/gallium/auxiliary/util/u_suballoc.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/src/gallium/auxiliary/util/u_suballoc.c b/src/gallium/auxiliary/util/u_suballoc.c
index 8c463c9fdd0..392bba7d6dd 100644
--- a/src/gallium/auxiliary/util/u_suballoc.c
+++ b/src/gallium/auxiliary/util/u_suballoc.c
@@ -43,6 +43,7 @@ struct u_suballocator {
unsigned size; /* Size of the whole buffer, in bytes. */
unsigned bind; /* Bitmask of PIPE_BIND_* flags. */
enum pipe_resource_usage usage;
+ unsigned flags; /* pipe_resource::flags */
boolean zero_buffer_memory; /* If the buffer contents should be zeroed. */
struct pipe_resource *buffer; /* The buffer we suballocate from. */
@@ -58,7 +59,7 @@ struct u_suballocator {
*/
struct u_suballocator *
u_suballocator_create(struct pipe_context *pipe, unsigned size, unsigned bind,
- enum pipe_resource_usage usage,
+ enum pipe_resource_usage usage, unsigned flags,
boolean zero_buffer_memory)
{
struct u_suballocator *allocator = CALLOC_STRUCT(u_suballocator);
@@ -69,6 +70,7 @@ u_suballocator_create(struct pipe_context *pipe, unsigned size, unsigned bind,
allocator->size = size;
allocator->bind = bind;
allocator->usage = usage;
+ allocator->flags = flags;
allocator->zero_buffer_memory = zero_buffer_memory;
return allocator;
}
@@ -97,9 +99,21 @@ u_suballocator_alloc(struct u_suballocator *allocator, unsigned size,
/* Allocate a new buffer. */
pipe_resource_reference(&allocator->buffer, NULL);
allocator->offset = 0;
- allocator->buffer =
- pipe_buffer_create(allocator->pipe->screen, allocator->bind,
- allocator->usage, allocator->size);
+
+ struct pipe_resource templ;
+ memset(&templ, 0, sizeof(templ));
+ templ.target = PIPE_BUFFER;
+ templ.format = PIPE_FORMAT_R8_UNORM;
+ templ.bind = allocator->bind;
+ templ.usage = allocator->usage;
+ templ.flags = allocator->flags;
+ templ.width0 = allocator->size;
+ templ.height0 = 1;
+ templ.depth0 = 1;
+ templ.array_size = 1;
+
+ struct pipe_screen *screen = allocator->pipe->screen;
+ allocator->buffer = screen->resource_create(screen, &templ);
if (!allocator->buffer)
goto fail;