1c18078811
Support Workgroup (threadgroup) variables. Mark if SPIRConstant is used as an array length, since it cannot be specialized. Resolve specialized array length constants. Support passing an array to MSL function. Support emitting GLSL array assignments in MSL via an array copy function. Support for memory and control barriers. Struct packing enhancements, including packing nested structs. Enhancements to replacing illegal MSL variable and function names. Add Compiler::get_entry_point_name_map() function to retrieve entry point renamings. Remove CompilerGLSL::clean_func_name() as obsolete. Fixes to types in bitcast MSL functions. Add Variant::get_id() member function. Add CompilerMSL::Options::msl_version option. Add numerous MSL compute tests.
41 lines
640 B
Plaintext
41 lines
640 B
Plaintext
#version 310 es
|
|
layout(local_size_x = 1) in;
|
|
|
|
layout(std430, binding = 0) readonly buffer SSBO
|
|
{
|
|
mat4 mvp;
|
|
vec4 in_data[];
|
|
};
|
|
|
|
layout(std430, binding = 1) writeonly buffer SSBO2
|
|
{
|
|
vec4 out_data[];
|
|
};
|
|
|
|
void main()
|
|
{
|
|
uint ident = gl_GlobalInvocationID.x;
|
|
vec4 idat = in_data[ident];
|
|
|
|
int k = 0;
|
|
|
|
// Continue with side effects.
|
|
while (++k < 10)
|
|
{
|
|
idat *= 2.0;
|
|
k++;
|
|
}
|
|
|
|
// Again used here ...
|
|
for (uint i = 0u; i < 16u; i++, k++)
|
|
for (uint j = 0u; j < 30u; j++)
|
|
idat = mvp * idat;
|
|
|
|
do
|
|
{
|
|
k++;
|
|
} while (k > 10);
|
|
out_data[ident] = idat;
|
|
}
|
|
|