summaryrefslogtreecommitdiff
path: root/shaders/shader.frag
blob: eb255e3fcfcaef86a5b5bc99007958e45eee55df (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#version 450

layout(location = 0) in vec4 color;

layout(set = 0, binding = 0) uniform mvp {
	mat4 model;
	mat4 view;
	mat4 proj;
	uint count;
} ubo;

layout(binding = 1) buffer fragment_buffer {
	uvec3 fragments[];
};
layout(binding = 2, r32ui) uniform uimage2D head;
layout(binding = 3) buffer counter {
	uint data;
};

void main() {
	const uint idx = atomicAdd(data, 1);
	if (idx >= ubo.count) {
		discard;
	}
	const uint prev_idx = imageAtomicExchange(head, ivec2(gl_FragCoord.xy), idx);
	fragments[idx] = uvec3(prev_idx, packUnorm4x8(color), floatBitsToUint(gl_FragCoord.z));
}