Merge pull request #1262 from KhronosGroup/json-reflection-improvements

Reflection: Various improvements
This commit is contained in:
Hans-Kristian Arntzen 2020-01-15 18:51:34 +01:00 committed by GitHub
commit 79700d5412
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
20 changed files with 463 additions and 59 deletions

View File

@ -34,6 +34,9 @@
"type" : "float",
"array" : [
1
],
"array_size_is_literal" : [
true
]
},
{
@ -41,6 +44,9 @@
"type" : "float",
"array" : [
1
],
"array_size_is_literal" : [
true
]
}
]

View File

@ -25,7 +25,11 @@
"array" : [
0
],
"offset" : 0
"array_size_is_literal" : [
true
],
"offset" : 0,
"array_stride" : 16
}
]
}

View File

@ -25,7 +25,11 @@
"array" : [
0
],
"offset" : 0
"array_size_is_literal" : [
true
],
"offset" : 0,
"array_stride" : 16
}
]
},
@ -38,7 +42,11 @@
"array" : [
0
],
"offset" : 0
"array_size_is_literal" : [
true
],
"offset" : 0,
"array_stride" : 16
}
]
}

View File

@ -25,7 +25,11 @@
"array" : [
0
],
"offset" : 0
"array_size_is_literal" : [
true
],
"offset" : 0,
"array_stride" : 16
}
]
}

View File

@ -25,7 +25,11 @@
"array" : [
0
],
"offset" : 0
"array_size_is_literal" : [
true
],
"offset" : 0,
"array_stride" : 16
}
]
}

View File

@ -25,7 +25,11 @@
"array" : [
0
],
"offset" : 0
"array_size_is_literal" : [
true
],
"offset" : 0,
"array_stride" : 16
}
]
}

View File

@ -25,7 +25,11 @@
"array" : [
0
],
"offset" : 0
"array_size_is_literal" : [
true
],
"offset" : 0,
"array_stride" : 16
}
]
},
@ -38,7 +42,11 @@
"array" : [
0
],
"offset" : 0
"array_size_is_literal" : [
true
],
"offset" : 0,
"array_stride" : 16
}
]
}

View File

@ -25,7 +25,11 @@
"array" : [
0
],
"offset" : 0
"array_size_is_literal" : [
true
],
"offset" : 0,
"array_stride" : 16
}
]
}

View File

@ -25,7 +25,11 @@
"array" : [
0
],
"offset" : 0
"array_size_is_literal" : [
true
],
"offset" : 0,
"array_stride" : 16
}
]
}

View File

@ -22,7 +22,8 @@
{
"name" : "m",
"type" : "mat4",
"offset" : 0
"offset" : 0,
"matrix_stride" : 16
}
]
},
@ -35,7 +36,11 @@
"array" : [
0
],
"offset" : 0
"array_size_is_literal" : [
true
],
"offset" : 0,
"array_stride" : 64
}
]
},
@ -48,7 +53,11 @@
"array" : [
0
],
"offset" : 0
"array_size_is_literal" : [
true
],
"offset" : 0,
"array_stride" : 64
}
]
}

View File

