mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2025-01-12 12:08:58 +01:00
internal/shader: optimization: remove unnecessary local variables
Updates #2034 Updates #2188
This commit is contained in:
parent
b6a340a96f
commit
4afabe34ae
@ -534,32 +534,12 @@ func (cs *compileState) parseExpr(block *block, expr ast.Expr, markLocalVariable
|
|||||||
return nil, nil, nil, false
|
return nil, nil, nil, false
|
||||||
}
|
}
|
||||||
|
|
||||||
idx := block.totalLocalVariableNum()
|
|
||||||
block.vars = append(block.vars, variable{
|
|
||||||
typ: t,
|
|
||||||
})
|
|
||||||
|
|
||||||
// Calling the function should be done eariler to treat out-params correctly.
|
|
||||||
stmts = append(stmts, shaderir.Stmt{
|
|
||||||
Type: shaderir.Assign,
|
|
||||||
Exprs: []shaderir.Expr{
|
|
||||||
{
|
|
||||||
Type: shaderir.LocalVariable,
|
|
||||||
Index: idx,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Type: shaderir.Call,
|
|
||||||
Exprs: append([]shaderir.Expr{callee}, args...),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
// The actual expression here is just a local variable that includes the result of the
|
// The actual expression here is just a local variable that includes the result of the
|
||||||
// function call.
|
// function call.
|
||||||
return []shaderir.Expr{
|
return []shaderir.Expr{
|
||||||
{
|
{
|
||||||
Type: shaderir.LocalVariable,
|
Type: shaderir.Call,
|
||||||
Index: idx,
|
Exprs: append([]shaderir.Expr{callee}, args...),
|
||||||
},
|
},
|
||||||
}, []shaderir.Type{t}, stmts, true
|
}, []shaderir.Type{t}, stmts, true
|
||||||
}
|
}
|
||||||
|
4
internal/shader/testdata/call.expected.vs
vendored
4
internal/shader/testdata/call.expected.vs
vendored
@ -2,9 +2,7 @@ vec2 F0(in vec2 l0);
|
|||||||
vec2 F1(in vec2 l0);
|
vec2 F1(in vec2 l0);
|
||||||
|
|
||||||
vec2 F0(in vec2 l0) {
|
vec2 F0(in vec2 l0) {
|
||||||
vec2 l1 = vec2(0);
|
return F1(l0);
|
||||||
l1 = F1(l0);
|
|
||||||
return l1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
vec2 F1(in vec2 l0) {
|
vec2 F1(in vec2 l0) {
|
||||||
|
8
internal/shader/testdata/const4.expected.vs
vendored
8
internal/shader/testdata/const4.expected.vs
vendored
@ -12,13 +12,9 @@ float F1(in float l0) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int F2(void) {
|
int F2(void) {
|
||||||
int l0 = 0;
|
return F0(1);
|
||||||
l0 = F0(1);
|
|
||||||
return l0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
float F3(void) {
|
float F3(void) {
|
||||||
float l0 = float(0);
|
return F1(1.0);
|
||||||
l0 = F1(1.0);
|
|
||||||
return l0;
|
|
||||||
}
|
}
|
||||||
|
10
internal/shader/testdata/define2.expected.vs
vendored
10
internal/shader/testdata/define2.expected.vs
vendored
@ -4,13 +4,9 @@ vec2 F1(void);
|
|||||||
vec2 F0(void) {
|
vec2 F0(void) {
|
||||||
vec2 l0 = vec2(0);
|
vec2 l0 = vec2(0);
|
||||||
vec2 l1 = vec2(0);
|
vec2 l1 = vec2(0);
|
||||||
vec2 l2 = vec2(0);
|
l0 = (1.0) * (F1());
|
||||||
vec2 l3 = vec2(0);
|
l1 = (F1()) * (1.0);
|
||||||
l0 = F1();
|
return l0;
|
||||||
l1 = (1.0) * (l0);
|
|
||||||
l2 = F1();
|
|
||||||
l3 = (l2) * (1.0);
|
|
||||||
return l1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
vec2 F1(void) {
|
vec2 F1(void) {
|
||||||
|
4
internal/shader/testdata/for4.expected.vs
vendored
4
internal/shader/testdata/for4.expected.vs
vendored
@ -11,10 +11,8 @@ int F1(void) {
|
|||||||
l0 = 0;
|
l0 = 0;
|
||||||
for (int l1 = 0; l1 < 10; l1++) {
|
for (int l1 = 0; l1 < 10; l1++) {
|
||||||
int l2 = 0;
|
int l2 = 0;
|
||||||
int l3 = 0;
|
|
||||||
l2 = F0(l1);
|
l2 = F0(l1);
|
||||||
l3 = l2;
|
l0 = (l0) + (l2);
|
||||||
l0 = (l0) + (l3);
|
|
||||||
}
|
}
|
||||||
l2 = 0;
|
l2 = 0;
|
||||||
l0 = (l0) + (l2);
|
l0 = (l0) + (l2);
|
||||||
|
14
internal/shader/testdata/for5.expected.fs
vendored
14
internal/shader/testdata/for5.expected.fs
vendored
@ -14,16 +14,12 @@ void main(void) {
|
|||||||
l0 = 0;
|
l0 = 0;
|
||||||
for (int l1 = 0; l1 < 10; l1++) {
|
for (int l1 = 0; l1 < 10; l1++) {
|
||||||
int l2 = 0;
|
int l2 = 0;
|
||||||
int l3 = 0;
|
|
||||||
l2 = F0(l1);
|
l2 = F0(l1);
|
||||||
l3 = l2;
|
l0 = (l0) + (l2);
|
||||||
l0 = (l0) + (l3);
|
for (int l3 = 0; l3 < 10; l3++) {
|
||||||
for (int l4 = 0; l4 < 10; l4++) {
|
int l4 = 0;
|
||||||
int l5 = 0;
|
l4 = F0(l3);
|
||||||
int l6 = 0;
|
l0 = (l0) + (l4);
|
||||||
l5 = F0(l4);
|
|
||||||
l6 = l5;
|
|
||||||
l0 = (l0) + (l6);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
l2 = 0;
|
l2 = 0;
|
||||||
|
14
internal/shader/testdata/for5.expected.vs
vendored
14
internal/shader/testdata/for5.expected.vs
vendored
@ -15,16 +15,12 @@ void main(void) {
|
|||||||
l0 = 0;
|
l0 = 0;
|
||||||
for (int l1 = 0; l1 < 10; l1++) {
|
for (int l1 = 0; l1 < 10; l1++) {
|
||||||
int l2 = 0;
|
int l2 = 0;
|
||||||
int l3 = 0;
|
|
||||||
l2 = F0(l1);
|
l2 = F0(l1);
|
||||||
l3 = l2;
|
l0 = (l0) + (l2);
|
||||||
l0 = (l0) + (l3);
|
for (int l3 = 0; l3 < 10; l3++) {
|
||||||
for (int l4 = 0; l4 < 10; l4++) {
|
int l4 = 0;
|
||||||
int l5 = 0;
|
l4 = F0(l3);
|
||||||
int l6 = 0;
|
l0 = (l0) + (l4);
|
||||||
l5 = F0(l4);
|
|
||||||
l6 = l5;
|
|
||||||
l0 = (l0) + (l6);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
l2 = 0;
|
l2 = 0;
|
||||||
|
20
internal/shader/testdata/number.expected.vs
vendored
20
internal/shader/testdata/number.expected.vs
vendored
@ -8,25 +8,17 @@ void F5(void);
|
|||||||
vec2 F0(void) {
|
vec2 F0(void) {
|
||||||
float l0 = float(0);
|
float l0 = float(0);
|
||||||
float l1 = float(0);
|
float l1 = float(0);
|
||||||
float l2 = float(0);
|
l0 = (F2()) * (1.0);
|
||||||
float l3 = float(0);
|
l1 = (1.0) * (F2());
|
||||||
l0 = F2();
|
return vec2(l0, l1);
|
||||||
l1 = (l0) * (1.0);
|
|
||||||
l2 = F2();
|
|
||||||
l3 = (1.0) * (l2);
|
|
||||||
return vec2(l1, l3);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
vec2 F1(void) {
|
vec2 F1(void) {
|
||||||
float l0 = float(0);
|
float l0 = float(0);
|
||||||
float l1 = float(0);
|
float l1 = float(0);
|
||||||
float l2 = float(0);
|
l0 = (F2()) * (1.0);
|
||||||
float l3 = float(0);
|
l1 = (1.0) * (F2());
|
||||||
l0 = F2();
|
return vec2(l0, l1);
|
||||||
l1 = (l0) * (1.0);
|
|
||||||
l2 = F2();
|
|
||||||
l3 = (1.0) * (l2);
|
|
||||||
return vec2(l1, l3);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
float F2(void) {
|
float F2(void) {
|
||||||
|
Loading…
Reference in New Issue
Block a user