Mercurial > games > semicongine
comparison src/zamikongine/shader.nim @ 486:9231df12b222
fix: build from scratch not working, remove temp shader files from compilation
| author | Sam <sam@basx.dev> |
|---|---|
| date | Wed, 11 Jan 2023 11:43:22 +0700 |
| parents | b4a972bd37d5 |
| children | 54a1f8ee208e |
comparison
equal
deleted
inserted
replaced
| 485:b4a972bd37d5 | 486:9231df12b222 |
|---|---|
| 1 import std/tempfiles | |
| 2 import std/strformat | 1 import std/strformat |
| 3 import std/strutils | 2 import std/strutils |
| 4 import std/tables | 3 import std/tables |
| 5 import std/compilesettings | 4 import std/compilesettings |
| 6 | 5 |
| 25 of VK_SHADER_STAGE_ALL_GRAPHICS: "" | 24 of VK_SHADER_STAGE_ALL_GRAPHICS: "" |
| 26 of VK_SHADER_STAGE_COMPUTE_BIT: "comp" | 25 of VK_SHADER_STAGE_COMPUTE_BIT: "comp" |
| 27 of VK_SHADER_STAGE_ALL: "" | 26 of VK_SHADER_STAGE_ALL: "" |
| 28 | 27 |
| 29 proc compileGLSLToSPIRV(stage: VkShaderStageFlagBits, shaderSource: string, entrypoint: string): seq[uint32] {.compileTime.} = | 28 proc compileGLSLToSPIRV(stage: VkShaderStageFlagBits, shaderSource: string, entrypoint: string): seq[uint32] {.compileTime.} = |
| 29 # TODO: compiles only on linux for now (because we don't have compile-time functionality in std/tempfile) | |
| 30 let stagename = stage2string(stage) | 30 let stagename = stage2string(stage) |
| 31 let (tmpfile, tmpfilename) = createTempFile("shader", stage2string(stage)) | 31 |
| 32 tmpfile.close() | 32 let (tmpfile, exitCode) = gorgeEx(command=fmt"mktemp --tmpdir shader_XXXXXXX.{stagename}") |
| 33 let (output, exitCode) = gorgeEx(command=fmt"{querySetting(projectPath)}/glslangValidator --entry-point {entrypoint} -V --stdin -S {stagename} -o {tmpfilename}", input=shaderSource) | |
| 34 if exitCode != 0: | 33 if exitCode != 0: |
| 34 raise newException(Exception, tmpfile) | |
| 35 | |
| 36 let (output, exitCode_glsl) = gorgeEx(command=fmt"{querySetting(projectPath)}/glslangValidator --entry-point {entrypoint} -V --stdin -S {stagename} -o {tmpfile}", input=shaderSource) | |
| 37 if exitCode_glsl != 0: | |
| 35 raise newException(Exception, output) | 38 raise newException(Exception, output) |
| 36 let shaderbinary = staticRead tmpfilename | 39 let shaderbinary = staticRead tmpfile |
| 40 | |
| 41 let (output_rm, exitCode_rm) = gorgeEx(command=fmt"rm {tmpfile}") | |
| 42 if exitCode_rm != 0: | |
| 43 raise newException(Exception, output_rm) | |
| 44 | |
| 37 var i = 0 | 45 var i = 0 |
| 38 while i < shaderbinary.len: | 46 while i < shaderbinary.len: |
| 39 result.add( | 47 result.add( |
| 40 (uint32(shaderbinary[i + 0]) shl 0) or | 48 (uint32(shaderbinary[i + 0]) shl 0) or |
| 41 (uint32(shaderbinary[i + 1]) shl 8) or | 49 (uint32(shaderbinary[i + 1]) shl 8) or |
