diff options
| author | 2020-01-06 21:18:38 -0300 | |
|---|---|---|
| committer | 2020-01-06 22:02:26 -0300 | |
| commit | b392a5986ea305d805d259e414f8fb5ecc0f80b4 (patch) | |
| tree | d5d670e505b4fff0a19f1e9533e4eb9d079e64d6 /src | |
| parent | fixed_pipeline_state: Add depth clamp (diff) | |
| download | yuzu-b392a5986ea305d805d259e414f8fb5ecc0f80b4.tar.gz yuzu-b392a5986ea305d805d259e414f8fb5ecc0f80b4.tar.xz yuzu-b392a5986ea305d805d259e414f8fb5ecc0f80b4.zip | |
vk_pipeline_cache: Add file and define descriptor update template filler
This function allows us to share code between compute and graphics
pipelines compilation.
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_pipeline_cache.cpp | 43 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_pipeline_cache.h | 22 |
3 files changed, 67 insertions, 0 deletions
diff --git a/src/video_core/CMakeLists.txt b/src/video_core/CMakeLists.txt index aa008576d..efdd2c902 100644 --- a/src/video_core/CMakeLists.txt +++ b/src/video_core/CMakeLists.txt | |||
| @@ -163,6 +163,8 @@ if (ENABLE_VULKAN) | |||
| 163 | renderer_vulkan/vk_image.h | 163 | renderer_vulkan/vk_image.h |
| 164 | renderer_vulkan/vk_memory_manager.cpp | 164 | renderer_vulkan/vk_memory_manager.cpp |
| 165 | renderer_vulkan/vk_memory_manager.h | 165 | renderer_vulkan/vk_memory_manager.h |
| 166 | renderer_vulkan/vk_pipeline_cache.cpp | ||
| 167 | renderer_vulkan/vk_pipeline_cache.h | ||
| 166 | renderer_vulkan/vk_rasterizer.h | 168 | renderer_vulkan/vk_rasterizer.h |
| 167 | renderer_vulkan/vk_renderpass_cache.cpp | 169 | renderer_vulkan/vk_renderpass_cache.cpp |
| 168 | renderer_vulkan/vk_renderpass_cache.h | 170 | renderer_vulkan/vk_renderpass_cache.h |
diff --git a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp new file mode 100644 index 000000000..9bc027cbf --- /dev/null +++ b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp | |||
| @@ -0,0 +1,43 @@ | |||
| 1 | // Copyright 2019 yuzu Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #include <cstddef> | ||
| 6 | #include <vector> | ||
| 7 | |||
| 8 | #include "video_core/renderer_vulkan/declarations.h" | ||
| 9 | #include "video_core/renderer_vulkan/vk_device.h" | ||
| 10 | #include "video_core/renderer_vulkan/vk_pipeline_cache.h" | ||
| 11 | #include "video_core/renderer_vulkan/vk_update_descriptor.h" | ||
| 12 | |||
| 13 | namespace Vulkan { | ||
| 14 | |||
| 15 | void FillDescriptorUpdateTemplateEntries( | ||
| 16 | const VKDevice& device, const ShaderEntries& entries, u32& binding, u32& offset, | ||
| 17 | std::vector<vk::DescriptorUpdateTemplateEntry>& template_entries) { | ||
| 18 | static constexpr auto entry_size = static_cast<u32>(sizeof(DescriptorUpdateEntry)); | ||
| 19 | const auto AddEntry = [&](vk::DescriptorType descriptor_type, std::size_t count_) { | ||
| 20 | const u32 count = static_cast<u32>(count_); | ||
| 21 | if (descriptor_type == vk::DescriptorType::eUniformTexelBuffer && | ||
| 22 | device.GetDriverID() == vk::DriverIdKHR::eNvidiaProprietary) { | ||
| 23 | // Nvidia has a bug where updating multiple uniform texels at once causes the driver to | ||
| 24 | // crash. | ||
| 25 | for (u32 i = 0; i < count; ++i) { | ||
| 26 | template_entries.emplace_back(binding + i, 0, 1, descriptor_type, | ||
| 27 | offset + i * entry_size, entry_size); | ||
| 28 | } | ||
| 29 | } else if (count != 0) { | ||
| 30 | template_entries.emplace_back(binding, 0, count, descriptor_type, offset, entry_size); | ||
| 31 | } | ||
| 32 | offset += count * entry_size; | ||
| 33 | binding += count; | ||
| 34 | }; | ||
| 35 | |||
| 36 | AddEntry(vk::DescriptorType::eUniformBuffer, entries.const_buffers.size()); | ||
| 37 | AddEntry(vk::DescriptorType::eStorageBuffer, entries.global_buffers.size()); | ||
| 38 | AddEntry(vk::DescriptorType::eUniformTexelBuffer, entries.texel_buffers.size()); | ||
| 39 | AddEntry(vk::DescriptorType::eCombinedImageSampler, entries.samplers.size()); | ||
| 40 | AddEntry(vk::DescriptorType::eStorageImage, entries.images.size()); | ||
| 41 | } | ||
| 42 | |||
| 43 | } // namespace Vulkan | ||
diff --git a/src/video_core/renderer_vulkan/vk_pipeline_cache.h b/src/video_core/renderer_vulkan/vk_pipeline_cache.h new file mode 100644 index 000000000..532ee45cc --- /dev/null +++ b/src/video_core/renderer_vulkan/vk_pipeline_cache.h | |||
| @@ -0,0 +1,22 @@ | |||
| 1 | // Copyright 2019 yuzu Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #pragma once | ||
| 6 | |||
| 7 | #include <vector> | ||
| 8 | |||
| 9 | #include "common/common_types.h" | ||
| 10 | #include "video_core/renderer_vulkan/declarations.h" | ||
| 11 | #include "video_core/renderer_vulkan/vk_shader_decompiler.h" | ||
| 12 | #include "video_core/shader/shader_ir.h" | ||
| 13 | |||
| 14 | namespace Vulkan { | ||
| 15 | |||
| 16 | class VKDevice; | ||
| 17 | |||
| 18 | void FillDescriptorUpdateTemplateEntries( | ||
| 19 | const VKDevice& device, const ShaderEntries& entries, u32& binding, u32& offset, | ||
| 20 | std::vector<vk::DescriptorUpdateTemplateEntry>& template_entries); | ||
| 21 | |||
| 22 | } // namespace Vulkan | ||