mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2024-12-25 03:08:54 +01:00
shader: Bug fix: Wrong local variable index in a block in an entry point
This commit is contained in:
parent
4d20da9bc0
commit
9b6b306ca3
@ -677,6 +677,15 @@ func (cs *compileState) parseBlock(outer *block, fname string, stmts []ast.Stmt,
|
|||||||
for b := outer; b != nil; b = b.outer {
|
for b := outer; b != nil; b = b.outer {
|
||||||
offset += len(b.vars)
|
offset += len(b.vars)
|
||||||
}
|
}
|
||||||
|
if fname == cs.vertexEntry {
|
||||||
|
offset -= len(cs.ir.Attributes)
|
||||||
|
offset-- // position
|
||||||
|
offset -= len(cs.ir.Varyings)
|
||||||
|
}
|
||||||
|
if fname == cs.fragmentEntry {
|
||||||
|
offset-- // position
|
||||||
|
offset -= len(cs.ir.Varyings)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
block := &block{
|
block := &block{
|
||||||
|
35
internal/shader/testdata/for5.expected.vs
vendored
Normal file
35
internal/shader/testdata/for5.expected.vs
vendored
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
uniform float U0;
|
||||||
|
uniform float U1;
|
||||||
|
uniform float U2;
|
||||||
|
attribute vec2 A0;
|
||||||
|
|
||||||
|
void F0(in int l0, out int l1);
|
||||||
|
|
||||||
|
void F0(in int l0, out int l1) {
|
||||||
|
l1 = l0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void main(void) {
|
||||||
|
int l0 = 0;
|
||||||
|
int l2 = 0;
|
||||||
|
l0 = 0;
|
||||||
|
for (int l1 = 0; l1 < 10; l1++) {
|
||||||
|
int l2 = 0;
|
||||||
|
int l3 = 0;
|
||||||
|
F0(l1, l2);
|
||||||
|
l3 = l2;
|
||||||
|
l0 = (l0) + (l3);
|
||||||
|
for (int l4 = 0; l4 < 10; l4++) {
|
||||||
|
int l5 = 0;
|
||||||
|
int l6 = 0;
|
||||||
|
F0(l4, l5);
|
||||||
|
l6 = l5;
|
||||||
|
l0 = (l0) + (l6);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
l2 = 0;
|
||||||
|
l0 = (l0) + (l2);
|
||||||
|
gl_Position = vec4(l0);
|
||||||
|
return;
|
||||||
|
}
|
26
internal/shader/testdata/for5.go
vendored
Normal file
26
internal/shader/testdata/for5.go
vendored
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
var (
|
||||||
|
U0 float
|
||||||
|
U1 float
|
||||||
|
U2 float
|
||||||
|
)
|
||||||
|
|
||||||
|
func Ident(x int) int {
|
||||||
|
return x
|
||||||
|
}
|
||||||
|
|
||||||
|
func Vertex(pos vec2) vec4 {
|
||||||
|
sum := 0
|
||||||
|
for i := 0; i < 10; i++ {
|
||||||
|
x := Ident(i)
|
||||||
|
sum += x
|
||||||
|
for j := 0; j < 10; j++ {
|
||||||
|
x := Ident(j)
|
||||||
|
sum += x
|
||||||
|
}
|
||||||
|
}
|
||||||
|
y := 0
|
||||||
|
sum += y
|
||||||
|
return vec4(sum)
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user