X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Famd%2Fvulkan%2Fradv_util.c;h=8c7a948bc95225164beec6088e8775f1c631c4a6;hb=a3ca2a9b7b629db17d6acfb8d015231140d4e8b2;hp=bf7abd49d1de11a748bdaecf898db0f88aa33b55;hpb=f4e499ec79147f4172f3669ae9dafd941aaeeb65;p=mesa.git diff --git a/src/amd/vulkan/radv_util.c b/src/amd/vulkan/radv_util.c index bf7abd49d1d..8c7a948bc95 100644 --- a/src/amd/vulkan/radv_util.c +++ b/src/amd/vulkan/radv_util.c @@ -128,77 +128,3 @@ __vk_errorf(VkResult error, const char *file, int line, const char *format, ...) return error; } -int -radv_vector_init(struct radv_vector *vector, uint32_t element_size, uint32_t size) -{ - assert(util_is_power_of_two(size)); - assert(element_size < size && util_is_power_of_two(element_size)); - - vector->head = 0; - vector->tail = 0; - vector->element_size = element_size; - vector->size = size; - vector->data = malloc(size); - - return vector->data != NULL; -} - -void * -radv_vector_add(struct radv_vector *vector) -{ - uint32_t offset, size, split, src_tail, dst_tail; - void *data; - - if (vector->head - vector->tail == vector->size) { - size = vector->size * 2; - data = malloc(size); - if (data == NULL) - return NULL; - src_tail = vector->tail & (vector->size - 1); - dst_tail = vector->tail & (size - 1); - if (src_tail == 0) { - /* Since we know that the vector is full, this means that it's - * linear from start to end so we can do one copy. - */ - memcpy(data + dst_tail, vector->data, vector->size); - } else { - /* In this case, the vector is split into two pieces and we have - * to do two copies. We have to be careful to make sure each - * piece goes to the right locations. Thanks to the change in - * size, it may or may not still wrap around. - */ - split = align_u32(vector->tail, vector->size); - assert(vector->tail <= split && split < vector->head); - memcpy(data + dst_tail, vector->data + src_tail, - split - vector->tail); - memcpy(data + (split & (size - 1)), vector->data, - vector->head - split); - } - free(vector->data); - vector->data = data; - vector->size = size; - } - - assert(vector->head - vector->tail < vector->size); - - offset = vector->head & (vector->size - 1); - vector->head += vector->element_size; - - return vector->data + offset; -} - -void * -radv_vector_remove(struct radv_vector *vector) -{ - uint32_t offset; - - if (vector->head == vector->tail) - return NULL; - - assert(vector->head - vector->tail <= vector->size); - - offset = vector->tail & (vector->size - 1); - vector->tail += vector->element_size; - - return vector->data + offset; -}