@ -25,7 +25,11 @@
"array" : [
1
],
"offset" : 0
"array_size_is_literal" : [
true
],
"offset" : 0,
"array_stride" : 8
},
{
"name" : "b",
@ -58,7 +62,11 @@
"array" : [
1
],
"offset" : 0
"array_size_is_literal" : [
true
],
"offset" : 0,
"array_stride" : 16
},
{
"name" : "b",
@ -101,7 +109,11 @@
"array" : [
1
],
"offset" : 0
"array_size_is_literal" : [
true
],
"offset" : 0,
"array_stride" : 16
},
{
"name" : "m1s",
@ -109,7 +121,11 @@
"array" : [
1
],
"offset" : 16
"array_size_is_literal" : [
true
],
"offset" : 16,
"array_stride" : 16
},
{
"name" : "m2s",
@ -117,7 +133,11 @@
"array" : [
1
],
"offset" : 32
"array_size_is_literal" : [
true
],
"offset" : 32,
"array_stride" : 32
},
{
"name" : "m0",
@ -150,7 +170,11 @@
"array" : [
8
],
"offset" : 152
"array_size_is_literal" : [
true
],
"offset" : 152,
"array_stride" : 8
}
]
},
@ -168,7 +192,11 @@
"array" : [
2
],
"offset" : 224
"array_size_is_literal" : [
true
],
"offset" : 224,
"array_stride" : 224
},
{
"name" : "content2",
@ -178,12 +206,14 @@
{
"name" : "m0",
"type" : "mat2",
"offset" : 896
"offset" : 896,
"matrix_stride" : 8
},
{
"name" : "m1",
"type" : "mat2",
"offset" : 912
"offset" : 912,
"matrix_stride" : 8
},
{
"name" : "m2",
@ -191,43 +221,62 @@
"array" : [
4
],
"offset" : 928
"array_size_is_literal" : [
true
],
"offset" : 928,
"array_stride" : 32,
"matrix_stride" : 16
},
{
"name" : "m3",
"type" : "mat3x2",
"offset" : 1056
"offset" : 1056,
"matrix_stride" : 8
},
{
"name" : "m4",
"type" : "mat2",
"row_major" : true,
"offset" : 1080
"offset" : 1080,
"matrix_stride" : 8,
"row_major" : true
},
{
"name" : "m5",
"type" : "mat2",
"row_major" : true,
"array" : [
9
],
"offset" : 1096
"array_size_is_literal" : [
true
],
"offset" : 1096,
"array_stride" : 16,
"matrix_stride" : 8,
"row_major" : true
},
{
"name" : "m6",
"type" : "mat2x3",
"row_major" : true,
"array" : [
2,
4
],
"offset" : 1240
"array_size_is_literal" : [
true,
true
],
"offset" : 1240,
"array_stride" : 48,
"matrix_stride" : 8,
"row_major" : true
},
{
"name" : "m7",
"type" : "mat3x2",
"row_major" : true,
"offset" : 1440
"offset" : 1440,
"matrix_stride" : 16,
"row_major" : true
},
{
"name" : "array",
@ -235,7 +284,11 @@
"array" : [
0
],
"offset" : 1472
"array_size_is_literal" : [
true
],
"offset" : 1472,
"array_stride" : 4
}
]
},
@ -248,7 +301,11 @@
"array" : [
1
],
"offset" : 0
"array_size_is_literal" : [
true
],
"offset" : 0,
"array_stride" : 16
},
{
"name" : "b",
@ -281,7 +338,11 @@
"array" : [
1
],
"offset" : 0
"array_size_is_literal" : [
true
],
"offset" : 0,
"array_stride" : 16
},
{
"name" : "b",
@ -324,7 +385,11 @@
"array" : [
1
],
"offset" : 0
"array_size_is_literal" : [
true
],
"offset" : 0,
"array_stride" : 32
},
{
"name" : "m1s",
@ -332,7 +397,11 @@
"array" : [
1
],
"offset" : 32
"array_size_is_literal" : [
true
],
"offset" : 32,
"array_stride" : 16
},
{
"name" : "m2s",
@ -340,7 +409,11 @@
"array" : [
1
],
"offset" : 48
"array_size_is_literal" : [
true
],
"offset" : 48,
"array_stride" : 32
},
{
"name" : "m0",
@ -373,7 +446,11 @@
"array" : [
8
],
"offset" : 192
"array_size_is_literal" : [
true
],
"offset" : 192,
"array_stride" : 16
}
]
},
@ -391,7 +468,11 @@
"array" : [
2
],
"offset" : 320
"array_size_is_literal" : [
true
],
"offset" : 320,
"array_stride" : 320
},
{
"name" : "content2",
@ -401,12 +482,14 @@
{
"name" : "m0",
"type" : "mat2",
"offset" : 1280
"offset" : 1280,
"matrix_stride" : 16
},
{
"name" : "m1",
"type" : "mat2",
"offset" : 1312
"offset" : 1312,
"matrix_stride" : 16
},
{
"name" : "m2",
@ -414,43 +497,62 @@
"array" : [
4
],
"offset" : 1344
"array_size_is_literal" : [
true
],
"offset" : 1344,
"array_stride" : 32,
"matrix_stride" : 16
},
{
"name" : "m3",
"type" : "mat3x2",
"offset" : 1472
"offset" : 1472,
"matrix_stride" : 16
},
{
"name" : "m4",
"type" : "mat2",
"row_major" : true,
"offset" : 1520
"offset" : 1520,
"matrix_stride" : 16,
"row_major" : true
},
{
"name" : "m5",
"type" : "mat2",
"row_major" : true,
"array" : [
9
],
"offset" : 1552
"array_size_is_literal" : [
true
],
"offset" : 1552,
"array_stride" : 32,
"matrix_stride" : 16,
"row_major" : true
},
{
"name" : "m6",
"type" : "mat2x3",
"row_major" : true,
"array" : [
2,
4
],
"offset" : 1840
"array_size_is_literal" : [
true,
true
],
"offset" : 1840,
"array_stride" : 96,
"matrix_stride" : 16,
"row_major" : true
},
{
"name" : "m7",
"type" : "mat3x2",
"row_major" : true,
"offset" : 2224
"offset" : 2224,
"matrix_stride" : 16,
"row_major" : true
},
{
"name" : "array",
@ -458,7 +560,11 @@
"array" : [
0
],
"offset" : 2256
"array_size_is_literal" : [
true
],
"offset" : 2256,
"array_stride" : 16
}
]
}

