1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package spirv_test
import "core:fmt"
import "core:os"
import shader "../../shader"
main :: proc() {
shaders := []struct{name: string, file: string, stage: shader.Shader_Stage}{
{"default_3d.vert", "shaders/default_3d.vert.luma", .Vertex},
{"default_3d.frag", "shaders/default_3d.frag.luma", .Fragment},
{"lit_3d.vert", "shaders/lit_3d.vert.luma", .Vertex},
{"lit_3d.frag", "shaders/lit_3d.frag.luma", .Fragment},
{"default_2d.vert", "shaders/default_2d.vert.luma", .Vertex},
{"default_2d.frag", "shaders/default_2d.frag.luma", .Fragment},
{"lit_2d.frag", "shaders/lit_2d.frag.luma", .Fragment},
}
for s in shaders {
source, _ := os.read_entire_file(s.file, context.allocator)
result := shader.compile(string(source), shader.Compile_Options{
target = .SPIR_V,
opt_level = .Basic,
stage = s.stage,
}, s.name)
defer shader.destroy_compile_result(&result)
if !result.success {
fmt.printf("FAIL: %s\n", s.name)
for d in result.diagnostics {
msg := shader.format_diagnostic(d)
fmt.printf(" %s\n", msg)
delete(msg)
}
} else {
outpath := fmt.tprintf("/tmp/%s.spv", s.name)
_ = os.write_entire_file(outpath, result.output)
fmt.printf("OK: %s -> %s (%d bytes)\n", s.name, outpath, len(result.output))
}
}
}