mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2025-01-26 10:42:42 +01:00
internal/shaderir: change Op from string to int
This is a preparation to distinguish Hadamard product and matrix product for HLSL. Updates #1007
This commit is contained in:
parent
7d0f95e9be
commit
044d41dd2d
@ -504,9 +504,9 @@ func (c *compileContext) block(p *shaderir.Program, topBlock, block *shaderir.Bl
|
|||||||
var op string
|
var op string
|
||||||
switch e.Op {
|
switch e.Op {
|
||||||
case shaderir.Add, shaderir.Sub, shaderir.NotOp:
|
case shaderir.Add, shaderir.Sub, shaderir.NotOp:
|
||||||
op = string(e.Op)
|
op = opString(e.Op)
|
||||||
default:
|
default:
|
||||||
op = fmt.Sprintf("?(unexpected op: %s)", string(e.Op))
|
op = fmt.Sprintf("?(unexpected op: %d)", e.Op)
|
||||||
}
|
}
|
||||||
return fmt.Sprintf("%s(%s)", op, expr(&e.Exprs[0]))
|
return fmt.Sprintf("%s(%s)", op, expr(&e.Exprs[0]))
|
||||||
case shaderir.Binary:
|
case shaderir.Binary:
|
||||||
@ -514,7 +514,7 @@ func (c *compileContext) block(p *shaderir.Program, topBlock, block *shaderir.Bl
|
|||||||
// '%' is not defined.
|
// '%' is not defined.
|
||||||
return fmt.Sprintf("modInt((%s), (%s))", expr(&e.Exprs[0]), expr(&e.Exprs[1]))
|
return fmt.Sprintf("modInt((%s), (%s))", expr(&e.Exprs[0]), expr(&e.Exprs[1]))
|
||||||
}
|
}
|
||||||
return fmt.Sprintf("(%s) %s (%s)", expr(&e.Exprs[0]), e.Op, expr(&e.Exprs[1]))
|
return fmt.Sprintf("(%s) %s (%s)", expr(&e.Exprs[0]), opString(e.Op), expr(&e.Exprs[1]))
|
||||||
case shaderir.Selection:
|
case shaderir.Selection:
|
||||||
return fmt.Sprintf("(%s) ? (%s) : (%s)", expr(&e.Exprs[0]), expr(&e.Exprs[1]), expr(&e.Exprs[2]))
|
return fmt.Sprintf("(%s) ? (%s) : (%s)", expr(&e.Exprs[0]), expr(&e.Exprs[1]), expr(&e.Exprs[2]))
|
||||||
case shaderir.Call:
|
case shaderir.Call:
|
||||||
@ -594,9 +594,9 @@ func (c *compileContext) block(p *shaderir.Program, topBlock, block *shaderir.Bl
|
|||||||
var op string
|
var op string
|
||||||
switch s.ForOp {
|
switch s.ForOp {
|
||||||
case shaderir.LessThanOp, shaderir.LessThanEqualOp, shaderir.GreaterThanOp, shaderir.GreaterThanEqualOp, shaderir.EqualOp, shaderir.NotEqualOp:
|
case shaderir.LessThanOp, shaderir.LessThanEqualOp, shaderir.GreaterThanOp, shaderir.GreaterThanEqualOp, shaderir.EqualOp, shaderir.NotEqualOp:
|
||||||
op = string(s.ForOp)
|
op = opString(s.ForOp)
|
||||||
default:
|
default:
|
||||||
op = fmt.Sprintf("?(unexpected op: %s)", string(s.ForOp))
|
op = fmt.Sprintf("?(unexpected op: %d)", s.ForOp)
|
||||||
}
|
}
|
||||||
|
|
||||||
t := s.ForVarType
|
t := s.ForVarType
|
||||||
|
@ -20,6 +20,50 @@ import (
|
|||||||
"github.com/hajimehoshi/ebiten/v2/internal/shaderir"
|
"github.com/hajimehoshi/ebiten/v2/internal/shaderir"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func opString(op shaderir.Op) string {
|
||||||
|
switch op {
|
||||||
|
case shaderir.Add:
|
||||||
|
return "+"
|
||||||
|
case shaderir.Sub:
|
||||||
|
return "-"
|
||||||
|
case shaderir.NotOp:
|
||||||
|
return "!"
|
||||||
|
case shaderir.Mul:
|
||||||
|
return "*"
|
||||||
|
case shaderir.Div:
|
||||||
|
return "/"
|
||||||
|
case shaderir.ModOp:
|
||||||
|
return "%"
|
||||||
|
case shaderir.LeftShift:
|
||||||
|
return "<<"
|
||||||
|
case shaderir.RightShift:
|
||||||
|
return ">>"
|
||||||
|
case shaderir.LessThanOp:
|
||||||
|
return "<"
|
||||||
|
case shaderir.LessThanEqualOp:
|
||||||
|
return "<="
|
||||||
|
case shaderir.GreaterThanOp:
|
||||||
|
return ">"
|
||||||
|
case shaderir.GreaterThanEqualOp:
|
||||||
|
return ">="
|
||||||
|
case shaderir.EqualOp:
|
||||||
|
return "=="
|
||||||
|
case shaderir.NotEqualOp:
|
||||||
|
return "!="
|
||||||
|
case shaderir.And:
|
||||||
|
return "&"
|
||||||
|
case shaderir.Xor:
|
||||||
|
return "^"
|
||||||
|
case shaderir.Or:
|
||||||
|
return "|"
|
||||||
|
case shaderir.AndAnd:
|
||||||
|
return "&&"
|
||||||
|
case shaderir.OrOr:
|
||||||
|
return "||"
|
||||||
|
}
|
||||||
|
return fmt.Sprintf("!(unexpected operator: %d)", op)
|
||||||
|
}
|
||||||
|
|
||||||
func typeString(t *shaderir.Type) (string, string) {
|
func typeString(t *shaderir.Type) (string, string) {
|
||||||
switch t.Main {
|
switch t.Main {
|
||||||
case shaderir.Array:
|
case shaderir.Array:
|
||||||
|
@ -371,13 +371,13 @@ func (c *compileContext) block(p *shaderir.Program, topBlock, block *shaderir.Bl
|
|||||||
var op string
|
var op string
|
||||||
switch e.Op {
|
switch e.Op {
|
||||||
case shaderir.Add, shaderir.Sub, shaderir.NotOp:
|
case shaderir.Add, shaderir.Sub, shaderir.NotOp:
|
||||||
op = string(e.Op)
|
op = opString(e.Op)
|
||||||
default:
|
default:
|
||||||
op = fmt.Sprintf("?(unexpected op: %s)", string(e.Op))
|
op = fmt.Sprintf("?(unexpected op: %d)", e.Op)
|
||||||
}
|
}
|
||||||
return fmt.Sprintf("%s(%s)", op, expr(&e.Exprs[0]))
|
return fmt.Sprintf("%s(%s)", op, expr(&e.Exprs[0]))
|
||||||
case shaderir.Binary:
|
case shaderir.Binary:
|
||||||
return fmt.Sprintf("(%s) %s (%s)", expr(&e.Exprs[0]), e.Op, expr(&e.Exprs[1]))
|
return fmt.Sprintf("(%s) %s (%s)", expr(&e.Exprs[0]), opString(e.Op), expr(&e.Exprs[1]))
|
||||||
case shaderir.Selection:
|
case shaderir.Selection:
|
||||||
return fmt.Sprintf("(%s) ? (%s) : (%s)", expr(&e.Exprs[0]), expr(&e.Exprs[1]), expr(&e.Exprs[2]))
|
return fmt.Sprintf("(%s) ? (%s) : (%s)", expr(&e.Exprs[0]), expr(&e.Exprs[1]), expr(&e.Exprs[2]))
|
||||||
case shaderir.Call:
|
case shaderir.Call:
|
||||||
@ -469,9 +469,9 @@ func (c *compileContext) block(p *shaderir.Program, topBlock, block *shaderir.Bl
|
|||||||
var op string
|
var op string
|
||||||
switch s.ForOp {
|
switch s.ForOp {
|
||||||
case shaderir.LessThanOp, shaderir.LessThanEqualOp, shaderir.GreaterThanOp, shaderir.GreaterThanEqualOp, shaderir.EqualOp, shaderir.NotEqualOp:
|
case shaderir.LessThanOp, shaderir.LessThanEqualOp, shaderir.GreaterThanOp, shaderir.GreaterThanEqualOp, shaderir.EqualOp, shaderir.NotEqualOp:
|
||||||
op = string(s.ForOp)
|
op = opString(s.ForOp)
|
||||||
default:
|
default:
|
||||||
op = fmt.Sprintf("?(unexpected op: %s)", string(s.ForOp))
|
op = fmt.Sprintf("?(unexpected op: %d)", s.ForOp)
|
||||||
}
|
}
|
||||||
|
|
||||||
t := s.ForVarType
|
t := s.ForVarType
|
||||||
|
@ -20,6 +20,50 @@ import (
|
|||||||
"github.com/hajimehoshi/ebiten/v2/internal/shaderir"
|
"github.com/hajimehoshi/ebiten/v2/internal/shaderir"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func opString(op shaderir.Op) string {
|
||||||
|
switch op {
|
||||||
|
case shaderir.Add:
|
||||||
|
return "+"
|
||||||
|
case shaderir.Sub:
|
||||||
|
return "-"
|
||||||
|
case shaderir.NotOp:
|
||||||
|
return "!"
|
||||||
|
case shaderir.Mul:
|
||||||
|
return "*"
|
||||||
|
case shaderir.Div:
|
||||||
|
return "/"
|
||||||
|
case shaderir.ModOp:
|
||||||
|
return "%"
|
||||||
|
case shaderir.LeftShift:
|
||||||
|
return "<<"
|
||||||
|
case shaderir.RightShift:
|
||||||
|
return ">>"
|
||||||
|
case shaderir.LessThanOp:
|
||||||
|
return "<"
|
||||||
|
case shaderir.LessThanEqualOp:
|
||||||
|
return "<="
|
||||||
|
case shaderir.GreaterThanOp:
|
||||||
|
return ">"
|
||||||
|
case shaderir.GreaterThanEqualOp:
|
||||||
|
return ">="
|
||||||
|
case shaderir.EqualOp:
|
||||||
|
return "=="
|
||||||
|
case shaderir.NotEqualOp:
|
||||||
|
return "!="
|
||||||
|
case shaderir.And:
|
||||||
|
return "&"
|
||||||
|
case shaderir.Xor:
|
||||||
|
return "^"
|
||||||
|
case shaderir.Or:
|
||||||
|
return "|"
|
||||||
|
case shaderir.AndAnd:
|
||||||
|
return "&&"
|
||||||
|
case shaderir.OrOr:
|
||||||
|
return "||"
|
||||||
|
}
|
||||||
|
return fmt.Sprintf("!(unexpected operator: %d)", op)
|
||||||
|
}
|
||||||
|
|
||||||
func typeString(t *shaderir.Type, packed bool, ref bool) string {
|
func typeString(t *shaderir.Type, packed bool, ref bool) string {
|
||||||
switch t.Main {
|
switch t.Main {
|
||||||
case shaderir.Array:
|
case shaderir.Array:
|
||||||
|
@ -131,28 +131,28 @@ const (
|
|||||||
Index
|
Index
|
||||||
)
|
)
|
||||||
|
|
||||||
type Op string
|
type Op int
|
||||||
|
|
||||||
const (
|
const (
|
||||||
Add Op = "+"
|
Add Op = iota
|
||||||
Sub Op = "-"
|
Sub
|
||||||
NotOp Op = "!"
|
NotOp
|
||||||
Mul Op = "*"
|
Mul // TODO: Separate Hadamard-product and Matrix-product
|
||||||
Div Op = "/"
|
Div
|
||||||
ModOp Op = "%"
|
ModOp
|
||||||
LeftShift Op = "<<"
|
LeftShift
|
||||||
RightShift Op = ">>"
|
RightShift
|
||||||
LessThanOp Op = "<"
|
LessThanOp
|
||||||
LessThanEqualOp Op = "<="
|
LessThanEqualOp
|
||||||
GreaterThanOp Op = ">"
|
GreaterThanOp
|
||||||
GreaterThanEqualOp Op = ">="
|
GreaterThanEqualOp
|
||||||
EqualOp Op = "=="
|
EqualOp
|
||||||
NotEqualOp Op = "!="
|
NotEqualOp
|
||||||
And Op = "&"
|
And
|
||||||
Xor Op = "^"
|
Xor
|
||||||
Or Op = "|"
|
Or
|
||||||
AndAnd Op = "&&"
|
AndAnd
|
||||||
OrOr Op = "||"
|
OrOr
|
||||||
)
|
)
|
||||||
|
|
||||||
func OpFromToken(t token.Token) (Op, bool) {
|
func OpFromToken(t token.Token) (Op, bool) {
|
||||||
@ -196,7 +196,7 @@ func OpFromToken(t token.Token) (Op, bool) {
|
|||||||
case token.LOR:
|
case token.LOR:
|
||||||
return OrOr, true
|
return OrOr, true
|
||||||
}
|
}
|
||||||
return "", false
|
return 0, false
|
||||||
}
|
}
|
||||||
|
|
||||||
type BuiltinFunc string
|
type BuiltinFunc string
|
||||||
|
Loading…
Reference in New Issue
Block a user