-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.comp
More file actions
64 lines (49 loc) · 1.65 KB
/
main.comp
File metadata and controls
64 lines (49 loc) · 1.65 KB
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#version 450
#extension GL_EXT_buffer_reference : enable
#extension GL_EXT_buffer_reference2 : enable
#extension GL_ARB_gpu_shader_int64 : enable
layout(local_size_x = 16, local_size_y = 16, local_size_z = 16) in;
layout (constant_id = 0) const uint BufferSize = 1;
layout (constant_id = 1) const double BufferSize2 = 1.f;
layout(buffer_reference) buffer What;
layout(binding = 0) buffer readonly PositionBuffer
{
vec3 Laloylam;
vec4 Position[BufferSize];
};
layout(binding = 1) buffer readonly VelocityBuffer
{
vec4 Velocity[BufferSize];
};
layout(binding = 2) buffer readonly AccelerationBuffer
{
vec4 Acceleration[BufferSize];
};
layout(binding = 3) buffer readonly MassBuffer
{
float Mass[BufferSize];
};
layout(binding = 4) buffer writeonly PositionBufferOut
{
vec4 PositionOut[BufferSize];
};
layout(set = 1, binding = 0, rgba16f) uniform readonly image2DArray SomeImages[BufferSize];
layout(buffer_reference) buffer PointerToFloat { float v; };
layout(push_constant) uniform Registers
{
PointerToFloat references;
};
void main()
{
// PointerToFloat pointer;
uint index = gl_GlobalInvocationID.x;
vec3 position = Position[index].xyz;
vec3 velocity = Velocity[index].xyz;
vec3 acceleration = Acceleration[index].xyz;
float mass = Mass[index];
vec3 force = acceleration * mass;
vec3 newVelocity = velocity + force;
vec3 newPosition = position + newVelocity;
// imageStore(SomeImages[BufferSize-2], ivec3(0, 0, 0), vec4(newPosition, 1.0));
PositionOut[index] = imageLoad(SomeImages[BufferSize-1], ivec3(0, 0, 0)) * vec4(PointerToFloat(uint64_t(references) + 24).v *dot(force, newPosition));
}