mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2025-02-04 15:04:28 +01:00
shader: Parse function signatures
This commit is contained in:
parent
5ea5dfccfc
commit
ddba8a911f
@ -38,11 +38,9 @@ type constant struct {
|
|||||||
|
|
||||||
type function struct {
|
type function struct {
|
||||||
name string
|
name string
|
||||||
args []variable
|
in []string
|
||||||
rets []variable
|
out []string
|
||||||
block *block
|
block *block
|
||||||
|
|
||||||
ir shaderir.Func
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type compileState struct {
|
type compileState struct {
|
||||||
@ -208,42 +206,44 @@ func (cs *compileState) parseFunc(d *ast.FuncDecl, block *block) function {
|
|||||||
return function{}
|
return function{}
|
||||||
}
|
}
|
||||||
|
|
||||||
var args []variable
|
var in []string
|
||||||
|
var inT []shaderir.Type
|
||||||
for _, f := range d.Type.Params.List {
|
for _, f := range d.Type.Params.List {
|
||||||
t := cs.parseType(f.Type)
|
t := cs.parseType(f.Type)
|
||||||
for _, n := range f.Names {
|
for _, n := range f.Names {
|
||||||
args = append(args, variable{
|
in = append(in, n.Name)
|
||||||
name: n.Name,
|
inT = append(inT, t.ir)
|
||||||
typ: t,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var rets []variable
|
var out []string
|
||||||
|
var outT []shaderir.Type
|
||||||
if d.Type.Results != nil {
|
if d.Type.Results != nil {
|
||||||
for _, f := range d.Type.Results.List {
|
for _, f := range d.Type.Results.List {
|
||||||
t := cs.parseType(f.Type)
|
t := cs.parseType(f.Type)
|
||||||
if len(f.Names) == 0 {
|
if len(f.Names) == 0 {
|
||||||
rets = append(rets, variable{
|
out = append(out, "")
|
||||||
name: "",
|
outT = append(outT, t.ir)
|
||||||
typ: t,
|
|
||||||
})
|
|
||||||
} else {
|
} else {
|
||||||
for _, n := range f.Names {
|
for _, n := range f.Names {
|
||||||
rets = append(rets, variable{
|
out = append(out, n.Name)
|
||||||
name: n.Name,
|
outT = append(outT, t.ir)
|
||||||
typ: t,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cs.ir.Funcs = append(cs.ir.Funcs, shaderir.Func{
|
||||||
|
Index: len(cs.ir.Funcs),
|
||||||
|
InParams: inT,
|
||||||
|
OutParams: outT,
|
||||||
|
})
|
||||||
|
|
||||||
return function{
|
return function{
|
||||||
name: d.Name.Name,
|
name: d.Name.Name,
|
||||||
args: args,
|
in: in,
|
||||||
rets: rets,
|
out: out,
|
||||||
//body: cs.parseBlock(block, d.Body),
|
//block: cs.parseBlock(block, d.Body),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,6 +40,17 @@ uniform vec4 U1;`,
|
|||||||
FS: `uniform vec2 U0;
|
FS: `uniform vec2 U0;
|
||||||
uniform vec4 U1;`,
|
uniform vec4 U1;`,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
Name: "func",
|
||||||
|
Src: `package main
|
||||||
|
|
||||||
|
func Foo(foo vec2) vec4 {
|
||||||
|
}`,
|
||||||
|
VS: `void F0(in vec2 l0, out vec4 l1) {
|
||||||
|
}`,
|
||||||
|
FS: `void F0(in vec2 l0, out vec4 l1) {
|
||||||
|
}`,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
for _, tc := range tests {
|
for _, tc := range tests {
|
||||||
s, err := Compile([]byte(tc.Src))
|
s, err := Compile([]byte(tc.Src))
|
||||||
|
Loading…
Reference in New Issue
Block a user