diff options
| author | Lioncash <mathew1800@gmail.com> | 2019-06-01 07:55:09 -0400 |
|---|---|---|
| committer | Lioncash <mathew1800@gmail.com> | 2019-06-01 10:07:57 -0400 |
| commit | a9663669dc1037a04e37ae30efe18c0650547ac5 (patch) | |
| tree | b0bafacb909c3360951bb6b2781a94b97a9284be /Source/Core/VideoBackends/Vulkan/ObjectCache.cpp | |
| parent | a4837a5c5dc5d71f4b93dcb2fd5b80c5cfab381a (diff) | |
Common/CommonFuncs: Remove now-unneccessary ArraySize function
Since C++17, non-member std::size() is present in the standard library
which also operates on regular C arrays. Given that, we can just replace
usages of ArraySize with that where applicable.
In many cases, we can just change the actual C array ArraySize() was
called on into a std::array and just use its .size() member function
instead.
In some other cases, we can collapse the loops they were used in, into a
ranged-for loop, eliminating the need for en explicit bounds query.
Diffstat (limited to 'Source/Core/VideoBackends/Vulkan/ObjectCache.cpp')
| -rw-r--r-- | Source/Core/VideoBackends/Vulkan/ObjectCache.cpp | 79 |
1 files changed, 43 insertions, 36 deletions
diff --git a/Source/Core/VideoBackends/Vulkan/ObjectCache.cpp b/Source/Core/VideoBackends/Vulkan/ObjectCache.cpp index 59690118aa..1db168e9e9 100644 --- a/Source/Core/VideoBackends/Vulkan/ObjectCache.cpp +++ b/Source/Core/VideoBackends/Vulkan/ObjectCache.cpp @@ -5,9 +5,8 @@ #include "VideoBackends/Vulkan/ObjectCache.h" #include <algorithm> -#include <sstream> +#include <array> #include <type_traits> -#include <xxhash.h> #include "Common/Assert.h" #include "Common/CommonFuncs.h" @@ -110,27 +109,31 @@ bool ObjectCache::CreateDescriptorSetLayouts() { // The geometry shader buffer must be last in this binding set, as we don't include it // if geometry shaders are not supported by the device. See the decrement below. - static const VkDescriptorSetLayoutBinding standard_ubo_bindings[] = { + static const std::array<VkDescriptorSetLayoutBinding, 3> standard_ubo_bindings{{ {UBO_DESCRIPTOR_SET_BINDING_PS, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, 1, VK_SHADER_STAGE_FRAGMENT_BIT}, {UBO_DESCRIPTOR_SET_BINDING_VS, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, 1, VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT}, {UBO_DESCRIPTOR_SET_BINDING_GS, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, 1, - VK_SHADER_STAGE_GEOMETRY_BIT}}; + VK_SHADER_STAGE_GEOMETRY_BIT}, + }}; - static const VkDescriptorSetLayoutBinding standard_sampler_bindings[] = { + static const std::array<VkDescriptorSetLayoutBinding, 1> standard_sampler_bindings{{ {0, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, static_cast<u32>(NUM_PIXEL_SHADER_SAMPLERS), - VK_SHADER_STAGE_FRAGMENT_BIT}}; + VK_SHADER_STAGE_FRAGMENT_BIT}, + }}; - static const VkDescriptorSetLayoutBinding standard_ssbo_bindings[] = { - {0, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1, VK_SHADER_STAGE_FRAGMENT_BIT}}; + static const std::array<VkDescriptorSetLayoutBinding, 1> standard_ssbo_bindings{{ + {0, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1, VK_SHADER_STAGE_FRAGMENT_BIT}, + }}; - static const VkDescriptorSetLayoutBinding utility_ubo_bindings[] = { - 0, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, 1, - VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_GEOMETRY_BIT | VK_SHADER_STAGE_FRAGMENT_BIT}; + static const std::array<VkDescriptorSetLayoutBinding, 1> utility_ubo_bindings{{ + {0, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, 1, + VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_GEOMETRY_BIT | VK_SHADER_STAGE_FRAGMENT_BIT}, + }}; // Utility samplers aren't dynamically indexed. - static const VkDescriptorSetLayoutBinding utility_sampler_bindings[] = { + static const std::array<VkDescriptorSetLayoutBinding, 9> utility_sampler_bindings{{ {0, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_FRAGMENT_BIT}, {1, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_FRAGMENT_BIT}, {2, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_FRAGMENT_BIT}, @@ -140,36 +143,37 @@ bool ObjectCache::CreateDescriptorSetLayouts() {6, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_FRAGMENT_BIT}, {7, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_FRAGMENT_BIT}, {8, VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, 1, VK_SHADER_STAGE_FRAGMENT_BIT}, - }; + }}; - static const VkDescriptorSetLayoutBinding compute_set_bindings[] = { + static const std::array<VkDescriptorSetLayoutBinding, 6> compute_set_bindings{{ {0, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, 1, VK_SHADER_STAGE_COMPUTE_BIT}, {1, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_COMPUTE_BIT}, {2, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_COMPUTE_BIT}, {3, VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, 1, VK_SHADER_STAGE_COMPUTE_BIT}, {4, VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, 1, VK_SHADER_STAGE_COMPUTE_BIT}, {5, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, 1, VK_SHADER_STAGE_COMPUTE_BIT}, - }; + }}; - VkDescriptorSetLayoutCreateInfo create_infos[NUM_DESCRIPTOR_SET_LAYOUTS] = { + std::array<VkDescriptorSetLayoutCreateInfo, NUM_DESCRIPTOR_SET_LAYOUTS> create_infos{{ {VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO, nullptr, 0, - static_cast<u32>(ArraySize(standard_ubo_bindings)), standard_ubo_bindings}, + static_cast<u32>(standard_ubo_bindings.size()), standard_ubo_bindings.data()}, {VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO, nullptr, 0, - static_cast<u32>(ArraySize(standard_sampler_bindings)), standard_sampler_bindings}, + static_cast<u32>(standard_sampler_bindings.size()), standard_sampler_bindings.data()}, {VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO, nullptr, 0, - static_cast<u32>(ArraySize(standard_ssbo_bindings)), standard_ssbo_bindings}, + static_cast<u32>(standard_ssbo_bindings.size()), standard_ssbo_bindings.data()}, {VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO, nullptr, 0, - static_cast<u32>(ArraySize(utility_ubo_bindings)), utility_ubo_bindings}, + static_cast<u32>(utility_ubo_bindings.size()), utility_ubo_bindings.data()}, {VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO, nullptr, 0, - static_cast<u32>(ArraySize(utility_sampler_bindings)), utility_sampler_bindings}, + static_cast<u32>(utility_sampler_bindings.size()), utility_sampler_bindings.data()}, {VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO, nullptr, 0, - static_cast<u32>(ArraySize(compute_set_bindings)), compute_set_bindings}}; + static_cast<u32>(compute_set_bindings.size()), compute_set_bindings.data()}, + }}; // Don't set the GS bit if geometry shaders aren't available. if (!g_ActiveConfig.backend_info.bSupportsGeometryShaders) create_infos[DESCRIPTOR_SET_LAYOUT_STANDARD_UNIFORM_BUFFERS].bindingCount--; - for (size_t i = 0; i < NUM_DESCRIPTOR_SET_LAYOUTS; i++) + for (size_t i = 0; i < create_infos.size(); i++) { VkResult res = vkCreateDescriptorSetLayout(g_vulkan_context->GetDevice(), &create_infos[i], nullptr, &m_descriptor_set_layouts[i]); @@ -194,41 +198,44 @@ void ObjectCache::DestroyDescriptorSetLayouts() bool ObjectCache::CreatePipelineLayouts() { - VkResult res; - // Descriptor sets for each pipeline layout. // In the standard set, the SSBO must be the last descriptor, as we do not include it // when fragment stores and atomics are not supported by the device. - const VkDescriptorSetLayout standard_sets[] = { + const std::array<VkDescriptorSetLayout, 3> standard_sets{ m_descriptor_set_layouts[DESCRIPTOR_SET_LAYOUT_STANDARD_UNIFORM_BUFFERS], m_descriptor_set_layouts[DESCRIPTOR_SET_LAYOUT_STANDARD_SAMPLERS], - m_descriptor_set_layouts[DESCRIPTOR_SET_LAYOUT_STANDARD_SHADER_STORAGE_BUFFERS]}; - const VkDescriptorSetLayout utility_sets[] = { + m_descriptor_set_layouts[DESCRIPTOR_SET_LAYOUT_STANDARD_SHADER_STORAGE_BUFFERS], + }; + const std::array<VkDescriptorSetLayout, 2> utility_sets{ m_descriptor_set_layouts[DESCRIPTOR_SET_LAYOUT_UTILITY_UNIFORM_BUFFER], - m_descriptor_set_layouts[DESCRIPTOR_SET_LAYOUT_UTILITY_SAMPLERS]}; - const VkDescriptorSetLayout compute_sets[] = { - m_descriptor_set_layouts[DESCRIPTOR_SET_LAYOUT_COMPUTE]}; + m_descriptor_set_layouts[DESCRIPTOR_SET_LAYOUT_UTILITY_SAMPLERS], + }; + const std::array<VkDescriptorSetLayout, 1> compute_sets{ + m_descriptor_set_layouts[DESCRIPTOR_SET_LAYOUT_COMPUTE], + }; // Info for each pipeline layout - VkPipelineLayoutCreateInfo pipeline_layout_info[NUM_PIPELINE_LAYOUTS] = { + std::array<VkPipelineLayoutCreateInfo, NUM_PIPELINE_LAYOUTS> pipeline_layout_info{{ // Standard {VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO, nullptr, 0, - static_cast<u32>(ArraySize(standard_sets)), standard_sets, 0, nullptr}, + static_cast<u32>(standard_sets.size()), standard_sets.data(), 0, nullptr}, // Utility {VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO, nullptr, 0, - static_cast<u32>(ArraySize(utility_sets)), utility_sets, 0, nullptr}, + static_cast<u32>(utility_sets.size()), utility_sets.data(), 0, nullptr}, // Compute {VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO, nullptr, 0, - static_cast<u32>(ArraySize(compute_sets)), compute_sets, 0, nullptr}}; + static_cast<u32>(compute_sets.size()), compute_sets.data(), 0, nullptr}, + }}; // If bounding box is unsupported, don't bother with the SSBO descriptor set. if (!g_ActiveConfig.backend_info.bSupportsBBox) pipeline_layout_info[PIPELINE_LAYOUT_STANDARD].setLayoutCount--; - for (size_t i = 0; i < NUM_PIPELINE_LAYOUTS; i++) + for (size_t i = 0; i < pipeline_layout_info.size(); i++) { + VkResult res; if ((res = vkCreatePipelineLayout(g_vulkan_context->GetDevice(), &pipeline_layout_info[i], nullptr, &m_pipeline_layouts[i])) != VK_SUCCESS) { |
