// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project // SPDX-FileCopyrightText: 2024 sudachi Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #pragma once #include #include #include #include #include "common/common_types.h" #include "shader_recompiler/varying_state.h" namespace Shader { enum class AttributeType : u8 { Float, SignedInt, UnsignedInt, SignedScaled, UnsignedScaled, Disabled, }; enum class InputTopology { Points, Lines, LinesAdjacency, Triangles, TrianglesAdjacency, }; struct InputTopologyVertices { static u32 vertices(InputTopology input_topology) { switch (input_topology) { case InputTopology::Lines: return 2; case InputTopology::LinesAdjacency: return 4; case InputTopology::Triangles: return 3; case InputTopology::TrianglesAdjacency: return 6; case InputTopology::Points: default: return 1; } } }; enum class CompareFunction { Never, Less, Equal, LessThanEqual, Greater, NotEqual, GreaterThanEqual, Always, }; enum class TessPrimitive { Isolines, Triangles, Quads, }; enum class TessSpacing { Equal, FractionalOdd, FractionalEven, }; struct TransformFeedbackVarying { u32 buffer{}; u32 stride{}; u32 offset{}; u32 components{}; }; struct RuntimeInfo { std::array generic_input_types{}; VaryingState previous_stage_stores; std::map previous_stage_legacy_stores_mapping; bool convert_depth_mode{}; bool force_early_z{}; TessPrimitive tess_primitive{}; TessSpacing tess_spacing{}; bool tess_clockwise{}; InputTopology input_topology{}; std::optional fixed_state_point_size; std::optional alpha_test_func; float alpha_test_reference{}; /// Static Y negate value bool y_negate{}; /// Use storage buffers instead of global pointers on GLASM bool glasm_use_storage_buffers{}; /// Transform feedback state for each varying std::array xfb_varyings{}; u32 xfb_count{0}; }; } // namespace Shader