Skip to content

Commit cfb6fa7

Browse files
committed
fix: Correct GPU Go generator embed filename to use source file basename
Previously, the GPU Go generator used the package name for the //go:embed directive (e.g., "main.wgsl"), but the WGSL file was generated using the source filename (e.g., "calculator.wgsl"). This caused build failures when package name != source filename. Changes: - Updated GPUGoGenerator to accept shaderFilename parameter - Modified cmd/guix/main.go to extract and pass basename.wgsl - Updated all tests to pass shader filename to generator - Verified with E2E tests and pre-commit checks This ensures the embed directive always references the correct WGSL file generated from the source .gx file.
1 parent fb7dc55 commit cfb6fa7

3 files changed

Lines changed: 16 additions & 11 deletions

File tree

cmd/guix/main.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,10 @@ func generateFile(srcPath string, p *parser.Parser, verbose bool, verboseLogs bo
285285
}
286286

287287
// Generate GPU Go structs
288-
gpuGoGen := codegen.NewGPUGoGenerator(file.Package)
288+
// Extract base filename for embed directive
289+
baseName := filepath.Base(strings.TrimSuffix(srcPath, guixExt))
290+
shaderFilename := baseName + ".wgsl"
291+
gpuGoGen := codegen.NewGPUGoGenerator(file.Package, shaderFilename)
289292
gpuGoOutput, err := gpuGoGen.Generate(file)
290293
if err != nil {
291294
return fmt.Errorf("failed to generate GPU Go code: %w", err)

pkg/codegen/e2e_wgsl_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ func fsMain(@location(0) color vec4) vec4 {
8585
}
8686

8787
// Generate GPU Go code
88-
gpuGoGen := NewGPUGoGenerator(file.Package)
88+
gpuGoGen := NewGPUGoGenerator(file.Package, "shaders.wgsl")
8989
gpuGoOutput, err := gpuGoGen.Generate(file)
9090
if err != nil {
9191
t.Fatalf("Failed to generate GPU Go code: %v", err)
@@ -187,7 +187,7 @@ func fsCandle(@location(0) color vec4) vec4 {
187187
}
188188

189189
// Generate Go code
190-
gpuGoGen := NewGPUGoGenerator(file.Package)
190+
gpuGoGen := NewGPUGoGenerator(file.Package, "candle.wgsl")
191191
gpuGoOutput, err := gpuGoGen.Generate(file)
192192
if err != nil {
193193
t.Fatalf("Failed to generate GPU Go code: %v", err)

pkg/codegen/gpu_go_generator.go

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,17 @@ import (
1414

1515
// GPUGoGenerator generates Go code from GPU struct declarations
1616
type GPUGoGenerator struct {
17-
fset *token.FileSet
18-
pkg string
17+
fset *token.FileSet
18+
pkg string
19+
shaderFilename string
1920
}
2021

2122
// NewGPUGoGenerator creates a new GPU Go code generator
22-
func NewGPUGoGenerator(pkg string) *GPUGoGenerator {
23+
func NewGPUGoGenerator(pkg string, shaderFilename string) *GPUGoGenerator {
2324
return &GPUGoGenerator{
24-
fset: token.NewFileSet(),
25-
pkg: pkg,
25+
fset: token.NewFileSet(),
26+
pkg: pkg,
27+
shaderFilename: shaderFilename,
2628
}
2729
}
2830

@@ -45,7 +47,7 @@ func (g *GPUGoGenerator) Generate(file *guixast.File) ([]byte, error) {
4547

4648
// Generate shader source constant
4749
if len(file.GPUStructs) > 0 || len(file.GPUFunctions) > 0 {
48-
embedDecl := g.generateShaderEmbed(file.Package)
50+
embedDecl := g.generateShaderEmbed()
4951
decls = append(decls, embedDecl...)
5052
}
5153

@@ -269,14 +271,14 @@ func (g *GPUGoGenerator) generateSizeCheckInit(gpuStruct *guixast.GPUStructDecl)
269271
}
270272

271273
// Generate shader embed declarations
272-
func (g *GPUGoGenerator) generateShaderEmbed(pkgName string) []ast.Decl {
274+
func (g *GPUGoGenerator) generateShaderEmbed() []ast.Decl {
273275
return []ast.Decl{
274276
// Comment directive
275277
&ast.GenDecl{
276278
Tok: token.VAR,
277279
Doc: &ast.CommentGroup{
278280
List: []*ast.Comment{
279-
{Text: fmt.Sprintf("//go:embed %s.wgsl", pkgName)},
281+
{Text: fmt.Sprintf("//go:embed %s", g.shaderFilename)},
280282
},
281283
},
282284
Specs: []ast.Spec{

0 commit comments

Comments
 (0)