vkd3d: Add external API to perform initial transition.

Relevant for swapchain since a swapchain resource can be presented right
away without ever having been touched by an API call.

Signed-off-by: Hans-Kristian Arntzen <post@arntzen-software.no>
This commit is contained in:
Hans-Kristian Arntzen 2020-10-08 15:40:50 +02:00
parent 65df050d0d
commit ce9db3f476
2 changed files with 16 additions and 0 deletions

View File

@ -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);

View File

@ -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)
{