diff --git a/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp b/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp index e09900faee..704a7d644f 100644 --- a/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp +++ b/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp @@ -19,6 +19,7 @@ #include "video_core/renderer_vulkan/vk_scheduler.h" #include "video_core/renderer_vulkan/vk_update_descriptor.h" #include "video_core/shader_notify.h" +#include "video_core/surface.h" #include "video_core/vulkan_common/vulkan_device.h" #include "video_core/vulkan_common/vulkan_wrapper.h" #include "video_core/gpu_logging/gpu_logging.h" @@ -30,6 +31,38 @@ namespace Vulkan { using Shader::ImageBufferDescriptor; using Shader::Backend::SPIRV::RESCALING_LAYOUT_WORDS_OFFSET; using Tegra::Texture::TexturePair; +using VideoCore::Surface::PixelFormat; +using VideoCore::Surface::PixelFormatNumeric; + +std::optional NumericFromComponentType( + Shader::SamplerComponentType component_type) { + switch (component_type) { + case Shader::SamplerComponentType::Float: + return PixelFormatNumeric::Float; + case Shader::SamplerComponentType::Sint: + return PixelFormatNumeric::Sint; + case Shader::SamplerComponentType::Uint: + return PixelFormatNumeric::Uint; + default: + return std::nullopt; + } +} + +PixelFormat ResolveTexelBufferFormat(PixelFormat format, + Shader::SamplerComponentType component_type) { + const auto desired_numeric = NumericFromComponentType(component_type); + if (!desired_numeric) { + return format; + } + const auto current_numeric = VideoCore::Surface::GetPixelFormatNumericType(format); + if (*desired_numeric == current_numeric) { + return format; + } + if (const auto variant = VideoCore::Surface::FindPixelFormatVariant(format, *desired_numeric)) { + return *variant; + } + return format; +} ComputePipeline::ComputePipeline(const Device& device_, vk::PipelineCache& pipeline_cache_, DescriptorPool& descriptor_pool, @@ -44,38 +77,6 @@ ComputePipeline::ComputePipeline(const Device& device_, vk::PipelineCache& pipel if (shader_notify) { shader_notify->MarkShaderBuilding(); } - std::optional - NumericFromComponentType(Shader::SamplerComponentType component_type) { - using VideoCore::Surface::PixelFormatNumeric; - switch (component_type) { - case Shader::SamplerComponentType::Float: - return PixelFormatNumeric::Float; - case Shader::SamplerComponentType::Sint: - return PixelFormatNumeric::Sint; - case Shader::SamplerComponentType::Uint: - return PixelFormatNumeric::Uint; - default: - return std::nullopt; - } - } - - VideoCore::Surface::PixelFormat ResolveTexelBufferFormat( - VideoCore::Surface::PixelFormat format, Shader::SamplerComponentType component_type) { - const auto desired_numeric = NumericFromComponentType(component_type); - if (!desired_numeric) { - return format; - } - const auto current_numeric = VideoCore::Surface::GetPixelFormatNumericType(format); - if (*desired_numeric == current_numeric) { - return format; - } - if (const auto variant = - VideoCore::Surface::FindPixelFormatVariant(format, *desired_numeric)) { - return *variant; - } - return format; - } - std::copy_n(info.constant_buffer_used_sizes.begin(), uniform_buffer_sizes.size(), uniform_buffer_sizes.begin()); diff --git a/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp b/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp index 4b4b9cf5ca..c02653685e 100644 --- a/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp +++ b/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp @@ -28,6 +28,7 @@ #include "video_core/shader_notify.h" #include "video_core/texture_cache/samples_helper.h" #include "video_core/texture_cache/texture_cache.h" +#include "video_core/surface.h" #include "video_core/vulkan_common/vulkan_device.h" #include "video_core/gpu_logging/gpu_logging.h" #include "common/settings.h" @@ -50,10 +51,41 @@ using Tegra::Texture::TexturePair; using VideoCore::Surface::PixelFormat; using VideoCore::Surface::PixelFormatFromDepthFormat; using VideoCore::Surface::PixelFormatFromRenderTargetFormat; +using VideoCore::Surface::PixelFormatNumeric; constexpr size_t NUM_STAGES = Maxwell::MaxShaderStage; constexpr size_t INLINE_IMAGE_ELEMENTS = 64; +std::optional NumericFromComponentType( + Shader::SamplerComponentType component_type) { + switch (component_type) { + case Shader::SamplerComponentType::Float: + return PixelFormatNumeric::Float; + case Shader::SamplerComponentType::Sint: + return PixelFormatNumeric::Sint; + case Shader::SamplerComponentType::Uint: + return PixelFormatNumeric::Uint; + default: + return std::nullopt; + } +} + +PixelFormat ResolveTexelBufferFormat(PixelFormat format, + Shader::SamplerComponentType component_type) { + const auto desired_numeric = NumericFromComponentType(component_type); + if (!desired_numeric) { + return format; + } + const auto current_numeric = VideoCore::Surface::GetPixelFormatNumericType(format); + if (*desired_numeric == current_numeric) { + return format; + } + if (const auto variant = VideoCore::Surface::FindPixelFormatVariant(format, *desired_numeric)) { + return *variant; + } + return format; +} + DescriptorLayoutBuilder MakeBuilder(const Device& device, std::span infos) { DescriptorLayoutBuilder builder{device}; for (size_t index = 0; index < infos.size(); ++index) { @@ -66,37 +98,6 @@ DescriptorLayoutBuilder MakeBuilder(const Device& device, std::span - NumericFromComponentType(Shader::SamplerComponentType component_type) { - using VideoCore::Surface::PixelFormatNumeric; - switch (component_type) { - case Shader::SamplerComponentType::Float: - return PixelFormatNumeric::Float; - case Shader::SamplerComponentType::Sint: - return PixelFormatNumeric::Sint; - case Shader::SamplerComponentType::Uint: - return PixelFormatNumeric::Uint; - default: - return std::nullopt; - } - } - - VideoCore::Surface::PixelFormat ResolveTexelBufferFormat( - VideoCore::Surface::PixelFormat format, Shader::SamplerComponentType component_type) { - const auto desired_numeric = NumericFromComponentType(component_type); - if (!desired_numeric) { - return format; - } - const auto current_numeric = VideoCore::Surface::GetPixelFormatNumericType(format); - if (*desired_numeric == current_numeric) { - return format; - } - if (const auto variant = - VideoCore::Surface::FindPixelFormatVariant(format, *desired_numeric)) { - return *variant; - } - return format; - } return builder; }