Revision control
Copy as Markdown
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#version 440
layout(location = 0) out vec4 fragOutput;
layout(std140, binding = 0) uniform buf {
uvec4 clearColor;
ivec2 viewSize;
uint samples;
uint viewCount;
} ubuf;
#if QSSG_CLEAR_BUFFER == 1
layout(std430, binding = 1) buffer restrict coherent writeonly qt_imgAux
{
uint auxData[];
};
#else
layout(binding = 1, rgba32ui) uniform restrict coherent writeonly uimage2D qt_imgAux;
#endif
void main()
{
fragOutput = vec4(0.0);
const ivec2 coord = ivec2(gl_FragCoord.x * ubuf.samples, gl_FragCoord.y * ubuf.viewCount);
for (uint s = 0; s < ubuf.samples; s++) {
#if QSSG_CLEAR_BUFFER == 1
auxData[ubuf.viewSize.x * ubuf.samples * coord.y + coord.x + s] = ubuf.clearColor.x;
if (ubuf.viewCount > 1)
auxData[ubuf.viewSize.x * ubuf.samples * (coord.y + 1) + coord.x + s] = ubuf.clearColor.x;
#else
imageStore(qt_imgAux, ivec2(coord.x + s, coord.y), ubuf.clearColor);
if (ubuf.viewCount > 1)
imageStore(qt_imgAux, ivec2(coord.x + s, coord.y + 1), ubuf.clearColor);
#endif
}
}