diff options
Diffstat (limited to 'src/gallium/auxiliary/util/u_suballoc.c')
-rw-r--r-- | src/gallium/auxiliary/util/u_suballoc.c | 22 |
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; |