blob: d9d07a3ed5900c4ad4a0b6a37bf05640c3f4fef8 [file] [log] [blame]
qining08408382016-03-21 09:51:37 -04001#version 450
2
3// constant_id specified scalar spec constants
4layout(constant_id = 200) const int spec_int = 3;
5layout(constant_id = 201) const float spec_float = 3.14;
6layout(constant_id = 202) const
7 double spec_double = 3.1415926535897932384626433832795;
8layout(constant_id = 203) const bool spec_bool = true;
9
John Kessenichd82c9062016-05-23 16:07:07 -060010// const float cast_spec_float = float(spec_float);
qining08408382016-03-21 09:51:37 -040011
12// Flat struct
13struct flat_struct {
14 int i;
15 float f;
16 double d;
17 bool b;
18};
19
20// Nesting struct
21struct nesting_struct {
22 flat_struct nested;
23 vec4 v;
24 int i;
25};
26
27// Expect OpSpecConstantComposite
28// Flat struct initializer
John Kessenichd82c9062016-05-23 16:07:07 -060029//const flat_struct spec_flat_struct_all_spec = {spec_int, spec_float,
30// spec_double, spec_bool};
31//const flat_struct spec_flat_struct_partial_spec = {30, 30.14, spec_double,
32// spec_bool};
qining08408382016-03-21 09:51:37 -040033
34// Nesting struct initializer
John Kessenichd82c9062016-05-23 16:07:07 -060035//const nesting_struct nesting_struct_ctor = {
36// {spec_int, spec_float, spec_double, false},
37// vec4(0.1, 0.1, 0.1, 0.1),
38// spec_int};
qining08408382016-03-21 09:51:37 -040039
40// Vector constructor
John Kessenichd82c9062016-05-23 16:07:07 -060041//const vec4 spec_vec4_all_spec =
42// vec4(spec_float, spec_float, spec_float, spec_float);
43//const vec4 spec_vec4_partial_spec =
44// vec4(spec_float, spec_float, 300.14, 300.14);
45//const vec4 spec_vec4_from_one_scalar = vec4(spec_float);
qining27e04a02016-04-14 16:40:20 -040046
47// Matrix constructor
John Kessenichd82c9062016-05-23 16:07:07 -060048//const mat2x3 spec_mat2x3 = mat2x3(spec_float, spec_float, spec_float, 1.1, 2.2, 3.3);
49//const mat2x3 spec_mat2x3_from_one_scalar = mat2x3(spec_float);
qining08408382016-03-21 09:51:37 -040050
51// Struct nesting constructor
John Kessenichd82c9062016-05-23 16:07:07 -060052//const nesting_struct spec_nesting_struct_all_spec = {
53// spec_flat_struct_all_spec, spec_vec4_all_spec, spec_int};
54//const nesting_struct spec_nesting_struct_partial_spec = {
55// spec_flat_struct_partial_spec, spec_vec4_partial_spec, 3000};
qining08408382016-03-21 09:51:37 -040056
John Kessenichd82c9062016-05-23 16:07:07 -060057//const float spec_float_array[5] = {spec_float, spec_float, 1.0, 2.0, 3.0};
58//const int spec_int_array[5] = {spec_int, spec_int, 1, 2, 30};
qining08408382016-03-21 09:51:37 -040059
60// global_vec4_array_with_spec_length is not a spec constant, but its array
61// size is. When calling global_vec4_array_with_spec_length.length(), A
John Kessenichd82c9062016-05-23 16:07:07 -060062// TIntermSymbol Node should be returned, instead of a TIntermConstantUnion
qining08408382016-03-21 09:51:37 -040063// node which represents a known constant value.
64in vec4 global_vec4_array_with_spec_length[spec_int];
65
66out vec4 color;
67
68void refer_primary_spec_const() {
69 if (spec_bool) color *= spec_int;
70}
71
72void refer_composite_spec_const() {
John Kessenichd82c9062016-05-23 16:07:07 -060073 //color += spec_vec4_all_spec;
74 //color -= spec_vec4_partial_spec;
qining08408382016-03-21 09:51:37 -040075}
76
77void refer_copmosite_dot_dereference() {
John Kessenichd82c9062016-05-23 16:07:07 -060078 //color *= spec_nesting_struct_all_spec.i;
79 //color += spec_vec4_all_spec.x;
qining08408382016-03-21 09:51:37 -040080}
81
82void refer_composite_bracket_dereference() {
John Kessenichd82c9062016-05-23 16:07:07 -060083 //color -= spec_float_array[1];
84 //color /= spec_int_array[spec_int_array[spec_int]];
qining08408382016-03-21 09:51:37 -040085}
86
87int refer_spec_const_array_length() {
88 int len = global_vec4_array_with_spec_length.length();
89 return len;
90}
91
92void declare_spec_const_in_func() {
John Kessenichd82c9062016-05-23 16:07:07 -060093 //const nesting_struct spec_const_declared_in_func = {
94 // spec_flat_struct_partial_spec, spec_vec4_partial_spec, 10};
95 //color /= spec_const_declared_in_func.i;
qining08408382016-03-21 09:51:37 -040096}
97
98void main() {}