SPIRV-Cross/reference/shaders/asm/comp/control-flow-hints.asm.comp
2021-06-03 12:01:49 +02:00

59 lines
1.1 KiB
Plaintext

#version 450
#if defined(GL_EXT_control_flow_attributes)
#extension GL_EXT_control_flow_attributes : require
#define SPIRV_CROSS_FLATTEN [[flatten]]
#define SPIRV_CROSS_BRANCH [[dont_flatten]]
#define SPIRV_CROSS_UNROLL [[unroll]]
#define SPIRV_CROSS_LOOP [[dont_unroll]]
#else
#define SPIRV_CROSS_FLATTEN
#define SPIRV_CROSS_BRANCH
#define SPIRV_CROSS_UNROLL
#define SPIRV_CROSS_LOOP
#endif
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
layout(binding = 0, std430) buffer bar
{
vec4 _data[];
} bar_1;
layout(binding = 1, std430) buffer foo
{
vec4 _data[];
} foo_1;
void _main()
{
SPIRV_CROSS_UNROLL
for (int i = 0; i < 16; i++)
{
bar_1._data[i] = foo_1._data[i];
}
SPIRV_CROSS_LOOP
for (int i_1 = 0; i_1 < 16; i_1++)
{
bar_1._data[15 - i_1] = foo_1._data[i_1];
}
float v = bar_1._data[10].x;
float w = foo_1._data[10].x;
SPIRV_CROSS_BRANCH
if (v > 10.0)
{
foo_1._data[20] = vec4(5.0);
}
float value = 20.0;
SPIRV_CROSS_FLATTEN
if (w > 40.0)
{
value = 20.0;
}
foo_1._data[20] = vec4(value);
}
void main()
{
_main();
}