From 37f31ae1e76943652a79b401d9eab3b53c5cbb66 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Mon, 18 Jul 2022 14:50:29 +0200 Subject: [PATCH] [dxvk] Clean up more code around object creation in meta passes --- src/dxvk/dxvk_meta_blit.cpp | 36 ++++---------------- src/dxvk/dxvk_meta_clear.cpp | 42 +++++------------------ src/dxvk/dxvk_meta_copy.cpp | 5 +-- src/dxvk/dxvk_meta_pack.cpp | 62 ++++++---------------------------- src/dxvk/dxvk_meta_pack.h | 2 +- src/dxvk/dxvk_meta_resolve.cpp | 18 ++-------- 6 files changed, 30 insertions(+), 135 deletions(-) diff --git a/src/dxvk/dxvk_meta_blit.cpp b/src/dxvk/dxvk_meta_blit.cpp index e36debc7f..e99238b93 100644 --- a/src/dxvk/dxvk_meta_blit.cpp +++ b/src/dxvk/dxvk_meta_blit.cpp @@ -74,15 +74,10 @@ namespace dxvk { VK_IMAGE_VIEW_TYPE_2D_ARRAY, }}; - VkImageViewUsageCreateInfo usageInfo; - usageInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO; - usageInfo.pNext = nullptr; + VkImageViewUsageCreateInfo usageInfo = { VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO }; usageInfo.usage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT; - VkImageViewCreateInfo info; - info.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO; - info.pNext = &usageInfo; - info.flags = 0; + VkImageViewCreateInfo info = { VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, &usageInfo }; info.image = m_dstImage->handle(); info.viewType = viewTypes.at(uint32_t(m_dstImage->info().type)); info.format = m_dstImage->info().format; @@ -102,15 +97,10 @@ namespace dxvk { VkImageView DxvkMetaBlitRenderPass::createSrcView(const VkComponentMapping& mapping) { - VkImageViewUsageCreateInfo usageInfo; - usageInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO; - usageInfo.pNext = nullptr; + VkImageViewUsageCreateInfo usageInfo = { VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO }; usageInfo.usage = VK_IMAGE_USAGE_SAMPLED_BIT; - VkImageViewCreateInfo info; - info.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO; - info.pNext = &usageInfo; - info.flags = 0; + VkImageViewCreateInfo info = { VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, &usageInfo }; info.image = m_srcImage->handle(); info.viewType = this->viewType(); info.format = m_srcImage->info().format; @@ -189,25 +179,14 @@ namespace dxvk { VkSampler DxvkMetaBlitObjects::createSampler(VkFilter filter) const { - VkSamplerCreateInfo info; - info.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO; - info.pNext = nullptr; - info.flags = 0; + VkSamplerCreateInfo info = { VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO }; info.magFilter = filter; info.minFilter = filter; info.mipmapMode = VK_SAMPLER_MIPMAP_MODE_NEAREST; info.addressModeU = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; info.addressModeV = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; info.addressModeW = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; - info.mipLodBias = 0.0f; - info.anisotropyEnable = VK_FALSE; - info.maxAnisotropy = 1.0f; - info.compareEnable = VK_FALSE; - info.compareOp = VK_COMPARE_OP_ALWAYS; - info.minLod = 0.0f; - info.maxLod = 0.0f; info.borderColor = VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK; - info.unnormalizedCoordinates = VK_FALSE; VkSampler result = VK_NULL_HANDLE; if (m_vkd->vkCreateSampler(m_vkd->device(), &info, nullptr, &result) != VK_SUCCESS) @@ -217,10 +196,7 @@ namespace dxvk { VkShaderModule DxvkMetaBlitObjects::createShaderModule(const SpirvCodeBuffer& code) const { - VkShaderModuleCreateInfo info; - info.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; - info.pNext = nullptr; - info.flags = 0; + VkShaderModuleCreateInfo info = { VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO }; info.codeSize = code.size(); info.pCode = code.data(); diff --git a/src/dxvk/dxvk_meta_clear.cpp b/src/dxvk/dxvk_meta_clear.cpp index d5b3381d2..e6b2fc363 100644 --- a/src/dxvk/dxvk_meta_clear.cpp +++ b/src/dxvk/dxvk_meta_clear.cpp @@ -116,17 +116,9 @@ namespace dxvk { VkDescriptorSetLayout DxvkMetaClearObjects::createDescriptorSetLayout( VkDescriptorType descriptorType) { - VkDescriptorSetLayoutBinding bindInfo; - bindInfo.binding = 0; - bindInfo.descriptorType = descriptorType; - bindInfo.descriptorCount = 1; - bindInfo.stageFlags = VK_SHADER_STAGE_COMPUTE_BIT; - bindInfo.pImmutableSamplers = nullptr; + VkDescriptorSetLayoutBinding bindInfo = { 0, descriptorType, 1, VK_SHADER_STAGE_COMPUTE_BIT }; - VkDescriptorSetLayoutCreateInfo dsetInfo; - dsetInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO; - dsetInfo.pNext = nullptr; - dsetInfo.flags = 0; + VkDescriptorSetLayoutCreateInfo dsetInfo = { VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO }; dsetInfo.bindingCount = 1; dsetInfo.pBindings = &bindInfo; @@ -140,17 +132,11 @@ namespace dxvk { VkPipelineLayout DxvkMetaClearObjects::createPipelineLayout( VkDescriptorSetLayout dsetLayout) { - VkPushConstantRange pushInfo; - pushInfo.stageFlags = VK_SHADER_STAGE_COMPUTE_BIT; - pushInfo.offset = 0; - pushInfo.size = sizeof(DxvkMetaClearArgs); + VkPushConstantRange pushInfo = { VK_SHADER_STAGE_COMPUTE_BIT, 0, uint32_t(sizeof(DxvkMetaClearArgs)) }; - VkPipelineLayoutCreateInfo pipeInfo; - pipeInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO; - pipeInfo.pNext = nullptr; - pipeInfo.flags = 0; - pipeInfo.setLayoutCount = 1; - pipeInfo.pSetLayouts = &dsetLayout; + VkPipelineLayoutCreateInfo pipeInfo = { VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO }; + pipeInfo.setLayoutCount = 1; + pipeInfo.pSetLayouts = &dsetLayout; pipeInfo.pushConstantRangeCount = 1; pipeInfo.pPushConstantRanges = &pushInfo; @@ -165,10 +151,7 @@ namespace dxvk { VkPipeline DxvkMetaClearObjects::createPipeline( const SpirvCodeBuffer& spirvCode, VkPipelineLayout pipeLayout) { - VkShaderModuleCreateInfo shaderInfo; - shaderInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; - shaderInfo.pNext = nullptr; - shaderInfo.flags = 0; + VkShaderModuleCreateInfo shaderInfo = { VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO }; shaderInfo.codeSize = spirvCode.size(); shaderInfo.pCode = spirvCode.data(); @@ -177,22 +160,15 @@ namespace dxvk { &shaderInfo, nullptr, &shaderModule) != VK_SUCCESS) throw DxvkError("Dxvk: Failed to create meta clear shader module"); - VkPipelineShaderStageCreateInfo stageInfo; - stageInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; - stageInfo.pNext = nullptr; - stageInfo.flags = 0; + VkPipelineShaderStageCreateInfo stageInfo = { VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO }; stageInfo.stage = VK_SHADER_STAGE_COMPUTE_BIT; stageInfo.module = shaderModule; stageInfo.pName = "main"; stageInfo.pSpecializationInfo = nullptr; - VkComputePipelineCreateInfo pipeInfo; - pipeInfo.sType = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO; - pipeInfo.pNext = nullptr; - pipeInfo.flags = 0; + VkComputePipelineCreateInfo pipeInfo = { VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO }; pipeInfo.stage = stageInfo; pipeInfo.layout = pipeLayout; - pipeInfo.basePipelineHandle = VK_NULL_HANDLE; pipeInfo.basePipelineIndex = -1; VkPipeline result = VK_NULL_HANDLE; diff --git a/src/dxvk/dxvk_meta_copy.cpp b/src/dxvk/dxvk_meta_copy.cpp index 7f7e11a29..4368f13da 100644 --- a/src/dxvk/dxvk_meta_copy.cpp +++ b/src/dxvk/dxvk_meta_copy.cpp @@ -192,10 +192,7 @@ namespace dxvk { VkShaderModule DxvkMetaCopyObjects::createShaderModule( const SpirvCodeBuffer& code) const { - VkShaderModuleCreateInfo info; - info.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; - info.pNext = nullptr; - info.flags = 0; + VkShaderModuleCreateInfo info = { VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO }; info.codeSize = code.size(); info.pCode = code.data(); diff --git a/src/dxvk/dxvk_meta_pack.cpp b/src/dxvk/dxvk_meta_pack.cpp index dbf4999b3..f18bb7cc2 100644 --- a/src/dxvk/dxvk_meta_pack.cpp +++ b/src/dxvk/dxvk_meta_pack.cpp @@ -92,23 +92,13 @@ namespace dxvk { VkSampler DxvkMetaPackObjects::createSampler() { - VkSamplerCreateInfo info; - info.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO; - info.pNext = nullptr; - info.flags = 0; + VkSamplerCreateInfo info = { VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO }; info.magFilter = VK_FILTER_NEAREST; info.minFilter = VK_FILTER_NEAREST; info.mipmapMode = VK_SAMPLER_MIPMAP_MODE_NEAREST; info.addressModeU = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; info.addressModeV = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; info.addressModeW = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; - info.mipLodBias = 0.0f; - info.anisotropyEnable = VK_FALSE; - info.maxAnisotropy = 1.0f; - info.compareEnable = VK_FALSE; - info.compareOp = VK_COMPARE_OP_ALWAYS; - info.minLod = 0.0f; - info.maxLod = 0.0f; info.borderColor = VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK; info.unnormalizedCoordinates = VK_FALSE; @@ -126,10 +116,7 @@ namespace dxvk { { 2, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_COMPUTE_BIT, &m_sampler }, }}; - VkDescriptorSetLayoutCreateInfo dsetInfo; - dsetInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO; - dsetInfo.pNext = nullptr; - dsetInfo.flags = 0; + VkDescriptorSetLayoutCreateInfo dsetInfo = { VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO }; dsetInfo.bindingCount = bindings.size(); dsetInfo.pBindings = bindings.data(); @@ -147,10 +134,7 @@ namespace dxvk { { 2, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1, VK_SHADER_STAGE_COMPUTE_BIT, nullptr }, }}; - VkDescriptorSetLayoutCreateInfo dsetInfo; - dsetInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO; - dsetInfo.pNext = nullptr; - dsetInfo.flags = 0; + VkDescriptorSetLayoutCreateInfo dsetInfo = { VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO }; dsetInfo.bindingCount = bindings.size(); dsetInfo.pBindings = bindings.data(); @@ -163,16 +147,10 @@ namespace dxvk { VkPipelineLayout DxvkMetaPackObjects::createPipelineLayout( VkDescriptorSetLayout dsetLayout, - size_t pushLayout) { - VkPushConstantRange push; - push.stageFlags = VK_SHADER_STAGE_COMPUTE_BIT; - push.offset = 0; - push.size = pushLayout; + uint32_t pushLayout) { + VkPushConstantRange push = { VK_SHADER_STAGE_COMPUTE_BIT, 0, pushLayout }; - VkPipelineLayoutCreateInfo layoutInfo; - layoutInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO; - layoutInfo.pNext = nullptr; - layoutInfo.flags = 0; + VkPipelineLayoutCreateInfo layoutInfo = { VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO }; layoutInfo.setLayoutCount = 1; layoutInfo.pSetLayouts = &dsetLayout; layoutInfo.pushConstantRangeCount = 1; @@ -192,17 +170,13 @@ namespace dxvk { { 2, 0, 1, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, offsetof(DxvkMetaPackDescriptors, srcStencil), 0 }, }}; - VkDescriptorUpdateTemplateCreateInfo templateInfo; - templateInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO; - templateInfo.pNext = nullptr; - templateInfo.flags = 0; + VkDescriptorUpdateTemplateCreateInfo templateInfo = { VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO }; templateInfo.descriptorUpdateEntryCount = bindings.size(); templateInfo.pDescriptorUpdateEntries = bindings.data(); templateInfo.templateType = VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET; templateInfo.descriptorSetLayout = m_dsetLayoutPack; templateInfo.pipelineBindPoint = VK_PIPELINE_BIND_POINT_COMPUTE; templateInfo.pipelineLayout = m_pipeLayoutPack; - templateInfo.set = 0; VkDescriptorUpdateTemplate result = VK_NULL_HANDLE; if (m_vkd->vkCreateDescriptorUpdateTemplate(m_vkd->device(), @@ -219,10 +193,7 @@ namespace dxvk { { 2, 0, 1, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, offsetof(DxvkMetaUnpackDescriptors, srcBuffer), 0 }, }}; - VkDescriptorUpdateTemplateCreateInfo templateInfo; - templateInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO; - templateInfo.pNext = nullptr; - templateInfo.flags = 0; + VkDescriptorUpdateTemplateCreateInfo templateInfo = { VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO }; templateInfo.descriptorUpdateEntryCount = bindings.size(); templateInfo.pDescriptorUpdateEntries = bindings.data(); templateInfo.templateType = VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET; @@ -242,10 +213,7 @@ namespace dxvk { VkPipeline DxvkMetaPackObjects::createPipeline( VkPipelineLayout pipeLayout, const SpirvCodeBuffer& code) { - VkShaderModuleCreateInfo shaderInfo; - shaderInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; - shaderInfo.pNext = nullptr; - shaderInfo.flags = 0; + VkShaderModuleCreateInfo shaderInfo = { VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO }; shaderInfo.codeSize = code.size(); shaderInfo.pCode = code.data(); @@ -254,22 +222,14 @@ namespace dxvk { if (m_vkd->vkCreateShaderModule(m_vkd->device(), &shaderInfo, nullptr, &module) != VK_SUCCESS) throw DxvkError("DxvkMetaPackObjects: Failed to create shader module"); - VkPipelineShaderStageCreateInfo stageInfo; - stageInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; - stageInfo.pNext = nullptr; - stageInfo.flags = 0; + VkPipelineShaderStageCreateInfo stageInfo = { VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO }; stageInfo.stage = VK_SHADER_STAGE_COMPUTE_BIT; stageInfo.module = module; stageInfo.pName = "main"; - stageInfo.pSpecializationInfo = nullptr; - VkComputePipelineCreateInfo pipeInfo; - pipeInfo.sType = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO; - pipeInfo.pNext = nullptr; - pipeInfo.flags = 0; + VkComputePipelineCreateInfo pipeInfo = { VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO }; pipeInfo.stage = stageInfo; pipeInfo.layout = pipeLayout; - pipeInfo.basePipelineHandle = VK_NULL_HANDLE; pipeInfo.basePipelineIndex = -1; VkPipeline result = VK_NULL_HANDLE; diff --git a/src/dxvk/dxvk_meta_pack.h b/src/dxvk/dxvk_meta_pack.h index 7c69d8c36..133ce24b2 100644 --- a/src/dxvk/dxvk_meta_pack.h +++ b/src/dxvk/dxvk_meta_pack.h @@ -118,7 +118,7 @@ namespace dxvk { VkPipelineLayout createPipelineLayout( VkDescriptorSetLayout dsetLayout, - size_t pushLayout); + uint32_t pushLayout); VkDescriptorUpdateTemplateKHR createPackDescriptorUpdateTemplate(); diff --git a/src/dxvk/dxvk_meta_resolve.cpp b/src/dxvk/dxvk_meta_resolve.cpp index b71b686bc..26cde48e5 100644 --- a/src/dxvk/dxvk_meta_resolve.cpp +++ b/src/dxvk/dxvk_meta_resolve.cpp @@ -116,25 +116,14 @@ namespace dxvk { VkSampler DxvkMetaResolveObjects::createSampler() const { - VkSamplerCreateInfo info; - info.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO; - info.pNext = nullptr; - info.flags = 0; + VkSamplerCreateInfo info = { VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO }; info.magFilter = VK_FILTER_NEAREST; info.minFilter = VK_FILTER_NEAREST; info.mipmapMode = VK_SAMPLER_MIPMAP_MODE_NEAREST; info.addressModeU = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; info.addressModeV = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; info.addressModeW = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; - info.mipLodBias = 0.0f; - info.anisotropyEnable = VK_FALSE; - info.maxAnisotropy = 1.0f; - info.compareEnable = VK_FALSE; - info.compareOp = VK_COMPARE_OP_ALWAYS; - info.minLod = 0.0f; - info.maxLod = 0.0f; info.borderColor = VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK; - info.unnormalizedCoordinates = VK_FALSE; VkSampler result = VK_NULL_HANDLE; if (m_vkd->vkCreateSampler(m_vkd->device(), &info, nullptr, &result) != VK_SUCCESS) @@ -145,10 +134,7 @@ namespace dxvk { VkShaderModule DxvkMetaResolveObjects::createShaderModule( const SpirvCodeBuffer& code) const { - VkShaderModuleCreateInfo info; - info.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; - info.pNext = nullptr; - info.flags = 0; + VkShaderModuleCreateInfo info = { VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO }; info.codeSize = code.size(); info.pCode = code.data();