// Copyright 2021 yuzu Emulator Project // Licensed under GPLv2 or any later version // Refer to the license.txt file included. #pragma once #include #include "common/common_types.h" #include "shader_recompiler/frontend/ir/type.h" #include #include namespace Shader { enum class TextureType : u32 { Color1D, ColorArray1D, Color2D, ColorArray2D, Color3D, ColorCube, ColorArrayCube, Shadow1D, ShadowArray1D, Shadow2D, ShadowArray2D, Shadow3D, ShadowCube, ShadowArrayCube, }; enum class Interpolation { Smooth, Flat, NoPerspective, }; struct InputVarying { Interpolation interpolation{Interpolation::Smooth}; bool used{false}; }; struct TextureDescriptor { TextureType type; u32 cbuf_index; u32 cbuf_offset; u32 count; }; using TextureDescriptors = boost::container::small_vector; struct ConstantBufferDescriptor { u32 index; u32 count; }; struct StorageBufferDescriptor { u32 cbuf_index; u32 cbuf_offset; u32 count; }; struct Info { static constexpr size_t MAX_CBUFS{18}; static constexpr size_t MAX_SSBOS{16}; bool uses_workgroup_id{}; bool uses_local_invocation_id{}; bool uses_subgroup_invocation_id{}; std::array input_generics{}; bool loads_position{}; bool loads_instance_id{}; bool loads_vertex_id{}; bool loads_front_face{}; std::array stores_frag_color{}; bool stores_frag_depth{}; std::array stores_generics{}; bool stores_position{}; bool uses_fp16{}; bool uses_fp64{}; bool uses_fp16_denorms_flush{}; bool uses_fp16_denorms_preserve{}; bool uses_fp32_denorms_flush{}; bool uses_fp32_denorms_preserve{}; bool uses_int8{}; bool uses_int16{}; bool uses_int64{}; bool uses_image_1d{}; bool uses_sampled_1d{}; bool uses_sparse_residency{}; bool uses_demote_to_helper_invocation{}; bool uses_subgroup_vote{}; IR::Type used_constant_buffer_types{}; u32 constant_buffer_mask{}; boost::container::static_vector constant_buffer_descriptors; boost::container::static_vector storage_buffers_descriptors; TextureDescriptors texture_descriptors; }; } // namespace Shader