Files
gio/gpu/internal/convertshaders/glslvalidate.go
T
Elias Naur 2c7aba9e7c gpu/internal/convertshaders: move internal/cmd/convertshaders
The convert program is only used by the shaders from package gpu, and
we're about to make the backend package imported by the program internal
to package gpu. Move the converter below package gpu.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
2021-03-06 14:26:47 +01:00

47 lines
1003 B
Go

// SPDX-License-Identifier: Unlicense OR MIT
package main
import (
"bytes"
"fmt"
"io/ioutil"
"os/exec"
"path/filepath"
)
// GLSLValidator is OpenGL reference compiler.
type GLSLValidator struct {
Bin string
WorkDir WorkDir
}
func NewGLSLValidator() *GLSLValidator { return &GLSLValidator{Bin: "glslangValidator"} }
// ConvertCompute converts glsl compute shader to spirv.
func (glsl *GLSLValidator) ConvertCompute(path string, input []byte) ([]byte, error) {
base := glsl.WorkDir.Path(filepath.Base(path))
pathout := base + ".out"
cmd := exec.Command(glsl.Bin,
"-G100", // OpenGL ES 3.1.
"-w", // Suppress warnings.
"-S", "comp",
"-o", pathout,
path,
)
cmd.Stdin = bytes.NewBuffer(input)
out, err := cmd.Output()
if err != nil {
return nil, fmt.Errorf("%s\nfailed to run %v: %w", out, cmd.Args, err)
}
compiled, err := ioutil.ReadFile(pathout)
if err != nil {
return nil, fmt.Errorf("unable to read output %q: %w", pathout, err)
}
return compiled, nil
}