2#include <ossia/detail/variant.hpp>
4#include <score_plugin_gfx_export.h>
15class SCORE_PLUGIN_GFX_TEST_EXPORT invalid_file :
public std::runtime_error
18 using std::runtime_error::runtime_error;
27 using value_type = bool;
28 using has_default = std::true_type;
34 using value_type = int64_t;
35 using has_minmax = std::true_type;
36 std::vector<ossia::variant<int64_t, double, std::string>> values;
37 std::vector<std::string> labels;
53 std::optional<int64_t> min;
54 std::optional<int64_t> max;
59 using value_type = double;
60 using has_minmax = std::true_type;
68 using value_type = std::array<double, 2>;
69 using has_minmax = std::true_type;
70 std::optional<value_type> def{};
71 std::optional<value_type> min{};
72 std::optional<value_type> max{};
77 using value_type = std::array<double, 3>;
78 using has_minmax = std::true_type;
79 std::optional<value_type> def{};
80 std::optional<value_type> min{};
81 std::optional<value_type> max{};
92 using value_type = std::array<double, 4>;
93 using has_minmax = std::true_type;
94 std::optional<value_type> def{};
95 std::optional<value_type> min{};
96 std::optional<value_type> max{};
123 std::string min_filter;
124 std::string mag_filter;
125 std::string mipmap_mode;
126 std::optional<float> anisotropy;
127 std::string border_color;
128 std::optional<float> lod_bias;
129 std::optional<float> min_lod;
130 std::optional<float> max_lod;
133 friend bool operator==(
const sampler_config&,
const sampler_config&) =
default;
138enum class composite_mode : uint8_t
152 bool is_array{
false};
160 bool is_static{
false};
161 sampler_config sampler;
182 sampler_config sampler;
192struct audio_sampler_config
201 audio_sampler_config sampler;
207 audio_sampler_config sampler;
210struct audioHist_input
213 audio_sampler_config sampler;
234 std::vector<layout_field> layout;
239 std::string visibility{
"vertex+fragment"};
253 std::vector<layout_field> layout;
255 std::string buffer_usage;
260 bool persistent{
false};
265 std::string visibility{
"fragment"};
274 bool is_array{
false};
275 bool is_static{
false};
277 sampler_config sampler;
280struct csf_image_input
285 std::string width_expression;
286 std::string height_expression;
287 std::string depth_expression;
307 bool is_array{
false};
308 std::string layers_expression;
314 std::string visibility;
320 bool persistent{
false};
328 bool generate_mips{
false};
331 composite_mode composite{composite_mode::unspecified};
333 bool is3D() const noexcept {
return dimensions == 3 || !depth_expression.empty(); }
334 bool isCube() const noexcept {
return cubemap; }
345 std::string geometry;
346 std::string attribute;
347 std::string auxiliary;
350 struct attribute_request
353 std::string semantic;
369 std::optional<copy_from> forward;
376 struct auxiliary_request
381 std::vector<storage_input::layout_field> layout;
386 std::optional<copy_from> forward;
395 bool persistent{
false};
403 bool is_uniform{
false};
412 struct auxiliary_texture_request
416 bool is_array{
false};
417 bool is_cubemap{
false};
418 bool is_depth{
false};
426 bool is_storage{
false};
427 std::string format{
"rgba8"};
428 std::string access{
"read_write"};
440 std::string width_expression;
441 std::string height_expression;
442 std::string depth_expression;
443 std::string layers_expression;
445 sampler_config sampler;
457 std::string ladder_base;
458 int ladder_index{-1};
461 bool in_ladder() const noexcept {
return !ladder_base.empty(); }
462 bool owns_ladder() const noexcept {
return ladder_index == 0 && in_ladder(); }
465 std::vector<attribute_request> attributes;
466 std::vector<auxiliary_request> auxiliary;
467 std::vector<auxiliary_texture_request> auxiliary_textures;
469 std::string vertex_count;
470 std::string instance_count;
476 bool persistent{
false};
483 std::string format_id;
488 std::string topology;
490 struct indirect_request
499 bool draw_count{
false};
514 std::optional<indirect_request> indirect;
519 using input_impl = ossia::variant<
520 float_input, long_input, event_input, bool_input, color_input, point2d_input,
521 point3d_input, image_input, cubemap_input, audio_input, audioFFT_input,
522 audioHist_input, storage_input, texture_input, csf_image_input,
523 geometry_input, uniform_input>;
532enum class attribute_type
615struct vertex_attribute
618 attribute_type type{};
628 std::string semantic;
636 std::string interpolation;
639struct vertex_input : vertex_attribute
666 std::vector<double> default_val;
668struct vertex_output : vertex_attribute
671struct fragment_input : vertex_attribute
674struct fragment_output : vertex_attribute
686enum class alpha_mode : uint8_t
693struct blend_attachment
696 std::string src_color{
"src_alpha"};
697 std::string dst_color{
"one_minus_src_alpha"};
698 std::string op_color{
"add"};
699 std::string src_alpha{
"one"};
700 std::string dst_alpha{
"one_minus_src_alpha"};
701 std::string op_alpha{
"add"};
702 std::string color_write{
"rgba"};
705struct stencil_op_state
707 std::string fail_op{
"keep"};
708 std::string depth_fail_op{
"keep"};
709 std::string pass_op{
"keep"};
710 std::string compare_op{
"always"};
715 std::optional<bool> depth_test;
716 std::optional<bool> depth_write;
717 std::optional<std::string> depth_compare;
718 std::optional<float> depth_bias;
719 std::optional<float> slope_scaled_depth_bias;
721 std::optional<std::string> cull_mode;
722 std::optional<std::string> front_face;
723 std::optional<std::string> polygon_mode;
724 std::optional<float> line_width;
747 std::optional<uint32_t> vertex_count;
748 std::optional<uint32_t> instance_count;
749 std::string vertex_count_expression;
750 std::string instance_count_expression;
754 std::optional<std::string> topology;
759 std::optional<std::string> color_write;
763 std::optional<blend_attachment> blend_all;
764 std::vector<blend_attachment> blend_per_attachment;
767 std::optional<bool> stencil_test;
768 std::optional<uint32_t> stencil_read_mask;
769 std::optional<uint32_t> stencil_write_mask;
770 std::optional<stencil_op_state> stencil_front;
771 std::optional<stencil_op_state> stencil_back;
781 std::optional<std::array<int, 2>> shading_rate;
788 bool float_storage{};
789 bool nearest_filter{};
790 std::string width_expression{};
791 std::string height_expression{};
799 std::string z_expression{};
804 std::string format{};
807 pipeline_state override_state;
810struct output_declaration
841 bool is_cubemap{
false};
852 bool generate_mips{
false};
870 std::string width_expression;
871 std::string height_expression;
874 alpha_mode alpha{alpha_mode::unspecified};
877 composite_mode composite{composite_mode::unspecified};
882enum class render_queue : uint8_t
894 std::string format{
"rgba16f"};
895 std::array<float, 4> clear{0.f, 0.f, 0.f, 0.f};
896 std::optional<blend_attachment> blend;
897 composite_mode composite{composite_mode::unspecified};
904 bool declared{
false};
905 std::string output{
"isf_FragColor"};
906 std::optional<blend_attachment> blend;
907 composite_mode composite{composite_mode::unspecified};
908 bool depth_write{
false};
909 std::string depth_input;
910 std::string fragment;
915 bool declared{
false};
916 std::vector<layer_target> targets;
917 bool depth_test{
true};
920 bool enabled() const noexcept {
return declared; }
932 std::string description;
934 std::vector<std::string> categories;
939 alpha_mode alpha{alpha_mode::unspecified};
943 composite_mode composite{composite_mode::unspecified};
944 std::vector<input> inputs;
945 std::vector<output_declaration> outputs;
946 std::vector<pass> passes;
947 std::vector<std::string> pass_targets;
948 bool default_vertex_shader{};
952 std::string primitive_mode;
953 std::string line_size;
954 std::array<double, 4> background_color{};
957 struct type_definition
960 std::vector<storage_input::layout_field> layout;
962 std::vector<type_definition> types;
966 std::array<int, 3> local_size{16, 16, 1};
967 std::string execution_type{
"2D_IMAGE"};
968 std::string target_resource;
973 std::array<int, 3> workgroups{1, 1, 1};
976 int indirect_byte_offset{0};
977 std::array<std::string, 3> stride{
"1",
"1",
"1"};
978 std::array<int, 3> user_dispatch_ports{-1, -1, -1};
980 std::vector<dispatch_info> csf_passes;
983 std::vector<dispatch_info> csf_pass_candidates;
985 bool csf_reads_num_workgroups{};
989 std::vector<vertex_input> vertex_inputs;
990 std::vector<vertex_output> vertex_outputs;
991 std::vector<fragment_input> fragment_inputs;
992 std::vector<fragment_output> fragment_outputs;
996 std::vector<geometry_input::auxiliary_request> auxiliary;
1004 std::vector<geometry_input::auxiliary_texture_request> auxiliary_textures;
1009 std::vector<std::string> warnings;
1013 pipeline_state default_state;
1017 int multiview_count{0};
1048 struct raster_execution_model
1052 std::string count_expression;
1054 raster_execution_model execution_model;
1059 std::vector<std::string> extensions{
1060 "GL_GOOGLE_include_directive",
"GL_GOOGLE_cpp_style_line_directive"};
1068 int clip_distances{0};
1075 bool primitive_data{
false};
1080 int cull_distances{0};
1107 render_queue queue{render_queue::unspecified};
1120 std::string depth_layout;
1131 std::vector<int64_t> extents;
1133SCORE_PLUGIN_GFX_EXPORT
1134array_type parse_array_type(std::string_view type);
1138SCORE_PLUGIN_GFX_EXPORT
1139alpha_mode resolve_alpha(
1140 const descriptor& d,
const output_declaration* out =
nullptr) noexcept;
1144SCORE_PLUGIN_GFX_EXPORT
1145composite_mode resolve_composite(
1146 const descriptor& d, const output_declaration* out =
nullptr) noexcept;
1147SCORE_PLUGIN_GFX_EXPORT
1148composite_mode resolve_composite(const descriptor& d, const csf_image_input& img) noexcept;
1153SCORE_PLUGIN_GFX_EXPORT
1154bool premultiplied_by_engine(alpha_mode alpha, composite_mode composite) noexcept;
1158SCORE_PLUGIN_GFX_EXPORT
1159bool depth_nearer_is_greater(const descriptor& d) noexcept;
1162SCORE_PLUGIN_GFX_EXPORT
1163bool draws_transparent(const descriptor& d) noexcept;
1168SCORE_PLUGIN_GFX_EXPORT
1169bool renders_cube_faces(const descriptor& d) noexcept;
1178SCORE_PLUGIN_GFX_EXPORT
1179bool raw_raster_point_quads(const descriptor& d) noexcept;
1182SCORE_PLUGIN_GFX_EXPORT
1183bool declares_blend(const pipeline_state& s) noexcept;
1189SCORE_PLUGIN_GFX_EXPORT
1190bool is_premultiplied_render_target(const input& in) noexcept;
1192class SCORE_PLUGIN_GFX_EXPORT parser
1194 std::string m_sourceVertex;
1195 std::string m_sourceFragment;
1196 std::string m_source_geometry_filter;
1199 std::string m_vertex;
1200 std::string m_fragment;
1201 std::string m_geometry_filter;
1206 bool m_injected_camera_aux{
false};
1211 enum class ShaderType
1221 RawRaytracePipeline,
1224 parser(std::string vert, std::string frag,
int glslVersion, ShaderType);
1225 explicit parser(std::string isf_geom_filter, ShaderType t);
1227 descriptor data()
const;
1228 descriptor::Mode mode()
const;
1229 std::string vertex()
const;
1230 std::string fragment()
const;
1231 std::string geometry_filter()
const;
1232 std::string compute_shader()
const;
1233 static std::pair<int, descriptor> parse_isf_header(std::string_view source);
1234 void parse_shadertoy_json(
const std::string& json);
1236 std::string write_isf()
const;
1240 void parse_raw_raster_pipeline();
1241 void parse_shadertoy();
1242 void parse_glsl_sandbox();
1243 void parse_geometry_filter();
ChannelLayout resolve(ChannelLayout l, int channels) noexcept
Definition ChannelLayout.hpp:56
@ Unknown
Versions unreadable; treated as usable.