| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- // Copyright 2021 yuzu Emulator Project
- // Licensed under GPLv2 or any later version
- // Refer to the license.txt file included.
- #pragma once
- #include <array>
- #include <optional>
- #include <vector>
- #include "common/common_types.h"
- namespace Shader {
- enum class AttributeType : u8 {
- Float,
- SignedInt,
- UnsignedInt,
- Disabled,
- };
- enum class InputTopology {
- Points,
- Lines,
- LinesAdjacency,
- Triangles,
- TrianglesAdjacency,
- };
- 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 Profile {
- u32 supported_spirv{0x00010000};
- bool unified_descriptor_binding{};
- bool support_descriptor_aliasing{};
- bool support_int8{};
- bool support_int16{};
- bool support_vertex_instance_id{};
- bool support_float_controls{};
- bool support_separate_denorm_behavior{};
- bool support_separate_rounding_mode{};
- bool support_fp16_denorm_preserve{};
- bool support_fp32_denorm_preserve{};
- bool support_fp16_denorm_flush{};
- bool support_fp32_denorm_flush{};
- bool support_fp16_signed_zero_nan_preserve{};
- bool support_fp32_signed_zero_nan_preserve{};
- bool support_fp64_signed_zero_nan_preserve{};
- bool support_explicit_workgroup_layout{};
- bool support_vote{};
- bool support_viewport_index_layer_non_geometry{};
- bool support_viewport_mask{};
- bool support_typeless_image_loads{};
- bool support_demote_to_helper_invocation{};
- bool support_int64_atomics{};
- bool support_derivative_control{};
- bool support_gl_nv_gpu_shader_5{};
- bool support_gl_amd_gpu_shader_half_float{};
- bool support_gl_vertex_viewport_layer{};
- bool support_gl_texture_shadow_lod{};
- bool warp_size_potentially_larger_than_guest{};
- bool lower_left_origin_mode{};
- /// Fragment outputs have to be declared even if they are not written to avoid undefined values.
- /// See Ori and the Blind Forest's main menu for reference.
- bool need_declared_frag_colors{};
- /// OpFClamp is broken and OpFMax + OpFMin should be used instead
- bool has_broken_spirv_clamp{};
- /// Offset image operands with an unsigned type do not work
- bool has_broken_unsigned_image_offsets{};
- /// Signed instructions with unsigned data types are misinterpreted
- bool has_broken_signed_operations{};
- /// Dynamic vec4 indexing is broken on some OpenGL drivers
- bool has_gl_component_indexing_bug{};
- /// Ignores SPIR-V ordered vs unordered using GLSL semantics
- bool ignore_nan_fp_comparisons{};
- };
- struct RuntimeInfo {
- std::array<AttributeType, 32> generic_input_types{};
- bool convert_depth_mode{};
- bool force_early_z{};
- TessPrimitive tess_primitive{};
- TessSpacing tess_spacing{};
- bool tess_clockwise{};
- InputTopology input_topology{};
- std::optional<float> fixed_state_point_size;
- std::optional<CompareFunction> 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{};
- std::vector<TransformFeedbackVarying> xfb_varyings;
- };
- } // namespace Shader
|