View File

@ -40,16 +40,19 @@
{
"id" : 10,
"type" : "uint",
"variable_id" : 18,
"default_value" : 1
},
{
"id" : 40,
"type" : "uint",
"variable_id" : 19,
"default_value" : 1
},
{
"id" : 60,
"type" : "uint",
"variable_id" : 20,
"default_value" : 1
}
]

View File

@ -31,6 +31,9 @@
"array" : [
4
],
"array_size_is_literal" : [
true
],
"set" : 0,
"binding" : 1
},
@ -40,6 +43,9 @@
"array" : [
4
],
"array_size_is_literal" : [
true
],
"set" : 0,
"binding" : 4
},
@ -49,6 +55,9 @@
"array" : [
4
],
"array_size_is_literal" : [
true
],
"set" : 0,
"binding" : 3
},
@ -58,6 +67,9 @@
"array" : [
4
],
"array_size_is_literal" : [
true
],
"set" : 0,
"binding" : 2
}

View File

@ -14,6 +14,9 @@
"type" : "float",
"array" : [
135
],
"array_size_is_literal" : [
false
]
}
]
@ -30,41 +33,49 @@
{
"id" : 1,
"type" : "float",
"variable_id" : 9,
"default_value" : 1.5
},
{
"id" : 2,
"type" : "float",
"variable_id" : 11,
"default_value" : 2.5
},
{
"id" : 3,
"type" : "int",
"variable_id" : 16,
"default_value" : 3
},
{
"id" : 4,
"type" : "int",
"variable_id" : 25,
"default_value" : 4
},
{
"id" : 5,
"type" : "uint",
"variable_id" : 34,
"default_value" : 5
},
{
"id" : 6,
"type" : "uint",
"variable_id" : 35,
"default_value" : 6
},
{
"id" : 7,
"type" : "bool",
"variable_id" : 56,
"default_value" : false
},
{
"id" : 8,
"type" : "bool",
"variable_id" : 57,
"default_value" : true
}
]

View File

@ -0,0 +1,77 @@
{
"entryPoints" : [
{
"name" : "main",
"mode" : "vert"
}
],
"types" : {
"_11" : {
"name" : "gl_PerVertex",
"members" : [
{
"name" : "gl_Position",
"type" : "vec4"
},
{
"name" : "gl_PointSize",
"type" : "float"
},
{
"name" : "gl_ClipDistance",
"type" : "float",
"array" : [
1
],
"array_size_is_literal" : [
true
]
},
{
"name" : "gl_CullDistance",
"type" : "float",
"array" : [
1
],
"array_size_is_literal" : [
true
]
}
]
},
"_18" : {
"name" : "u_",
"members" : [
{
"name" : "u_0",
"type" : "vec4",
"array" : [
16
],
"array_size_is_literal" : [
false
],
"offset" : 0,
"array_stride" : 16
}
]
}
},
"ubos" : [
{
"type" : "_18",
"name" : "u_",
"block_size" : 16,
"set" : 1,
"binding" : 0
}
],
"specialization_constants" : [
{
"id" : 0,
"type" : "int",
"variable_id" : 16,
"default_value" : 1
}
]
}

View File

