Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/HansKristian-Work/vkd3d-proton.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'libs/vkd3d/swapchain.c')
-rw-r--r--libs/vkd3d/swapchain.c78
1 files changed, 21 insertions, 57 deletions
diff --git a/libs/vkd3d/swapchain.c b/libs/vkd3d/swapchain.c
index 69988164..7bc000df 100644
--- a/libs/vkd3d/swapchain.c
+++ b/libs/vkd3d/swapchain.c
@@ -194,8 +194,6 @@ struct d3d12_swapchain
struct
{
- VkDescriptorPool pool;
- VkDescriptorSet sets[DXGI_MAX_SWAP_CHAIN_BUFFERS];
VkImageView vk_image_views[DXGI_MAX_SWAP_CHAIN_BUFFERS];
} descriptors;
@@ -816,7 +814,7 @@ static bool d3d12_swapchain_has_user_images(struct d3d12_swapchain *swapchain)
static bool d3d12_swapchain_has_user_descriptors(struct d3d12_swapchain *swapchain)
{
- return swapchain->descriptors.pool != VK_NULL_HANDLE;
+ return swapchain->descriptors.vk_image_views[0] != VK_NULL_HANDLE;
}
static HRESULT d3d12_swapchain_get_user_graphics_pipeline(struct d3d12_swapchain *swapchain, VkFormat format)
@@ -845,21 +843,13 @@ static void d3d12_swapchain_destroy_user_descriptors(struct d3d12_swapchain *swa
VK_CALL(vkDestroyImageView(device->vk_device, swapchain->descriptors.vk_image_views[i], NULL));
swapchain->descriptors.vk_image_views[i] = VK_NULL_HANDLE;
}
-
- VK_CALL(vkDestroyDescriptorPool(device->vk_device, swapchain->descriptors.pool, NULL));
- swapchain->descriptors.pool = VK_NULL_HANDLE;
}
static HRESULT d3d12_swapchain_create_user_descriptors(struct d3d12_swapchain *swapchain, VkFormat vk_format)
{
struct d3d12_device *device = d3d12_swapchain_device(swapchain);
const struct vkd3d_vk_device_procs *vk_procs = &device->vk_procs;
- VkDescriptorPoolCreateInfo pool_create_info;
- VkDescriptorSetAllocateInfo allocate_info;
VkImageViewCreateInfo image_view_info;
- VkDescriptorImageInfo image_info;
- VkWriteDescriptorSet write_info;
- VkDescriptorPoolSize pool_sizes;
VkResult vr;
UINT i;
@@ -885,49 +875,6 @@ static HRESULT d3d12_swapchain_create_user_descriptors(struct d3d12_swapchain *s
return hresult_from_vk_result(vr);
}
- pool_sizes.descriptorCount = swapchain->desc.BufferCount;
- pool_sizes.type = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
-
- pool_create_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO;
- pool_create_info.pNext = NULL;
- pool_create_info.flags = 0;
- pool_create_info.poolSizeCount = 1;
- pool_create_info.pPoolSizes = &pool_sizes;
- pool_create_info.maxSets = swapchain->desc.BufferCount;
- if ((vr = VK_CALL(vkCreateDescriptorPool(device->vk_device, &pool_create_info, NULL, &swapchain->descriptors.pool))))
- return hresult_from_vk_result(vr);
-
- allocate_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO;
- allocate_info.pNext = NULL;
- allocate_info.descriptorPool = swapchain->descriptors.pool;
- allocate_info.descriptorSetCount = 1;
- allocate_info.pSetLayouts = &swapchain->pipeline.vk_set_layout;
-
- for (i = 0; i < swapchain->desc.BufferCount; i++)
- {
- if ((vr = VK_CALL(vkAllocateDescriptorSets(device->vk_device, &allocate_info, &swapchain->descriptors.sets[i]))))
- return hresult_from_vk_result(vr);
- }
-
- write_info.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
- write_info.pNext = NULL;
- write_info.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
- write_info.pBufferInfo = NULL;
- write_info.pTexelBufferView = NULL;
- write_info.pImageInfo = &image_info;
- write_info.dstBinding = 0;
- write_info.dstArrayElement = 0;
- write_info.descriptorCount = 1;
- image_info.imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
- image_info.sampler = VK_NULL_HANDLE;
-
- for (i = 0; i < swapchain->desc.BufferCount; i++)
- {
- write_info.dstSet = swapchain->descriptors.sets[i];
- image_info.imageView = swapchain->descriptors.vk_image_views[i];
- VK_CALL(vkUpdateDescriptorSets(device->vk_device, 1, &write_info, 0, NULL));
- }
-
return S_OK;
}
@@ -1002,6 +949,8 @@ static VkResult d3d12_swapchain_record_swapchain_blit(struct d3d12_swapchain *sw
VkCommandBufferBeginInfo begin_info;
VkImageMemoryBarrier image_barrier;
VkRenderingInfoKHR rendering_info;
+ VkDescriptorImageInfo image_info;
+ VkWriteDescriptorSet write_info;
VkViewport viewport;
VkResult vr;
@@ -1076,9 +1025,24 @@ static VkResult d3d12_swapchain_record_swapchain_blit(struct d3d12_swapchain *sw
VK_CALL(vkCmdSetViewport(vk_cmd_buffer, 0, 1, &viewport));
VK_CALL(vkCmdSetScissor(vk_cmd_buffer, 0, 1, &rendering_info.renderArea));
VK_CALL(vkCmdBindPipeline(vk_cmd_buffer, VK_PIPELINE_BIND_POINT_GRAPHICS, swapchain->pipeline.vk_pipeline));
- VK_CALL(vkCmdBindDescriptorSets(vk_cmd_buffer, VK_PIPELINE_BIND_POINT_GRAPHICS,
- swapchain->pipeline.vk_pipeline_layout, 0, 1, &swapchain->descriptors.sets[src_index],
- 0, NULL));
+
+ write_info.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
+ write_info.pNext = NULL;
+ write_info.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
+ write_info.pBufferInfo = NULL;
+ write_info.dstSet = VK_NULL_HANDLE;
+ write_info.pTexelBufferView = NULL;
+ write_info.pImageInfo = &image_info;
+ write_info.dstBinding = 0;
+ write_info.dstArrayElement = 0;
+ write_info.descriptorCount = 1;
+ image_info.imageView = swapchain->descriptors.vk_image_views[src_index];
+ image_info.imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
+ image_info.sampler = VK_NULL_HANDLE;
+
+ VK_CALL(vkCmdPushDescriptorSetKHR(vk_cmd_buffer, VK_PIPELINE_BIND_POINT_GRAPHICS,
+ swapchain->pipeline.vk_pipeline_layout, 0, 1, &write_info));
+
VK_CALL(vkCmdDraw(vk_cmd_buffer, 3, 1, 0, 0));
VK_CALL(vkCmdEndRenderingKHR(vk_cmd_buffer));