Files
aego/render/shaderx/surface_channels_test.go
sanspie 5eb1832907
ci-platforms / darwin amd64 smoke (push) Skipped
ci / build (amd64, linux, ubuntu-24.04) (push) Failing after 15m28s
ci / release (push) Skipped
ci-platforms / windows amd64 smoke (push) Skipped
ci-platforms / darwin arm64 smoke (push) Skipped
ci / checks (push) Successful in 7m47s
Complete Stage 12 for v0.12.0
2026-11-05 11:46:53 +03:00

44 lines
1.6 KiB
Go

package shaderx
import (
"fmt"
"strings"
"testing"
"aego/render/shader"
)
func TestSurfaceChannelsPreserveSixUserBindingsAndRejectAmbiguity(t *testing.T) {
base := "#pragma aego abi 1\n#pragma domain sprite\n#pragma lighting forward2d\n#pragma material\n%s#pragma end\nvoid fragment(){aego_out=vec4(1.0);}\n"
params := "uniform sampler2D Normal; // @normal\nuniform sampler2D Emission; // @emission\n"
for i := 0; i < 6; i++ {
params += fmt.Sprintf("uniform sampler2D User%d;\n", i)
}
u, diags := Parse([]byte(fmt.Sprintf(base, params)), "surface.aeshader", nil)
if len(diags) != 0 {
t.Fatal(diags)
}
if u.Features&shader.FeatureSurfaceChannels == 0 || u.Params[0].Slot != shader.TexNormal || u.Params[1].Slot != shader.TexEmission {
t.Fatal("surface resources missing from ABI")
}
for i := 0; i < 6; i++ {
if u.Params[i+2].Slot != shader.TexUser+i {
t.Fatal("user sampler budget was reduced")
}
}
for _, extra := range []string{
"uniform sampler2D Extra;\n",
"uniform sampler2D SecondEmission; // @emission\n",
"uniform sampler2D Both; // @normal @emission\n",
"uniform vec4 Wrong; // @emission\n",
} {
if _, issues := Parse([]byte(fmt.Sprintf(base, params+extra)), "bad.aeshader", nil); len(issues) == 0 {
t.Fatalf("accepted invalid declarations: %s", extra)
}
}
noLighting := strings.ReplaceAll(fmt.Sprintf(base, "uniform sampler2D Emission; // @emission\n"), "#pragma lighting forward2d\n", "")
if _, issues := Parse([]byte(noLighting), "unlit.aeshader", nil); len(issues) == 0 {
t.Fatal("Unlit silently consumed lighting reservations")
}
}