@ -25,12 +25,18 @@
{
"name" : "var",
"type" : "mat2x3",
"row_major" : true,
"array" : [
4,
3
],
"offset" : 0
"array_size_is_literal" : [
true,
true
],
"offset" : 0,
"array_stride" : 192,
"matrix_stride" : 16,
"row_major" : true
}
]
}

View File

@ -0,0 +1,96 @@
{
"entryPoints" : [
{
"name" : "main",
"mode" : "vert"
}
],
"types" : {
"_11" : {
"name" : "gl_PerVertex",
"members" : [
{
"name" : "gl_Position",
"type" : "vec4"
},
{
"name" : "gl_PointSize",
"type" : "float"
},
{
"name" : "gl_ClipDistance",
"type" : "float",
"array" : [
1
],
"array_size_is_literal" : [
true
]
},
{
"name" : "gl_CullDistance",
"type" : "float",
"array" : [
1
],
"array_size_is_literal" : [
true
]
}
]
},
"_21" : {
"name" : "U",
"members" : [
{
"name" : "v",
"type" : "vec4",
"array" : [
4
],
"array_size_is_literal" : [
true
],
"offset" : 0,
"array_stride" : 16
},
{
"name" : "c",
"type" : "mat4",
"array" : [
4
],
"array_size_is_literal" : [
true
],
"offset" : 64,
"array_stride" : 64,
"matrix_stride" : 16
},
{
"name" : "r",
"type" : "mat4",
"array" : [
4
],
"array_size_is_literal" : [
true
],
"offset" : 320,
"array_stride" : 64,
"matrix_stride" : 16,
"row_major" : true
}
]
}
},
"ubos" : [
{
"type" : "_21",
"name" : "U",
"block_size" : 576,
"set" : 0,
"binding" : 0
}
]
}

View File

@ -0,0 +1,13 @@
#version 450
layout(constant_id = 0) const int ARR_SIZE = 1;
layout(binding = 0, set = 1, std140) uniform u_
{
vec4 u_0[ARR_SIZE];
};
void main()
{
gl_Position = u_0[0];
}

View File

@ -0,0 +1,14 @@
#version 450
layout(binding = 0, set = 0, std140) uniform U
{
vec4 v[4];
mat4 c[4];
layout(row_major) mat4 r[4];
};
void main()
{
gl_Position = v[0];
}

View File

@ -358,15 +358,16 @@ void CompilerReflection::emit_type_array(const SPIRType &type)
for (const auto &value : type.array)
json_stream->emit_json_array_value(value);
json_stream->end_json_array();
json_stream->emit_json_key_array("array_size_is_literal");
for (const auto &value : type.array_size_literal)
json_stream->emit_json_array_value(value);
json_stream->end_json_array();
}
}
void CompilerReflection::emit_type_member_qualifiers(const SPIRType &type, uint32_t index)
{
auto flags = combined_decoration_for_member(type, index);
if (flags.get(DecorationRowMajor))
json_stream->emit_json_key_value("row_major", true);
auto &membertype = get<SPIRType>(type.member_types[index]);
emit_type_array(membertype);
auto &memb = ir.meta[type.self].members;
@ -377,6 +378,15 @@ void CompilerReflection::emit_type_member_qualifiers(const SPIRType &type, uint3
json_stream->emit_json_key_value("location", dec.location);
if (dec.decoration_flags.get(DecorationOffset))
json_stream->emit_json_key_value("offset", dec.offset);
// Array stride is a property of the array type, not the struct.
if (has_decoration(type.member_types[index], DecorationArrayStride))
json_stream->emit_json_key_value("array_stride", get_decoration(type.member_types[index], DecorationArrayStride));
if (dec.decoration_flags.get(DecorationMatrixStride))
json_stream->emit_json_key_value("matrix_stride", dec.matrix_stride);
if (dec.decoration_flags.get(DecorationRowMajor))
json_stream->emit_json_key_value("row_major", true);
}
}
@ -592,6 +602,7 @@ void CompilerReflection::emit_specialization_constants()
json_stream->begin_json_object();
json_stream->emit_json_key_value("id", spec_const.constant_id);
json_stream->emit_json_key_value("type", type_to_glsl(type));
json_stream->emit_json_key_value("variable_id", spec_const.id);
switch (type.basetype)
{
case SPIRType::UInt: