diff --git a/internal/shader/expr.go b/internal/shader/expr.go index 2941fb0d4..286e856a5 100644 --- a/internal/shader/expr.go +++ b/internal/shader/expr.go @@ -1150,11 +1150,6 @@ func (cs *compileState) parseExpr(block *block, fname string, expr ast.Expr, mar x := exprs[0] t := ts[0] - if (t.IsFloatVector() || t.IsIntVector()) && idx.Const == nil { - cs.addError(e.Pos(), fmt.Sprintf("index must be a constant for the type %s", t.String())) - return nil, nil, nil, false - } - var typ shaderir.Type switch t.Main { case shaderir.Vec2, shaderir.Vec3, shaderir.Vec4: diff --git a/internal/shader/syntax_test.go b/internal/shader/syntax_test.go index 16bd0885b..b865bfb8c 100644 --- a/internal/shader/syntax_test.go +++ b/internal/shader/syntax_test.go @@ -4363,67 +4363,3 @@ func Foo() int { t.Error(err) } } - -func TestSyntaxIndex(t *testing.T) { - // Issue #3011 - if _, err := compileToIR([]byte(`package main - -func Foo() float { - var a int - var b vec4 - return b[a] -} -`)); err == nil { - t.Error("compileToIR must return an error but did not") - } - if _, err := compileToIR([]byte(`package main - -func Foo() int { - var a int - var b ivec4 - return b[a] -} -`)); err == nil { - t.Error("compileToIR must return an error but did not") - } - if _, err := compileToIR([]byte(`package main - -func Foo() float { - var a int - var b mat4 - return b[a][0] -} -`)); err != nil { - t.Error(err) - } - if _, err := compileToIR([]byte(`package main - -func Foo() float { - const a = 0 - var b vec4 - return b[a] -} -`)); err != nil { - t.Error(err) - } - if _, err := compileToIR([]byte(`package main - -func Foo() int { - const a = 0 - var b ivec4 - return b[a] -} -`)); err != nil { - t.Error(err) - } - if _, err := compileToIR([]byte(`package main - -func Foo() float { - const a = 0 - var b mat4 - return b[a][0] -} -`)); err != nil { - t.Error(err) - } -}