diff --git a/src/gallium/frontends/lavapipe/lvp_device.c b/src/gallium/frontends/lavapipe/lvp_device.c index 12e14919898..7bfe36cd0ba 100644 --- a/src/gallium/frontends/lavapipe/lvp_device.c +++ b/src/gallium/frontends/lavapipe/lvp_device.c @@ -1709,9 +1709,10 @@ VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vk_icdGetInstanceProcAddr( static void destroy_pipelines(struct lvp_queue *queue) { + struct lvp_device *device = lvp_queue_device(queue); simple_mtx_lock(&queue->lock); while (util_dynarray_contains(&queue->pipeline_destroys, struct lvp_pipeline*)) { - lvp_pipeline_destroy(queue->device, util_dynarray_pop(&queue->pipeline_destroys, struct lvp_pipeline*), true); + lvp_pipeline_destroy(device, util_dynarray_pop(&queue->pipeline_destroys, struct lvp_pipeline*), true); } simple_mtx_unlock(&queue->lock); } @@ -1721,8 +1722,9 @@ lvp_queue_submit(struct vk_queue *vk_queue, struct vk_queue_submit *submit) { struct lvp_queue *queue = container_of(vk_queue, struct lvp_queue, vk); + struct lvp_device *device = lvp_queue_device(queue); - VkResult result = vk_sync_wait_many(&queue->device->vk, + VkResult result = vk_sync_wait_many(&device->vk, submit->wait_count, submit->waits, VK_SYNC_WAIT_COMPLETE, UINT64_MAX); if (result != VK_SUCCESS) @@ -1733,26 +1735,26 @@ lvp_queue_submit(struct vk_queue *vk_queue, for (uint32_t i = 0; i < submit->buffer_bind_count; i++) { VkSparseBufferMemoryBindInfo *bind = &submit->buffer_binds[i]; - lvp_buffer_bind_sparse(queue->device, queue, bind); + lvp_buffer_bind_sparse(device, queue, bind); } for (uint32_t i = 0; i < submit->image_opaque_bind_count; i++) { VkSparseImageOpaqueMemoryBindInfo *bind = &submit->image_opaque_binds[i]; - lvp_image_bind_opaque_sparse(queue->device, queue, bind); + lvp_image_bind_opaque_sparse(device, queue, bind); } for (uint32_t i = 0; i < submit->image_bind_count; i++) { VkSparseImageMemoryBindInfo *bind = &submit->image_binds[i]; - lvp_image_bind_sparse(queue->device, queue, bind); + lvp_image_bind_sparse(device, queue, bind); } for (uint32_t i = 0; i < submit->command_buffer_count; i++) { struct lvp_cmd_buffer *cmd_buffer = container_of(submit->command_buffers[i], struct lvp_cmd_buffer, vk); - lvp_execute_cmds(queue->device, queue, cmd_buffer); + lvp_execute_cmds(device, queue, cmd_buffer); } simple_mtx_unlock(&queue->lock); @@ -1763,7 +1765,7 @@ lvp_queue_submit(struct vk_queue *vk_queue, for (uint32_t i = 0; i < submit->signal_count; i++) { struct lvp_pipe_sync *sync = vk_sync_as_lvp_pipe_sync(submit->signals[i].sync); - lvp_pipe_sync_signal_with_fence(queue->device, sync, queue->last_fence); + lvp_pipe_sync_signal_with_fence(device, sync, queue->last_fence); } destroy_pipelines(queue); @@ -1786,8 +1788,6 @@ lvp_queue_init(struct lvp_device *device, struct lvp_queue *queue, return result; } - queue->device = device; - queue->ctx = device->pscreen->context_create(device->pscreen, NULL, PIPE_CONTEXT_ROBUST_BUFFER_ACCESS); queue->cso = cso_create_context(queue->ctx, CSO_NO_VBUF); queue->uploader = u_upload_create(queue->ctx, 1024 * 1024, PIPE_BIND_CONSTANT_BUFFER, PIPE_USAGE_STREAM, 0); diff --git a/src/gallium/frontends/lavapipe/lvp_private.h b/src/gallium/frontends/lavapipe/lvp_private.h index 16aadc9733a..86b47908342 100644 --- a/src/gallium/frontends/lavapipe/lvp_private.h +++ b/src/gallium/frontends/lavapipe/lvp_private.h @@ -180,7 +180,6 @@ bool lvp_physical_device_extension_supported(struct lvp_physical_device *dev, struct lvp_queue { struct vk_queue vk; - struct lvp_device *device; struct pipe_context *ctx; struct cso_context *cso; struct u_upload_mgr *uploader; @@ -190,6 +189,12 @@ struct lvp_queue { simple_mtx_t lock; }; +static inline struct lvp_device * +lvp_queue_device(const struct lvp_queue *queue) +{ + return (struct lvp_device *)queue->vk.base.device; +} + struct lvp_pipeline_cache { struct vk_object_base base; struct lvp_device *device;