• Home
  • Raw
  • Download

Lines Matching full:allocator

29 /* A simple allocator that suballocates memory from a large buffer. */
48 u_suballocator_init(struct u_suballocator *allocator, in u_suballocator_init() argument
54 memset(allocator, 0, sizeof(*allocator)); in u_suballocator_init()
56 allocator->pipe = pipe; in u_suballocator_init()
57 allocator->size = size; in u_suballocator_init()
58 allocator->bind = bind; in u_suballocator_init()
59 allocator->usage = usage; in u_suballocator_init()
60 allocator->flags = flags; in u_suballocator_init()
61 allocator->zero_buffer_memory = zero_buffer_memory; in u_suballocator_init()
65 u_suballocator_destroy(struct u_suballocator *allocator) in u_suballocator_destroy() argument
67 pipe_resource_reference(&allocator->buffer, NULL); in u_suballocator_destroy()
71 u_suballocator_alloc(struct u_suballocator *allocator, unsigned size, in u_suballocator_alloc() argument
75 allocator->offset = align(allocator->offset, alignment); in u_suballocator_alloc()
78 if (size > allocator->size) in u_suballocator_alloc()
82 if (!allocator->buffer || in u_suballocator_alloc()
83 allocator->offset + size > allocator->size) { in u_suballocator_alloc()
85 pipe_resource_reference(&allocator->buffer, NULL); in u_suballocator_alloc()
86 allocator->offset = 0; in u_suballocator_alloc()
92 templ.bind = allocator->bind; in u_suballocator_alloc()
93 templ.usage = allocator->usage; in u_suballocator_alloc()
94 templ.flags = allocator->flags; in u_suballocator_alloc()
95 templ.width0 = allocator->size; in u_suballocator_alloc()
100 struct pipe_screen *screen = allocator->pipe->screen; in u_suballocator_alloc()
101 allocator->buffer = screen->resource_create(screen, &templ); in u_suballocator_alloc()
102 if (!allocator->buffer) in u_suballocator_alloc()
106 if (allocator->zero_buffer_memory) { in u_suballocator_alloc()
107 struct pipe_context *pipe = allocator->pipe; in u_suballocator_alloc()
112 pipe->clear_buffer(pipe, allocator->buffer, 0, allocator->size, in u_suballocator_alloc()
116 void *ptr = pipe_buffer_map(pipe, allocator->buffer, in u_suballocator_alloc()
118 memset(ptr, 0, allocator->size); in u_suballocator_alloc()
124 assert(allocator->offset % alignment == 0); in u_suballocator_alloc()
125 assert(allocator->offset < allocator->buffer->width0); in u_suballocator_alloc()
126 assert(allocator->offset + size <= allocator->buffer->width0); in u_suballocator_alloc()
129 *out_offset = allocator->offset; in u_suballocator_alloc()
130 pipe_resource_reference(outbuf, allocator->buffer); in u_suballocator_alloc()
132 allocator->offset += size; in u_suballocator_alloc()