blob: 957cfe42a50935c4033767543c0d74fff3ddf825 [file] [edit]
#version 450
#extension GL_EXT_shader_explicit_arithmetic_types_float16 : require
// No xfb_stride is stated, so the compiler computes it and emits it as the
// XfbStride decoration. The buffer holds a 32-bit type reached through an
// array, so the stride must round up to a multiple of 4.
//
// arr[0] occupies bytes 0..3, h occupies bytes 4..5, so the natural size is 6
// and the correct emitted stride is 8. Before the fix the array hid the
// 32-bit-ness of its element, the rounding used the 16-bit rule instead, and
// the compiler emitted a stride of 6. That is a valid shader compiled to a
// layout the application reads back wrong, with no diagnostic.
layout(location = 0, xfb_buffer = 0, xfb_offset = 0) out float arr[1];
layout(location = 1, xfb_buffer = 0, xfb_offset = 4) out float16_t h;
void main()
{
arr[0] = 1.0;
h = float16_t(2.0);
}