From 66b00d5e5a64dfa63f34514b01f6d01168f9a6a7 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Tue, 9 Jun 2015 12:28:58 -0700 Subject: [PATCH] vk/queue: Embed the queue in and allocate it with the device --- src/vulkan/device.c | 48 ++++++++++++++++++++++++++++++-------------- src/vulkan/private.h | 42 ++++++++++++++++++++------------------ 2 files changed, 55 insertions(+), 35 deletions(-) diff --git a/src/vulkan/device.c b/src/vulkan/device.c index 37449d7ae4f..9924baa84cb 100644 --- a/src/vulkan/device.c +++ b/src/vulkan/device.c @@ -303,6 +303,33 @@ parse_debug_flags(struct anv_device *device) } } +static VkResult +anv_queue_init(struct anv_device *device, struct anv_queue *queue) +{ + queue->device = device; + queue->pool = &device->surface_state_pool; + + queue->completed_serial = anv_state_pool_alloc(queue->pool, 4, 4); + if (queue->completed_serial.map == NULL) + return vk_error(VK_ERROR_OUT_OF_DEVICE_MEMORY); + + *(uint32_t *)queue->completed_serial.map = 0; + queue->next_serial = 1; + + return VK_SUCCESS; +} + +static void +anv_queue_finish(struct anv_queue *queue) +{ +#ifdef HAVE_VALGRIND + /* This gets torn down with the device so we only need to do this if + * valgrind is present. + */ + anv_state_pool_free(queue->pool, queue->completed_serial); +#endif +} + static void anv_device_init_border_colors(struct anv_device *device) { @@ -384,6 +411,8 @@ VkResult anv_CreateDevice( pthread_mutex_init(&device->mutex, NULL); + anv_queue_init(device, &device->queue); + anv_device_init_meta(device); anv_device_init_border_colors(device); @@ -410,6 +439,8 @@ VkResult anv_DestroyDevice( anv_compiler_destroy(device->compiler); + anv_queue_finish(&device->queue); + anv_device_finish_meta(device); #ifdef HAVE_VALGRIND @@ -516,23 +547,10 @@ VkResult anv_GetDeviceQueue( VkQueue* pQueue) { struct anv_device *device = (struct anv_device *) _device; - struct anv_queue *queue; - - /* FIXME: Should allocate these at device create time. */ - - queue = anv_device_alloc(device, sizeof(*queue), 8, - VK_SYSTEM_ALLOC_TYPE_API_OBJECT); - if (queue == NULL) - return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY); - - queue->device = device; - queue->pool = &device->surface_state_pool; - queue->completed_serial = anv_state_pool_alloc(queue->pool, 4, 4); - *(uint32_t *)queue->completed_serial.map = 0; - queue->next_serial = 1; + assert(queueIndex == 0); - *pQueue = (VkQueue) queue; + *pQueue = (VkQueue) &device->queue; return VK_SUCCESS; } diff --git a/src/vulkan/private.h b/src/vulkan/private.h index 873efaa48f5..645e96d75a9 100644 --- a/src/vulkan/private.h +++ b/src/vulkan/private.h @@ -313,6 +313,26 @@ struct anv_meta_state { } shared; }; +struct anv_queue { + struct anv_device * device; + + struct anv_state_pool * pool; + + /** + * Serial number of the most recently completed batch executed on the + * engine. + */ + struct anv_state completed_serial; + + /** + * The next batch submitted to the engine will be assigned this serial + * number. + */ + uint32_t next_serial; + + uint32_t last_collected_serial; +}; + struct anv_device { struct anv_instance * instance; uint32_t chipset_id; @@ -336,31 +356,13 @@ struct anv_device { struct anv_state float_border_colors; struct anv_state uint32_border_colors; + struct anv_queue queue; + struct anv_compiler * compiler; struct anv_aub_writer * aub_writer; pthread_mutex_t mutex; }; -struct anv_queue { - struct anv_device * device; - - struct anv_state_pool * pool; - - /** - * Serial number of the most recently completed batch executed on the - * engine. - */ - struct anv_state completed_serial; - - /** - * The next batch submitted to the engine will be assigned this serial - * number. - */ - uint32_t next_serial; - - uint32_t last_collected_serial; -}; - void * anv_device_alloc(struct anv_device * device, size_t size, -- 2.30.2