diff --git a/include/vkd3d.h b/include/vkd3d.h index 6bec396a..8c2e1bd6 100644 --- a/include/vkd3d.h +++ b/include/vkd3d.h @@ -182,6 +182,7 @@ VKD3D_EXPORT struct vkd3d_instance *vkd3d_instance_from_device(ID3D12Device *dev VKD3D_EXPORT uint32_t vkd3d_get_vk_queue_family_index(ID3D12CommandQueue *queue); VKD3D_EXPORT VkQueue vkd3d_acquire_vk_queue(ID3D12CommandQueue *queue); VKD3D_EXPORT void vkd3d_release_vk_queue(ID3D12CommandQueue *queue); +VKD3D_EXPORT void vkd3d_enqueue_initial_transition(ID3D12CommandQueue *queue, ID3D12Resource *resource); VKD3D_EXPORT HRESULT vkd3d_create_image_resource(ID3D12Device *device, const struct vkd3d_image_resource_create_info *create_info, ID3D12Resource **resource); diff --git a/libs/vkd3d/command.c b/libs/vkd3d/command.c index d75489ad..fcccb498 100644 --- a/libs/vkd3d/command.c +++ b/libs/vkd3d/command.c @@ -8411,6 +8411,21 @@ VKD3D_EXPORT void vkd3d_release_vk_queue(ID3D12CommandQueue *queue) d3d12_command_queue_release_serialized(d3d12_queue); } +VKD3D_EXPORT void vkd3d_enqueue_initial_transition(ID3D12CommandQueue *queue, ID3D12Resource *resource) +{ + struct d3d12_command_queue_submission sub; + struct d3d12_command_queue *d3d12_queue = impl_from_ID3D12CommandQueue(queue); + struct d3d12_resource *d3d12_resource = unsafe_impl_from_ID3D12Resource(resource); + + memset(&sub, 0, sizeof(sub)); + sub.type = VKD3D_SUBMISSION_EXECUTE; + sub.execute.transition_count = 1; + sub.execute.transitions = vkd3d_malloc(sizeof(*sub.execute.transitions)); + sub.execute.transitions[0].resource = d3d12_resource; + sub.execute.transitions[0].perform_initial_transition = true; + d3d12_command_queue_add_submission(d3d12_queue, &sub); +} + /* ID3D12CommandSignature */ static inline struct d3d12_command_signature *impl_from_ID3D12CommandSignature(ID3D12CommandSignature *iface) {