跳转到内容

GLSL/HLSL 转 SPIR-V

我们可以使用 utils.glsl2spv 规则将 GLSL/HLSL 着色器编译为 SPIR-V。

GLSL 转 SPIR-V

EXPLORER
src
main.c
test.glsl
xmake.lua
Lua xmake.lua
12345678910
add_rules("mode.debug", "mode.release")

add_requires("glslang", {configs = {binaryonly = true}})

target("test")
    set_kind("binary")
    add_rules("utils.glsl2spv", {bin2c = true})
    add_files("src/*.c")
    add_files("src/*.glsl")
    add_packages("glslang")

HLSL 转 SPIR-V

我们也可以使用 utils.hlsl2spv 规则来编译 HLSL 到 SPIR-V。

EXPLORER
src
main.c
test.hlsl
xmake.lua
Lua xmake.lua
12345678910
add_rules("mode.debug", "mode.release")

add_requires("directxshadercompiler", {configs = {binaryonly = true}})

target("test")
    set_kind("binary")
    add_rules("utils.hlsl2spv", {bin2c = true})
    add_files("src/*.c")
    add_files("src/*.hlsl")
    add_packages("directxshadercompiler")

Bin2obj 模式

默认情况下,该规则可能使用 bin2c 来嵌入 SPV 数据。我们可以切换到 bin2obj 模式以在处理大型着色器时获得更好的性能:

EXPLORER
src
main.c
test.glsl
xmake.lua
Lua xmake.lua
12345678910
add_rules("mode.debug", "mode.release")

add_requires("glslang", {configs = {binaryonly = true}})

target("test")
    set_kind("binary")
    add_rules("utils.glsl2spv", {bin2obj = true})
    add_files("src/*.c")
    add_files("src/*.glsl")
    add_packages("glslang")