Files
gio/internal/cmd/convertshaders/spirvcross.go
T
2021-03-01 09:59:32 +01:00

46 lines
914 B
Go

// SPDX-License-Identifier: Unlicense OR MIT
package main
import (
"bytes"
"fmt"
"os/exec"
)
// SPIRVCross cross-compiles spirv shaders to es, hlsl and others.
type SPIRVCross struct {
Bin string
}
func NewSPIRVCross() *SPIRVCross { return &SPIRVCross{Bin: "spirv-cross"} }
// Convert converts compute shader from spirv format to a target format.
func (spirv *SPIRVCross) Convert(input []byte, target, version string) (string, error) {
var cmd *exec.Cmd
switch target {
case "es":
cmd = exec.Command(spirv.Bin,
"--es",
"--version", version,
"-",
)
case "hlsl":
cmd = exec.Command(spirv.Bin,
"--hlsl",
"--shader-model", version,
"-",
)
default:
return "", fmt.Errorf("unknown target %q", target)
}
cmd.Stdin = bytes.NewBuffer(input)
out, err := cmd.Output()
if err != nil {
return "", fmt.Errorf("failed to run %v: %w", cmd.Args, err)
}
return string(out), nil
}