}
}
+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)
{
pthread_mutex_init(&device->mutex, NULL);
+ anv_queue_init(device, &device->queue);
+
anv_device_init_meta(device);
anv_device_init_border_colors(device);
anv_compiler_destroy(device->compiler);
+ anv_queue_finish(&device->queue);
+
anv_device_finish_meta(device);
#ifdef HAVE_VALGRIND
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;
}
} 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;
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,