Skip to content

Commit a41e16a

Browse files
committed
refactor compute shader
1 parent 5d660a4 commit a41e16a

25 files changed

+1068
-2378
lines changed

docs/codes/03/80_compute/CMakeLists.txt

Lines changed: 0 additions & 40 deletions
This file was deleted.
197 Bytes
Binary file not shown.

docs/codes/03/80_compute/shaders/CMakeLists.diff

Lines changed: 0 additions & 30 deletions
This file was deleted.

docs/codes/03/80_compute/shaders/CMakeLists.txt

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,34 +3,37 @@ cmake_minimum_required(VERSION 4.0.0)
33
find_package(Vulkan REQUIRED)
44

55
set(SHADER_DIR ${CMAKE_CURRENT_SOURCE_DIR})
6-
set(VERT_SHADER ${SHADER_DIR}/shader.vert)
7-
set(FRAG_SHADER ${SHADER_DIR}/shader.frag)
8-
set(COMP_SHADER ${SHADER_DIR}/shader.comp)
9-
set(SPIRV_VERT ${SHADER_DIR}/vert.spv)
10-
set(SPIRV_FRAG ${SHADER_DIR}/frag.spv)
11-
set(SPIRV_COMP ${SHADER_DIR}/comp.spv)
6+
set(STAGE_VERT "-fshader-stage=vert")
7+
set(STAGE_FRAG "-fshader-stage=frag")
8+
set(STAGE_COMP "-fshader-stage=comp")
9+
set(GRAPHICS_VERT_SHADER ${SHADER_DIR}/graphics.vert.glsl)
10+
set(GRAPHICS_FRAG_SHADER ${SHADER_DIR}/graphics.frag.glsl)
11+
set(COMPUTE_COMP_SHADER ${SHADER_DIR}/compute.comp.glsl)
12+
set(GRAPHICS_SPIRV_VERT ${SHADER_DIR}/graphics.vert.spv)
13+
set(GRAPHICS_SPIRV_FRAG ${SHADER_DIR}/graphics.frag.spv)
14+
set(COMPUTE_SPIRV_COMP ${SHADER_DIR}/compute.comp.spv)
1215

1316
add_custom_command(
14-
OUTPUT ${SPIRV_VERT}
15-
COMMAND ${Vulkan_GLSLC_EXECUTABLE} ${VERT_SHADER} -o ${SPIRV_VERT}
16-
COMMENT "Compiling shader.vert to vert.spv"
17-
DEPENDS ${VERT_SHADER}
17+
OUTPUT ${GRAPHICS_SPIRV_VERT}
18+
COMMAND ${Vulkan_GLSLC_EXECUTABLE} ${STAGE_VERT} ${GRAPHICS_VERT_SHADER} -o ${GRAPHICS_SPIRV_VERT}
19+
COMMENT "Compiling graphics.vert.glsl to graphics.vert.spv"
20+
DEPENDS ${GRAPHICS_VERT_SHADER}
1821
)
1922

2023
add_custom_command(
21-
OUTPUT ${SPIRV_FRAG}
22-
COMMAND ${Vulkan_GLSLC_EXECUTABLE} ${FRAG_SHADER} -o ${SPIRV_FRAG}
23-
COMMENT "Compiling shader.frag to frag.spv"
24-
DEPENDS ${FRAG_SHADER}
24+
OUTPUT ${GRAPHICS_SPIRV_FRAG}
25+
COMMAND ${Vulkan_GLSLC_EXECUTABLE} ${STAGE_FRAG} ${GRAPHICS_FRAG_SHADER} -o ${GRAPHICS_SPIRV_FRAG}
26+
COMMENT "Compiling graphics.frag.glsl to graphics.frag.spv"
27+
DEPENDS ${GRAPHICS_FRAG_SHADER}
2528
)
2629

2730
add_custom_command(
28-
OUTPUT ${SPIRV_COMP}
29-
COMMAND ${Vulkan_GLSLC_EXECUTABLE} ${COMP_SHADER} -o ${SPIRV_COMP}
30-
COMMENT "Compiling shader.comp to comp.spv"
31-
DEPENDS ${COMP_SHADER}
31+
OUTPUT ${COMPUTE_SPIRV_COMP}
32+
COMMAND ${Vulkan_GLSLC_EXECUTABLE} ${STAGE_COMP} ${COMPUTE_COMP_SHADER} -o ${COMPUTE_SPIRV_COMP}
33+
COMMENT "Compiling compute.comp.glsl to compute.comp.spv"
34+
DEPENDS ${COMPUTE_COMP_SHADER}
3235
)
3336

3437
add_custom_target(CompileShaders ALL
35-
DEPENDS ${SPIRV_VERT} ${SPIRV_FRAG} ${SPIRV_COMP}
36-
)
38+
DEPENDS ${GRAPHICS_SPIRV_VERT} ${GRAPHICS_SPIRV_FRAG} ${COMPUTE_SPIRV_COMP}
39+
)
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#version 450
2+
3+
struct Particle {
4+
vec2 position;
5+
vec2 velocity;
6+
vec4 color;
7+
};
8+
9+
layout(push_constant) uniform PushConstants {
10+
float deltaTime;
11+
} pc;
12+
13+
layout(std140, binding = 0) buffer ParticleSSBO {
14+
Particle particles[ ];
15+
};
16+
17+
layout (local_size_x = 256, local_size_y = 1, local_size_z = 1) in;
18+
19+
void main() {
20+
uint index = gl_GlobalInvocationID.x;
21+
22+
Particle particle = particles[index];
23+
24+
particles[index].position = particle.position + particle.velocity.xy * pc.deltaTime;
25+
26+
// Flip movement at window border
27+
if (abs(particles[index].position.x) >= 1.0) particles[index].velocity.x *= -1;
28+
if (abs(particles[index].position.y) >= 1.0) particles[index].velocity.y *= -1;
29+
}

docs/codes/03/80_compute/shaders/shader.comp

Lines changed: 0 additions & 33 deletions
This file was deleted.

docs/codes/03/80_compute/shaders/shader.frag

Lines changed: 0 additions & 11 deletions
This file was deleted.

docs/codes/03/80_compute/shaders/shader.vert

Lines changed: 0 additions & 12 deletions
This file was deleted.

0 commit comments

Comments
 (0)