Skip to content

Commit 15365b5

Browse files
committed
Add compute shader
1 parent 95a5c19 commit 15365b5

21 files changed

+2993
-1306
lines changed

.gitignore

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@
33
.idea/
44

55
build/
6-
install/
7-
shaders/*.spv
8-
site/
6+
/install/
7+
/shaders/*.spv
8+
/site/
9+
10+
/base_code/
11+
/base_code.zip
12+
/CMakeUserPresets.json
13+
/tmp.cpp

CMakeLists.txt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,13 @@ find_package(Vulkan REQUIRED)
2525
# Import third-party libraries through vcpkg
2626
find_package(glfw3 CONFIG REQUIRED)
2727
find_package(glm CONFIG REQUIRED)
28-
find_package(Stb REQUIRED)
29-
find_package(tinyobjloader CONFIG REQUIRED)
3028

3129
# Add executable program targets
3230
add_executable(${PROJECT_NAME} src/main.cpp)
3331

3432
target_link_libraries(${PROJECT_NAME} PRIVATE Vulkan::Vulkan )
3533
target_link_libraries(${PROJECT_NAME} PRIVATE glm::glm )
3634
target_link_libraries(${PROJECT_NAME} PRIVATE glfw )
37-
target_include_directories(${PROJECT_NAME} PRIVATE ${Stb_INCLUDE_DIR})
38-
target_link_libraries(${PROJECT_NAME} PRIVATE tinyobjloader::tinyobjloader)
3935
#################################################################################
4036

4137
#################################################################################
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
cmake_minimum_required(VERSION 3.30)
2+
3+
#################################################################################
4+
#### Set up the vcpkg toolchain, which must be done before the project() function.
5+
# You can also set it up by default through the CMakePresets.json file
6+
# requires the VCPKG_ROOT environment variable
7+
# The TO_CMAKE_PATH here is used to convert back slashes to forward slashes
8+
file(TO_CMAKE_PATH "$ENV{VCPKG_ROOT}" VCPKG_CMAKE_PATH)
9+
set(CMAKE_TOOLCHAIN_FILE "${VCPKG_CMAKE_PATH}/scripts/buildsystems/vcpkg.cmake")
10+
#################################################################################
11+
12+
project(HelloVulkan LANGUAGES CXX)
13+
14+
set(CMAKE_CXX_STANDARD 20)
15+
16+
#################################################################################
17+
#### Search for Vulkan package.
18+
# CMake provides FindVulkan support, but requires the VULKAN_SDK environment variable
19+
# Setting by default during Vulkan SDK installation, such as E: \ Vulkan \ 1.4.309.0
20+
find_package(Vulkan REQUIRED)
21+
#################################################################################
22+
23+
#################################################################################
24+
#### add_executable
25+
# Import third-party libraries through vcpkg
26+
find_package(glfw3 CONFIG REQUIRED)
27+
find_package(glm CONFIG REQUIRED)
28+
29+
# Add executable program targets
30+
add_executable(${PROJECT_NAME} src/main.cpp)
31+
32+
target_link_libraries(${PROJECT_NAME} PRIVATE Vulkan::Vulkan )
33+
target_link_libraries(${PROJECT_NAME} PRIVATE glm::glm )
34+
target_link_libraries(${PROJECT_NAME} PRIVATE glfw )
35+
#################################################################################
36+
37+
#################################################################################
38+
#### shaders
39+
add_subdirectory(shaders)
40+
#################################################################################
11.7 KB
Binary file not shown.
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
diff --git a/shaders/CMakeLists.txt b/shaders/CMakeLists.txt
2+
index 981fc5f..10c2b6e 100644
3+
--- a/shaders/CMakeLists.txt
4+
+++ b/shaders/CMakeLists.txt
5+
@@ -5,8 +5,10 @@ find_package(Vulkan REQUIRED)
6+
set(SHADER_DIR ${CMAKE_CURRENT_SOURCE_DIR})
7+
set(VERT_SHADER ${SHADER_DIR}/shader.vert)
8+
set(FRAG_SHADER ${SHADER_DIR}/shader.frag)
9+
+set(COMP_SHADER ${SHADER_DIR}/shader.comp)
10+
set(SPIRV_VERT ${SHADER_DIR}/vert.spv)
11+
set(SPIRV_FRAG ${SHADER_DIR}/frag.spv)
12+
+set(SPIRV_COMP ${SHADER_DIR}/comp.spv)
13+
14+
add_custom_command(
15+
OUTPUT ${SPIRV_VERT}
16+
@@ -22,6 +24,13 @@ add_custom_command(
17+
DEPENDS ${FRAG_SHADER}
18+
)
19+
20+
+add_custom_command(
21+
+ OUTPUT ${SPIRV_COMP}
22+
+ COMMAND ${Vulkan_GLSLC_EXECUTABLE} ${COMP_SHADER} -o ${SPIRV_COMP}
23+
+ COMMENT "Compiling shader.comp to comp.spv"
24+
+ DEPENDS ${COMP_SHADER}
25+
+)
26+
+
27+
add_custom_target(CompileShaders ALL
28+
- DEPENDS ${SPIRV_VERT} ${SPIRV_FRAG}
29+
+ DEPENDS ${SPIRV_VERT} ${SPIRV_FRAG} ${SPIRV_COMP}
30+
)
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
cmake_minimum_required(VERSION 3.30)
2+
3+
find_package(Vulkan REQUIRED)
4+
5+
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)
12+
13+
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}
18+
)
19+
20+
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}
25+
)
26+
27+
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}
32+
)
33+
34+
add_custom_target(CompileShaders ALL
35+
DEPENDS ${SPIRV_VERT} ${SPIRV_FRAG} ${SPIRV_COMP}
36+
)
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#version 450
2+
3+
struct Particle {
4+
vec2 position;
5+
vec2 velocity;
6+
vec4 color;
7+
};
8+
9+
layout(std140, binding = 0) uniform ParameterUBO {
10+
float deltaTime;
11+
} ubo;
12+
13+
layout(std140, binding = 1) readonly buffer ParticleSSBOIn {
14+
Particle particlesIn[ ];
15+
};
16+
17+
layout(std140, binding = 2) buffer ParticleSSBOOut {
18+
Particle particlesOut[ ];
19+
};
20+
21+
layout (local_size_x = 256, local_size_y = 1, local_size_z = 1) in;
22+
23+
void main() {
24+
uint index = gl_GlobalInvocationID.x;
25+
26+
Particle particleIn = particlesIn[index];
27+
28+
particlesOut[index].position = particleIn.position + particleIn.velocity.xy * ubo.deltaTime;
29+
particlesOut[index].velocity = particleIn.velocity;
30+
31+
if (abs(particlesOut[index].position.x) >= 1.0) particlesOut[index].velocity.x *= -1;
32+
if (abs(particlesOut[index].position.y) >= 1.0) particlesOut[index].velocity.y *= -1;
33+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#version 450
2+
3+
layout(location = 0) in vec3 fragColor;
4+
5+
layout(location = 0) out vec4 outColor;
6+
7+
void main() {
8+
9+
vec2 coord = gl_PointCoord - vec2(0.5);
10+
outColor = vec4(fragColor, 0.5 - length(coord));
11+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#version 450
2+
3+
layout(location = 0) in vec2 inPosition;
4+
layout(location = 1) in vec4 inColor;
5+
6+
layout(location = 0) out vec3 fragColor;
7+
8+
void main() {
9+
gl_PointSize = 14.0;
10+
gl_Position = vec4(inPosition.xy, 1.0, 1.0);
11+
fragColor = inColor.rgb;
12+
}

0 commit comments

Comments
 (0)