shader: Unify shader stage types
This commit is contained in:
		| @@ -9,13 +9,20 @@ | |||||||
| namespace Shader { | namespace Shader { | ||||||
|  |  | ||||||
| enum class Stage : u32 { | enum class Stage : u32 { | ||||||
|     Compute, |  | ||||||
|     VertexA, |  | ||||||
|     VertexB, |     VertexB, | ||||||
|     TessellationControl, |     TessellationControl, | ||||||
|     TessellationEval, |     TessellationEval, | ||||||
|     Geometry, |     Geometry, | ||||||
|     Fragment, |     Fragment, | ||||||
|  |  | ||||||
|  |     Compute, | ||||||
|  |  | ||||||
|  |     VertexA, | ||||||
| }; | }; | ||||||
|  | constexpr u32 MaxStageTypes = 6; | ||||||
|  |  | ||||||
|  | [[nodiscard]] constexpr Stage StageFromIndex(size_t index) noexcept { | ||||||
|  |     return static_cast<Stage>(static_cast<size_t>(Stage::VertexB) + index); | ||||||
|  | } | ||||||
|  |  | ||||||
| } // namespace Shader | } // namespace Shader | ||||||
|   | |||||||
| @@ -8,7 +8,6 @@ | |||||||
| #include "core/core.h" | #include "core/core.h" | ||||||
| #include "video_core/engines/kepler_compute.h" | #include "video_core/engines/kepler_compute.h" | ||||||
| #include "video_core/engines/maxwell_3d.h" | #include "video_core/engines/maxwell_3d.h" | ||||||
| #include "video_core/engines/shader_type.h" |  | ||||||
| #include "video_core/memory_manager.h" | #include "video_core/memory_manager.h" | ||||||
| #include "video_core/rasterizer_interface.h" | #include "video_core/rasterizer_interface.h" | ||||||
| #include "video_core/renderer_base.h" | #include "video_core/renderer_base.h" | ||||||
|   | |||||||
| @@ -8,7 +8,6 @@ | |||||||
| #include "core/core.h" | #include "core/core.h" | ||||||
| #include "core/core_timing.h" | #include "core/core_timing.h" | ||||||
| #include "video_core/engines/maxwell_3d.h" | #include "video_core/engines/maxwell_3d.h" | ||||||
| #include "video_core/engines/shader_type.h" |  | ||||||
| #include "video_core/gpu.h" | #include "video_core/gpu.h" | ||||||
| #include "video_core/memory_manager.h" | #include "video_core/memory_manager.h" | ||||||
| #include "video_core/rasterizer_interface.h" | #include "video_core/rasterizer_interface.h" | ||||||
|   | |||||||
| @@ -20,7 +20,6 @@ | |||||||
| #include "video_core/engines/const_buffer_info.h" | #include "video_core/engines/const_buffer_info.h" | ||||||
| #include "video_core/engines/engine_interface.h" | #include "video_core/engines/engine_interface.h" | ||||||
| #include "video_core/engines/engine_upload.h" | #include "video_core/engines/engine_upload.h" | ||||||
| #include "video_core/engines/shader_type.h" |  | ||||||
| #include "video_core/gpu.h" | #include "video_core/gpu.h" | ||||||
| #include "video_core/macro/macro.h" | #include "video_core/macro/macro.h" | ||||||
| #include "video_core/textures/texture.h" | #include "video_core/textures/texture.h" | ||||||
|   | |||||||
| @@ -1,21 +0,0 @@ | |||||||
| // Copyright 2019 yuzu Emulator Project |  | ||||||
| // Licensed under GPLv2 or any later version |  | ||||||
| // Refer to the license.txt file included. |  | ||||||
|  |  | ||||||
| #pragma once |  | ||||||
|  |  | ||||||
| #include "common/common_types.h" |  | ||||||
|  |  | ||||||
| namespace Tegra::Engines { |  | ||||||
|  |  | ||||||
| enum class ShaderType : u32 { |  | ||||||
|     Vertex = 0, |  | ||||||
|     TesselationControl = 1, |  | ||||||
|     TesselationEval = 2, |  | ||||||
|     Geometry = 3, |  | ||||||
|     Fragment = 4, |  | ||||||
|     Compute = 5, |  | ||||||
| }; |  | ||||||
| static constexpr std::size_t MaxShaderTypes = 6; |  | ||||||
|  |  | ||||||
| } // namespace Tegra::Engines |  | ||||||
| @@ -17,6 +17,7 @@ | |||||||
| #include "common/logging/log.h" | #include "common/logging/log.h" | ||||||
| #include "common/scope_exit.h" | #include "common/scope_exit.h" | ||||||
| #include "common/settings.h" | #include "common/settings.h" | ||||||
|  | #include "shader_recompiler/stage.h" | ||||||
| #include "video_core/renderer_opengl/gl_device.h" | #include "video_core/renderer_opengl/gl_device.h" | ||||||
| #include "video_core/renderer_opengl/gl_resource_manager.h" | #include "video_core/renderer_opengl/gl_resource_manager.h" | ||||||
|  |  | ||||||
| @@ -59,16 +60,18 @@ bool HasExtension(std::span<const std::string_view> extensions, std::string_view | |||||||
|     return std::ranges::find(extensions, extension) != extensions.end(); |     return std::ranges::find(extensions, extension) != extensions.end(); | ||||||
| } | } | ||||||
|  |  | ||||||
| std::array<u32, Tegra::Engines::MaxShaderTypes> BuildMaxUniformBuffers() noexcept { | std::array<u32, Shader::MaxStageTypes> BuildMaxUniformBuffers() noexcept { | ||||||
|     std::array<u32, Tegra::Engines::MaxShaderTypes> max; |     std::array<u32, Shader::MaxStageTypes> max; | ||||||
|     std::ranges::transform(LIMIT_UBOS, max.begin(), |     std::ranges::transform(LIMIT_UBOS, max.begin(), &GetInteger<u32>); | ||||||
|                            [](GLenum pname) { return GetInteger<u32>(pname); }); |  | ||||||
|     return max; |     return max; | ||||||
| } | } | ||||||
|  |  | ||||||
| bool IsASTCSupported() { | bool IsASTCSupported() { | ||||||
|     static constexpr std::array targets = {GL_TEXTURE_2D, GL_TEXTURE_2D_ARRAY}; |     static constexpr std::array targets{ | ||||||
|     static constexpr std::array formats = { |         GL_TEXTURE_2D, | ||||||
|  |         GL_TEXTURE_2D_ARRAY, | ||||||
|  |     }; | ||||||
|  |     static constexpr std::array formats{ | ||||||
|         GL_COMPRESSED_RGBA_ASTC_4x4_KHR,           GL_COMPRESSED_RGBA_ASTC_5x4_KHR, |         GL_COMPRESSED_RGBA_ASTC_4x4_KHR,           GL_COMPRESSED_RGBA_ASTC_5x4_KHR, | ||||||
|         GL_COMPRESSED_RGBA_ASTC_5x5_KHR,           GL_COMPRESSED_RGBA_ASTC_6x5_KHR, |         GL_COMPRESSED_RGBA_ASTC_5x5_KHR,           GL_COMPRESSED_RGBA_ASTC_6x5_KHR, | ||||||
|         GL_COMPRESSED_RGBA_ASTC_6x6_KHR,           GL_COMPRESSED_RGBA_ASTC_8x5_KHR, |         GL_COMPRESSED_RGBA_ASTC_6x6_KHR,           GL_COMPRESSED_RGBA_ASTC_8x5_KHR, | ||||||
| @@ -84,11 +87,10 @@ bool IsASTCSupported() { | |||||||
|         GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR,  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR, |         GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR,  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR, | ||||||
|         GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR, |         GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR, | ||||||
|     }; |     }; | ||||||
|     static constexpr std::array required_support = { |     static constexpr std::array required_support{ | ||||||
|         GL_VERTEX_TEXTURE,   GL_TESS_CONTROL_TEXTURE, GL_TESS_EVALUATION_TEXTURE, |         GL_VERTEX_TEXTURE,   GL_TESS_CONTROL_TEXTURE, GL_TESS_EVALUATION_TEXTURE, | ||||||
|         GL_GEOMETRY_TEXTURE, GL_FRAGMENT_TEXTURE,     GL_COMPUTE_TEXTURE, |         GL_GEOMETRY_TEXTURE, GL_FRAGMENT_TEXTURE,     GL_COMPUTE_TEXTURE, | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|     for (const GLenum target : targets) { |     for (const GLenum target : targets) { | ||||||
|         for (const GLenum format : formats) { |         for (const GLenum format : formats) { | ||||||
|             for (const GLenum support : required_support) { |             for (const GLenum support : required_support) { | ||||||
|   | |||||||
| @@ -6,7 +6,7 @@ | |||||||
|  |  | ||||||
| #include <cstddef> | #include <cstddef> | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "video_core/engines/shader_type.h" | #include "shader_recompiler/stage.h" | ||||||
|  |  | ||||||
| namespace OpenGL { | namespace OpenGL { | ||||||
|  |  | ||||||
| @@ -16,8 +16,8 @@ public: | |||||||
|  |  | ||||||
|     [[nodiscard]] std::string GetVendorName() const; |     [[nodiscard]] std::string GetVendorName() const; | ||||||
|  |  | ||||||
|     u32 GetMaxUniformBuffers(Tegra::Engines::ShaderType shader_type) const noexcept { |     u32 GetMaxUniformBuffers(Shader::Stage stage) const noexcept { | ||||||
|         return max_uniform_buffers[static_cast<std::size_t>(shader_type)]; |         return max_uniform_buffers[static_cast<size_t>(stage)]; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     size_t GetUniformBufferAlignment() const { |     size_t GetUniformBufferAlignment() const { | ||||||
| @@ -148,8 +148,7 @@ private: | |||||||
|     static bool TestVariableAoffi(); |     static bool TestVariableAoffi(); | ||||||
|     static bool TestPreciseBug(); |     static bool TestPreciseBug(); | ||||||
|  |  | ||||||
|     std::string vendor_name; |     std::array<u32, Shader::MaxStageTypes> max_uniform_buffers{}; | ||||||
|     std::array<u32, Tegra::Engines::MaxShaderTypes> max_uniform_buffers{}; |  | ||||||
|     size_t uniform_buffer_alignment{}; |     size_t uniform_buffer_alignment{}; | ||||||
|     size_t shader_storage_alignment{}; |     size_t shader_storage_alignment{}; | ||||||
|     u32 max_vertex_attributes{}; |     u32 max_vertex_attributes{}; | ||||||
| @@ -181,6 +180,8 @@ private: | |||||||
|     bool has_sparse_texture_2{}; |     bool has_sparse_texture_2{}; | ||||||
|     bool warp_size_potentially_larger_than_guest{}; |     bool warp_size_potentially_larger_than_guest{}; | ||||||
|     bool need_fastmath_off{}; |     bool need_fastmath_off{}; | ||||||
|  |  | ||||||
|  |     std::string vendor_name; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| } // namespace OpenGL | } // namespace OpenGL | ||||||
|   | |||||||
| @@ -23,7 +23,6 @@ | |||||||
| #include "core/memory.h" | #include "core/memory.h" | ||||||
| #include "video_core/engines/kepler_compute.h" | #include "video_core/engines/kepler_compute.h" | ||||||
| #include "video_core/engines/maxwell_3d.h" | #include "video_core/engines/maxwell_3d.h" | ||||||
| #include "video_core/engines/shader_type.h" |  | ||||||
| #include "video_core/memory_manager.h" | #include "video_core/memory_manager.h" | ||||||
| #include "video_core/renderer_opengl/gl_device.h" | #include "video_core/renderer_opengl/gl_device.h" | ||||||
| #include "video_core/renderer_opengl/gl_query_cache.h" | #include "video_core/renderer_opengl/gl_query_cache.h" | ||||||
| @@ -40,7 +39,6 @@ namespace OpenGL { | |||||||
| using Maxwell = Tegra::Engines::Maxwell3D::Regs; | using Maxwell = Tegra::Engines::Maxwell3D::Regs; | ||||||
| using GLvec4 = std::array<GLfloat, 4>; | using GLvec4 = std::array<GLfloat, 4>; | ||||||
|  |  | ||||||
| using Tegra::Engines::ShaderType; |  | ||||||
| using VideoCore::Surface::PixelFormat; | using VideoCore::Surface::PixelFormat; | ||||||
| using VideoCore::Surface::SurfaceTarget; | using VideoCore::Surface::SurfaceTarget; | ||||||
| using VideoCore::Surface::SurfaceType; | using VideoCore::Surface::SurfaceType; | ||||||
|   | |||||||
| @@ -26,7 +26,6 @@ | |||||||
| #include "shader_recompiler/profile.h" | #include "shader_recompiler/profile.h" | ||||||
| #include "video_core/engines/kepler_compute.h" | #include "video_core/engines/kepler_compute.h" | ||||||
| #include "video_core/engines/maxwell_3d.h" | #include "video_core/engines/maxwell_3d.h" | ||||||
| #include "video_core/engines/shader_type.h" |  | ||||||
| #include "video_core/memory_manager.h" | #include "video_core/memory_manager.h" | ||||||
| #include "video_core/renderer_opengl/gl_rasterizer.h" | #include "video_core/renderer_opengl/gl_rasterizer.h" | ||||||
| #include "video_core/renderer_opengl/gl_resource_manager.h" | #include "video_core/renderer_opengl/gl_resource_manager.h" | ||||||
|   | |||||||
| @@ -17,7 +17,6 @@ | |||||||
| #include "shader_recompiler/host_translate_info.h" | #include "shader_recompiler/host_translate_info.h" | ||||||
| #include "shader_recompiler/object_pool.h" | #include "shader_recompiler/object_pool.h" | ||||||
| #include "shader_recompiler/profile.h" | #include "shader_recompiler/profile.h" | ||||||
| #include "video_core/engines/shader_type.h" |  | ||||||
| #include "video_core/renderer_opengl/gl_compute_pipeline.h" | #include "video_core/renderer_opengl/gl_compute_pipeline.h" | ||||||
| #include "video_core/renderer_opengl/gl_graphics_pipeline.h" | #include "video_core/renderer_opengl/gl_graphics_pipeline.h" | ||||||
| #include "video_core/renderer_opengl/gl_shader_context.h" | #include "video_core/renderer_opengl/gl_shader_context.h" | ||||||
|   | |||||||
| @@ -266,19 +266,20 @@ FormatInfo SurfaceFormat(const Device& device, FormatType format_type, bool with | |||||||
|     return {device.GetSupportedFormat(tuple.format, usage, format_type), attachable, storage}; |     return {device.GetSupportedFormat(tuple.format, usage, format_type), attachable, storage}; | ||||||
| } | } | ||||||
|  |  | ||||||
| VkShaderStageFlagBits ShaderStage(Tegra::Engines::ShaderType stage) { | VkShaderStageFlagBits ShaderStage(Shader::Stage stage) { | ||||||
|     switch (stage) { |     switch (stage) { | ||||||
|     case Tegra::Engines::ShaderType::Vertex: |     case Shader::Stage::VertexA: | ||||||
|  |     case Shader::Stage::VertexB: | ||||||
|         return VK_SHADER_STAGE_VERTEX_BIT; |         return VK_SHADER_STAGE_VERTEX_BIT; | ||||||
|     case Tegra::Engines::ShaderType::TesselationControl: |     case Shader::Stage::TessellationControl: | ||||||
|         return VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT; |         return VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT; | ||||||
|     case Tegra::Engines::ShaderType::TesselationEval: |     case Shader::Stage::TessellationEval: | ||||||
|         return VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT; |         return VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT; | ||||||
|     case Tegra::Engines::ShaderType::Geometry: |     case Shader::Stage::Geometry: | ||||||
|         return VK_SHADER_STAGE_GEOMETRY_BIT; |         return VK_SHADER_STAGE_GEOMETRY_BIT; | ||||||
|     case Tegra::Engines::ShaderType::Fragment: |     case Shader::Stage::Fragment: | ||||||
|         return VK_SHADER_STAGE_FRAGMENT_BIT; |         return VK_SHADER_STAGE_FRAGMENT_BIT; | ||||||
|     case Tegra::Engines::ShaderType::Compute: |     case Shader::Stage::Compute: | ||||||
|         return VK_SHADER_STAGE_COMPUTE_BIT; |         return VK_SHADER_STAGE_COMPUTE_BIT; | ||||||
|     } |     } | ||||||
|     UNIMPLEMENTED_MSG("Unimplemented shader stage={}", stage); |     UNIMPLEMENTED_MSG("Unimplemented shader stage={}", stage); | ||||||
|   | |||||||
| @@ -5,6 +5,7 @@ | |||||||
| #pragma once | #pragma once | ||||||
|  |  | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
|  | #include "shader_recompiler/stage.h" | ||||||
| #include "video_core/engines/maxwell_3d.h" | #include "video_core/engines/maxwell_3d.h" | ||||||
| #include "video_core/surface.h" | #include "video_core/surface.h" | ||||||
| #include "video_core/textures/texture.h" | #include "video_core/textures/texture.h" | ||||||
| @@ -45,7 +46,7 @@ struct FormatInfo { | |||||||
| [[nodiscard]] FormatInfo SurfaceFormat(const Device& device, FormatType format_type, bool with_srgb, | [[nodiscard]] FormatInfo SurfaceFormat(const Device& device, FormatType format_type, bool with_srgb, | ||||||
|                                        PixelFormat pixel_format); |                                        PixelFormat pixel_format); | ||||||
|  |  | ||||||
| VkShaderStageFlagBits ShaderStage(Tegra::Engines::ShaderType stage); | VkShaderStageFlagBits ShaderStage(Shader::Stage stage); | ||||||
|  |  | ||||||
| VkPrimitiveTopology PrimitiveTopology(const Device& device, Maxwell::PrimitiveTopology topology); | VkPrimitiveTopology PrimitiveTopology(const Device& device, Maxwell::PrimitiveTopology topology); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -737,7 +737,7 @@ void GraphicsPipeline::MakePipeline(VkRenderPass render_pass) { | |||||||
|                 .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, |                 .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, | ||||||
|                 .pNext = nullptr, |                 .pNext = nullptr, | ||||||
|                 .flags = 0, |                 .flags = 0, | ||||||
|                 .stage = MaxwellToVK::ShaderStage(static_cast<Tegra::Engines::ShaderType>(stage)), |                 .stage = MaxwellToVK::ShaderStage(Shader::StageFromIndex(stage)), | ||||||
|                 .module = *spv_modules[stage], |                 .module = *spv_modules[stage], | ||||||
|                 .pName = "main", |                 .pName = "main", | ||||||
|                 .pSpecializationInfo = nullptr, |                 .pSpecializationInfo = nullptr, | ||||||
|   | |||||||
| @@ -58,8 +58,6 @@ struct DrawParams { | |||||||
|     bool is_indexed; |     bool is_indexed; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| constexpr auto COMPUTE_SHADER_INDEX = static_cast<size_t>(Tegra::Engines::ShaderType::Compute); |  | ||||||
|  |  | ||||||
| VkViewport GetViewportState(const Device& device, const Maxwell& regs, size_t index) { | VkViewport GetViewportState(const Device& device, const Maxwell& regs, size_t index) { | ||||||
|     const auto& src = regs.viewport_transform[index]; |     const auto& src = regs.viewport_transform[index]; | ||||||
|     const float width = src.scale_x * 2.0f; |     const float width = src.scale_x * 2.0f; | ||||||
|   | |||||||
| @@ -22,7 +22,7 @@ | |||||||
| namespace VideoCommon { | namespace VideoCommon { | ||||||
|  |  | ||||||
| constexpr std::array<char, 8> MAGIC_NUMBER{'y', 'u', 'z', 'u', 'c', 'a', 'c', 'h'}; | constexpr std::array<char, 8> MAGIC_NUMBER{'y', 'u', 'z', 'u', 'c', 'a', 'c', 'h'}; | ||||||
| constexpr u32 CACHE_VERSION = 3; | constexpr u32 CACHE_VERSION = 4; | ||||||
|  |  | ||||||
| constexpr size_t INST_SIZE = sizeof(u64); | constexpr size_t INST_SIZE = sizeof(u64); | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user