From e6fa28a18f1532c1494f8b8c37ef1054597f5fee Mon Sep 17 00:00:00 2001 From: Sven Balzer <4653051+Kyuusokuna@users.noreply.github.com> Date: Sat, 1 Aug 2026 09:07:01 +0200 Subject: [PATCH] make shaders be compiled by cmake instead of a script --- CMakeLists.txt | 25 +++++++++++++++++++++++++ src/shaders/compile_shaders.sh | 9 --------- src/shaders/spirv/world.spv | Bin 5224 -> 5228 bytes src/shaders/wgsl/world.wgsl | 7 ------- 4 files changed, 25 insertions(+), 16 deletions(-) delete mode 100644 src/shaders/compile_shaders.sh diff --git a/CMakeLists.txt b/CMakeLists.txt index fb356de..f3b389f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -89,6 +89,29 @@ target_include_directories(stb_image INTERFACE libs/stb) option(TRACY_ONLY_LOCALHOST "" ON) add_subdirectory(libs/tracy) +# shaders +find_program(SLANGC_EXECUTABLE slangc) +set(SHADERS_SPV "") +set(SHADERS_WGSL "") + +function(add_shader name) + if(SLANGC_EXECUTABLE) + add_custom_command(OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/src/shaders/spirv/${name}.spv" DEPFILE "${CMAKE_CURRENT_BINARY_DIR}/${name}-spv.dep" COMMAND "${SLANGC_EXECUTABLE}" -depfile "${CMAKE_CURRENT_BINARY_DIR}/${name}-spv.dep" "${CMAKE_CURRENT_SOURCE_DIR}/src/shaders/src/${name}.slang" -o "${CMAKE_CURRENT_SOURCE_DIR}/src/shaders/spirv/${name}.spv" -target spirv -profile spirv_1_0) + add_custom_command(OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/src/shaders/wgsl/${name}.wgsl" DEPFILE "${CMAKE_CURRENT_BINARY_DIR}/${name}-wgsl.dep" COMMAND "${SLANGC_EXECUTABLE}" -depfile "${CMAKE_CURRENT_BINARY_DIR}/${name}-wgsl.dep" "${CMAKE_CURRENT_SOURCE_DIR}/src/shaders/src/${name}.slang" -o "${CMAKE_CURRENT_SOURCE_DIR}/src/shaders/wgsl/${name}.wgsl" -target wgsl -D__wgsl__) + endif() + + set(SHADERS_SPV ${SHADERS_SPV} "${CMAKE_CURRENT_SOURCE_DIR}/src/shaders/spirv/${name}.spv" PARENT_SCOPE) + set(SHADERS_WGSL ${SHADERS_WGSL} "${CMAKE_CURRENT_SOURCE_DIR}/src/shaders/wgsl/${name}.wgsl" PARENT_SCOPE) +endfunction() + +add_shader(basic) +add_shader(world) +add_shader(grid) + +add_custom_target(shaders-spv DEPENDS ${SHADERS_SPV}) +add_custom_target(shaders-wgsl DEPENDS ${SHADERS_WGSL}) + +# game add_executable(mikemon src/smol-atlas.cpp src/change_directory.c @@ -106,6 +129,7 @@ target_link_libraries(mikemon TracyClient wgpu ) +add_dependencies(mikemon shaders-wgsl) add_executable(mikemon-sdlgpu src/smol-atlas.cpp @@ -124,3 +148,4 @@ target_link_libraries(mikemon-sdlgpu TracyClient wgpu ) +add_dependencies(mikemon-sdlgpu shaders-spv) diff --git a/src/shaders/compile_shaders.sh b/src/shaders/compile_shaders.sh deleted file mode 100644 index a3f2f0a..0000000 --- a/src/shaders/compile_shaders.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash - -slangc src/basic.slang -target wgsl -D__wgsl__ -o wgsl/basic.wgsl -slangc src/world.slang -target wgsl -D__wgsl__ -o wgsl/world.wgsl -slangc src/grid.slang -target wgsl -D__wgsl__ -o wgsl/grid.wgsl - -slangc src/basic.slang -target spirv -profile spirv_1_0 -o spirv/basic.spv -slangc src/world.slang -target spirv -profile spirv_1_0 -o spirv/world.spv -slangc src/grid.slang -target spirv -profile spirv_1_0 -o spirv/grid.spv diff --git a/src/shaders/spirv/world.spv b/src/shaders/spirv/world.spv index 864ab7e7b6d146fb880f688d9e6152b100c7b0fd..1654d35d62bf427945a66a2ed44d51884e76a669 100644 GIT binary patch delta 30 lcmaE%@kV1q7o#96gE<2OLwtO3Vs1fBY6=6x=IM+Vg#ebU34Z_p delta 26 hcmaE(@j_!m7b7nVgE<2OLvdnmK~8GQ=GlxFg#dPC2*3aU diff --git a/src/shaders/wgsl/world.wgsl b/src/shaders/wgsl/world.wgsl index 17dd769..7c54294 100644 --- a/src/shaders/wgsl/world.wgsl +++ b/src/shaders/wgsl/world.wgsl @@ -45,42 +45,35 @@ fn main_vertex(@builtin(vertex_index) vertex_index_0 : u32, @builtin(instance_in { output_0.pos_0 = (((mat4x4(block1_view_projection_matrix_0.data_0[i32(0)][i32(0)], block1_view_projection_matrix_0.data_0[i32(1)][i32(0)], block1_view_projection_matrix_0.data_0[i32(2)][i32(0)], block1_view_projection_matrix_0.data_0[i32(3)][i32(0)], block1_view_projection_matrix_0.data_0[i32(0)][i32(1)], block1_view_projection_matrix_0.data_0[i32(1)][i32(1)], block1_view_projection_matrix_0.data_0[i32(2)][i32(1)], block1_view_projection_matrix_0.data_0[i32(3)][i32(1)], block1_view_projection_matrix_0.data_0[i32(0)][i32(2)], block1_view_projection_matrix_0.data_0[i32(1)][i32(2)], block1_view_projection_matrix_0.data_0[i32(2)][i32(2)], block1_view_projection_matrix_0.data_0[i32(3)][i32(2)], block1_view_projection_matrix_0.data_0[i32(0)][i32(3)], block1_view_projection_matrix_0.data_0[i32(1)][i32(3)], block1_view_projection_matrix_0.data_0[i32(2)][i32(3)], block1_view_projection_matrix_0.data_0[i32(3)][i32(3)])) * (vec4(vec2(_S3) - vec2(0.5f, 0.5f) + vec2(-0.5f, 0.5f), 0.0f, 1.0f)))); output_0.uv_0 = vec2(0.0f, 0.0f); - break; } case u32(1): { output_0.pos_0 = (((mat4x4(block1_view_projection_matrix_0.data_0[i32(0)][i32(0)], block1_view_projection_matrix_0.data_0[i32(1)][i32(0)], block1_view_projection_matrix_0.data_0[i32(2)][i32(0)], block1_view_projection_matrix_0.data_0[i32(3)][i32(0)], block1_view_projection_matrix_0.data_0[i32(0)][i32(1)], block1_view_projection_matrix_0.data_0[i32(1)][i32(1)], block1_view_projection_matrix_0.data_0[i32(2)][i32(1)], block1_view_projection_matrix_0.data_0[i32(3)][i32(1)], block1_view_projection_matrix_0.data_0[i32(0)][i32(2)], block1_view_projection_matrix_0.data_0[i32(1)][i32(2)], block1_view_projection_matrix_0.data_0[i32(2)][i32(2)], block1_view_projection_matrix_0.data_0[i32(3)][i32(2)], block1_view_projection_matrix_0.data_0[i32(0)][i32(3)], block1_view_projection_matrix_0.data_0[i32(1)][i32(3)], block1_view_projection_matrix_0.data_0[i32(2)][i32(3)], block1_view_projection_matrix_0.data_0[i32(3)][i32(3)])) * (vec4(vec2(_S3) - vec2(0.5f, 0.5f) + vec2(-0.5f, -0.5f), 0.0f, 1.0f)))); output_0.uv_0 = vec2(0.0f, 1.0f); - break; } case u32(2): { output_0.pos_0 = (((mat4x4(block1_view_projection_matrix_0.data_0[i32(0)][i32(0)], block1_view_projection_matrix_0.data_0[i32(1)][i32(0)], block1_view_projection_matrix_0.data_0[i32(2)][i32(0)], block1_view_projection_matrix_0.data_0[i32(3)][i32(0)], block1_view_projection_matrix_0.data_0[i32(0)][i32(1)], block1_view_projection_matrix_0.data_0[i32(1)][i32(1)], block1_view_projection_matrix_0.data_0[i32(2)][i32(1)], block1_view_projection_matrix_0.data_0[i32(3)][i32(1)], block1_view_projection_matrix_0.data_0[i32(0)][i32(2)], block1_view_projection_matrix_0.data_0[i32(1)][i32(2)], block1_view_projection_matrix_0.data_0[i32(2)][i32(2)], block1_view_projection_matrix_0.data_0[i32(3)][i32(2)], block1_view_projection_matrix_0.data_0[i32(0)][i32(3)], block1_view_projection_matrix_0.data_0[i32(1)][i32(3)], block1_view_projection_matrix_0.data_0[i32(2)][i32(3)], block1_view_projection_matrix_0.data_0[i32(3)][i32(3)])) * (vec4(vec2(_S3) - vec2(0.5f, 0.5f) + vec2(0.5f, -0.5f), 0.0f, 1.0f)))); output_0.uv_0 = vec2(1.0f, 1.0f); - break; } case u32(3): { output_0.pos_0 = (((mat4x4(block1_view_projection_matrix_0.data_0[i32(0)][i32(0)], block1_view_projection_matrix_0.data_0[i32(1)][i32(0)], block1_view_projection_matrix_0.data_0[i32(2)][i32(0)], block1_view_projection_matrix_0.data_0[i32(3)][i32(0)], block1_view_projection_matrix_0.data_0[i32(0)][i32(1)], block1_view_projection_matrix_0.data_0[i32(1)][i32(1)], block1_view_projection_matrix_0.data_0[i32(2)][i32(1)], block1_view_projection_matrix_0.data_0[i32(3)][i32(1)], block1_view_projection_matrix_0.data_0[i32(0)][i32(2)], block1_view_projection_matrix_0.data_0[i32(1)][i32(2)], block1_view_projection_matrix_0.data_0[i32(2)][i32(2)], block1_view_projection_matrix_0.data_0[i32(3)][i32(2)], block1_view_projection_matrix_0.data_0[i32(0)][i32(3)], block1_view_projection_matrix_0.data_0[i32(1)][i32(3)], block1_view_projection_matrix_0.data_0[i32(2)][i32(3)], block1_view_projection_matrix_0.data_0[i32(3)][i32(3)])) * (vec4(vec2(_S3) - vec2(0.5f, 0.5f) + vec2(-0.5f, 0.5f), 0.0f, 1.0f)))); output_0.uv_0 = vec2(0.0f, 0.0f); - break; } case u32(4): { output_0.pos_0 = (((mat4x4(block1_view_projection_matrix_0.data_0[i32(0)][i32(0)], block1_view_projection_matrix_0.data_0[i32(1)][i32(0)], block1_view_projection_matrix_0.data_0[i32(2)][i32(0)], block1_view_projection_matrix_0.data_0[i32(3)][i32(0)], block1_view_projection_matrix_0.data_0[i32(0)][i32(1)], block1_view_projection_matrix_0.data_0[i32(1)][i32(1)], block1_view_projection_matrix_0.data_0[i32(2)][i32(1)], block1_view_projection_matrix_0.data_0[i32(3)][i32(1)], block1_view_projection_matrix_0.data_0[i32(0)][i32(2)], block1_view_projection_matrix_0.data_0[i32(1)][i32(2)], block1_view_projection_matrix_0.data_0[i32(2)][i32(2)], block1_view_projection_matrix_0.data_0[i32(3)][i32(2)], block1_view_projection_matrix_0.data_0[i32(0)][i32(3)], block1_view_projection_matrix_0.data_0[i32(1)][i32(3)], block1_view_projection_matrix_0.data_0[i32(2)][i32(3)], block1_view_projection_matrix_0.data_0[i32(3)][i32(3)])) * (vec4(vec2(_S3) - vec2(0.5f, 0.5f) + vec2(0.5f, -0.5f), 0.0f, 1.0f)))); output_0.uv_0 = vec2(1.0f, 1.0f); - break; } case u32(5): { const _S5 : vec2 = vec2(0.5f, 0.5f); output_0.pos_0 = (((mat4x4(block1_view_projection_matrix_0.data_0[i32(0)][i32(0)], block1_view_projection_matrix_0.data_0[i32(1)][i32(0)], block1_view_projection_matrix_0.data_0[i32(2)][i32(0)], block1_view_projection_matrix_0.data_0[i32(3)][i32(0)], block1_view_projection_matrix_0.data_0[i32(0)][i32(1)], block1_view_projection_matrix_0.data_0[i32(1)][i32(1)], block1_view_projection_matrix_0.data_0[i32(2)][i32(1)], block1_view_projection_matrix_0.data_0[i32(3)][i32(1)], block1_view_projection_matrix_0.data_0[i32(0)][i32(2)], block1_view_projection_matrix_0.data_0[i32(1)][i32(2)], block1_view_projection_matrix_0.data_0[i32(2)][i32(2)], block1_view_projection_matrix_0.data_0[i32(3)][i32(2)], block1_view_projection_matrix_0.data_0[i32(0)][i32(3)], block1_view_projection_matrix_0.data_0[i32(1)][i32(3)], block1_view_projection_matrix_0.data_0[i32(2)][i32(3)], block1_view_projection_matrix_0.data_0[i32(3)][i32(3)])) * (vec4(vec2(_S3) - _S5 + _S5, 0.0f, 1.0f)))); output_0.uv_0 = vec2(1.0f, 0.0f); - break; } default : { - break; } } return output_0;