Harbor

branch main
showing the latest snapshot on main
main.odin 1.2 KB · Plain text
tools/spirv_test/main.odin 0644 Raw
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))
		}
	}
}