mirror of
https://git.eden-emu.dev/eden-emu/eden
synced 2026-04-26 22:29:00 +02:00
[gl, vk] Corroborating new helpers order
This commit is contained in:
parent
25636a90be
commit
a064cf76a3
2 changed files with 65 additions and 63 deletions
|
|
@ -18,6 +18,7 @@
|
||||||
#include "video_core/renderer_vulkan/vk_scheduler.h"
|
#include "video_core/renderer_vulkan/vk_scheduler.h"
|
||||||
#include "video_core/renderer_vulkan/vk_update_descriptor.h"
|
#include "video_core/renderer_vulkan/vk_update_descriptor.h"
|
||||||
#include "video_core/shader_notify.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_device.h"
|
||||||
#include "video_core/vulkan_common/vulkan_wrapper.h"
|
#include "video_core/vulkan_common/vulkan_wrapper.h"
|
||||||
#include <optional>
|
#include <optional>
|
||||||
|
|
@ -27,6 +28,38 @@ namespace Vulkan {
|
||||||
using Shader::ImageBufferDescriptor;
|
using Shader::ImageBufferDescriptor;
|
||||||
using Shader::Backend::SPIRV::RESCALING_LAYOUT_WORDS_OFFSET;
|
using Shader::Backend::SPIRV::RESCALING_LAYOUT_WORDS_OFFSET;
|
||||||
using Tegra::Texture::TexturePair;
|
using Tegra::Texture::TexturePair;
|
||||||
|
using VideoCore::Surface::PixelFormat;
|
||||||
|
using VideoCore::Surface::PixelFormatNumeric;
|
||||||
|
|
||||||
|
std::optional<PixelFormatNumeric> 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_,
|
ComputePipeline::ComputePipeline(const Device& device_, vk::PipelineCache& pipeline_cache_,
|
||||||
DescriptorPool& descriptor_pool,
|
DescriptorPool& descriptor_pool,
|
||||||
|
|
@ -41,38 +74,6 @@ ComputePipeline::ComputePipeline(const Device& device_, vk::PipelineCache& pipel
|
||||||
if (shader_notify) {
|
if (shader_notify) {
|
||||||
shader_notify->MarkShaderBuilding();
|
shader_notify->MarkShaderBuilding();
|
||||||
}
|
}
|
||||||
std::optional<VideoCore::Surface::PixelFormatNumeric>
|
|
||||||
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(),
|
std::copy_n(info.constant_buffer_used_sizes.begin(), uniform_buffer_sizes.size(),
|
||||||
uniform_buffer_sizes.begin());
|
uniform_buffer_sizes.begin());
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@
|
||||||
#include "video_core/shader_notify.h"
|
#include "video_core/shader_notify.h"
|
||||||
#include "video_core/texture_cache/samples_helper.h"
|
#include "video_core/texture_cache/samples_helper.h"
|
||||||
#include "video_core/texture_cache/texture_cache.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/vulkan_common/vulkan_device.h"
|
||||||
|
|
||||||
#if defined(_MSC_VER) && defined(NDEBUG)
|
#if defined(_MSC_VER) && defined(NDEBUG)
|
||||||
|
|
@ -47,10 +48,41 @@ using Tegra::Texture::TexturePair;
|
||||||
using VideoCore::Surface::PixelFormat;
|
using VideoCore::Surface::PixelFormat;
|
||||||
using VideoCore::Surface::PixelFormatFromDepthFormat;
|
using VideoCore::Surface::PixelFormatFromDepthFormat;
|
||||||
using VideoCore::Surface::PixelFormatFromRenderTargetFormat;
|
using VideoCore::Surface::PixelFormatFromRenderTargetFormat;
|
||||||
|
using VideoCore::Surface::PixelFormatNumeric;
|
||||||
|
|
||||||
constexpr size_t NUM_STAGES = Maxwell::MaxShaderStage;
|
constexpr size_t NUM_STAGES = Maxwell::MaxShaderStage;
|
||||||
constexpr size_t MAX_IMAGE_ELEMENTS = 64;
|
constexpr size_t MAX_IMAGE_ELEMENTS = 64;
|
||||||
|
|
||||||
|
std::optional<PixelFormatNumeric> 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<const Shader::Info> infos) {
|
DescriptorLayoutBuilder MakeBuilder(const Device& device, std::span<const Shader::Info> infos) {
|
||||||
DescriptorLayoutBuilder builder{device};
|
DescriptorLayoutBuilder builder{device};
|
||||||
for (size_t index = 0; index < infos.size(); ++index) {
|
for (size_t index = 0; index < infos.size(); ++index) {
|
||||||
|
|
@ -63,37 +95,6 @@ DescriptorLayoutBuilder MakeBuilder(const Device& device, std::span<const Shader
|
||||||
};
|
};
|
||||||
builder.Add(infos[index], stages.at(index));
|
builder.Add(infos[index], stages.at(index));
|
||||||
}
|
}
|
||||||
std::optional<VideoCore::Surface::PixelFormatNumeric>
|
|
||||||
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;
|
return builder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue