a06f331eb8
CI / benchmark (push) Has been skipped
install-script / posix-syntax (push) Successful in 6m1s
CI / build-onnx (push) Failing after 6m43s
init-smoke / dry-run (push) Failing after 15m57s
security / govulncheck (push) Has been cancelled
security / trivy-fs (push) Has been cancelled
CI / test (1.26, ubuntu-latest) (push) Has been cancelled
Scorecard supply-chain security / Scorecard analysis (push) Has been cancelled
CI / test (1.26, macos-latest) (push) Has been cancelled
CI / build-windows (push) Has been cancelled
CI / lint (push) Has been cancelled
install-script / powershell-syntax (push) Has been cancelled
install-script / install (macos-14) (push) Has been cancelled
install-script / install (ubuntu-latest) (push) Has been cancelled
94 lines
1.9 KiB
Go
94 lines
1.9 KiB
Go
package languages
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/zzet/gortex/internal/graph"
|
|
)
|
|
|
|
func TestShaderExtractor_GLSL(t *testing.T) {
|
|
src := []byte(`#version 450
|
|
#include "common.glsl"
|
|
|
|
layout(location = 0) in vec3 aPosition;
|
|
uniform mat4 uModel;
|
|
|
|
struct Light {
|
|
vec3 position;
|
|
vec3 color;
|
|
};
|
|
|
|
vec3 lighting(Light l, vec3 n) {
|
|
return l.color * max(dot(n, l.position), 0.0);
|
|
}
|
|
|
|
void main() {
|
|
gl_Position = uModel * vec4(aPosition, 1.0);
|
|
}
|
|
`)
|
|
e := NewShaderExtractor()
|
|
require.Equal(t, "shader", e.Language())
|
|
|
|
res, err := e.Extract("pass.vert", src)
|
|
require.NoError(t, err)
|
|
|
|
var gotStruct, gotLighting, gotMain, gotUniform, gotInclude bool
|
|
for _, n := range res.Nodes {
|
|
switch n.Name {
|
|
case "Light":
|
|
gotStruct = true
|
|
case "lighting":
|
|
gotLighting = true
|
|
case "main":
|
|
gotMain = true
|
|
case "uModel":
|
|
gotUniform = true
|
|
}
|
|
}
|
|
for _, ed := range res.Edges {
|
|
if ed.Kind == graph.EdgeImports && ed.To == "unresolved::import::common.glsl" {
|
|
gotInclude = true
|
|
}
|
|
}
|
|
assert.True(t, gotStruct)
|
|
assert.True(t, gotLighting)
|
|
assert.True(t, gotMain)
|
|
assert.True(t, gotUniform)
|
|
assert.True(t, gotInclude)
|
|
}
|
|
|
|
func TestShaderExtractor_HLSL(t *testing.T) {
|
|
src := []byte(`cbuffer PerFrame {
|
|
float4x4 view;
|
|
};
|
|
|
|
float4 PSMain(float2 uv : TEXCOORD0) : SV_Target {
|
|
return float4(uv, 0.0, 1.0);
|
|
}
|
|
`)
|
|
res, err := NewShaderExtractor().Extract("pixel.hlsl", src)
|
|
require.NoError(t, err)
|
|
|
|
var gotCB, gotPS bool
|
|
for _, n := range res.Nodes {
|
|
if n.Name == "PerFrame" {
|
|
gotCB = true
|
|
}
|
|
if n.Name == "PSMain" {
|
|
gotPS = true
|
|
}
|
|
}
|
|
assert.True(t, gotCB, "cbuffer PerFrame as type")
|
|
assert.True(t, gotPS, "PSMain as function")
|
|
}
|
|
|
|
func TestShaderExtractor_EmptyInput(t *testing.T) {
|
|
res, err := NewShaderExtractor().Extract("e.glsl", []byte(""))
|
|
require.NoError(t, err)
|
|
require.Len(t, res.Nodes, 1)
|
|
assert.Equal(t, graph.KindFile, res.Nodes[0].Kind)
|
|
}
|