ci-platforms / windows amd64 smoke (push) Skipped
ci / release (push) Successful in 8m58s
ci-platforms / darwin amd64 smoke (push) Skipped
ci-platforms / darwin arm64 smoke (push) Skipped
ci / checks (push) Successful in 4m46s
ci / build (amd64, linux, ubuntu-24.04) (push) Successful in 13m28s
81 lines
1.9 KiB
Go
81 lines
1.9 KiB
Go
package shaderx
|
|
|
|
import (
|
|
"os"
|
|
"os/exec"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
const shaders = "../../engine/res/shaders"
|
|
|
|
func sources(t *testing.T) []string {
|
|
t.Helper()
|
|
var out []string
|
|
for _, pat := range []string{"*.vert", "*.frag"} {
|
|
m, err := filepath.Glob(filepath.Join(shaders, pat))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
out = append(out, m...)
|
|
}
|
|
if len(out) == 0 {
|
|
t.Fatal("no shaders found")
|
|
}
|
|
return out
|
|
}
|
|
|
|
func TestCommittedESShadersAreCurrent(t *testing.T) {
|
|
for _, f := range sources(t) {
|
|
src, err := os.ReadFile(f)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
want, err := Translate(string(src), filepath.Base(f))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
got, err := os.ReadFile(filepath.Join(shaders, ESDir, filepath.Base(f)))
|
|
if err != nil {
|
|
t.Fatalf("%s: run make shaders: %v", filepath.Base(f), err)
|
|
}
|
|
if string(got) != want {
|
|
t.Errorf("%s is out of date, run make shaders", filepath.Base(f))
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestESShadersValidate(t *testing.T) {
|
|
bin := glslang(t)
|
|
for _, f := range sources(t) {
|
|
es := filepath.Join(shaders, ESDir, filepath.Base(f))
|
|
if out, err := exec.Command(bin, es).CombinedOutput(); err != nil {
|
|
t.Errorf("%s: %s", filepath.Base(f), strings.TrimSpace(string(out)))
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestRejectsLegacyAndForeignHeaders(t *testing.T) {
|
|
if _, err := Translate("#version 120\nvoid main(){}", "x"); err == nil {
|
|
t.Fatal("accepted a foreign version")
|
|
}
|
|
if _, err := Translate(SourceVersion+"\nvoid main(){ gl_FragColor = vec4(1.0); }", "x"); err == nil {
|
|
t.Fatal("accepted gl_FragColor")
|
|
}
|
|
}
|
|
|
|
// glslang finds glslangValidator; AEGO_REQUIRE_GLSLANG=1 makes a missing validator fail rather than skip the test.
|
|
func glslang(t *testing.T) string {
|
|
t.Helper()
|
|
bin, err := exec.LookPath("glslangValidator")
|
|
if err != nil {
|
|
if os.Getenv("AEGO_REQUIRE_GLSLANG") == "1" {
|
|
t.Fatal("glslangValidator is required: install glslang-tools")
|
|
}
|
|
t.Skip("glslangValidator is not installed")
|
|
}
|
|
return bin
|
|
}
|
|
|