游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5370|回复: 8

SoftArt Shader Language Syntax EBNF

[复制链接]

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
发表于 2008-7-25 12:47:00 | 显示全部楼层 |阅读模式
最近给我那个renderer加点儿shader。
没shader光用cpp可控性太差劲。什么parallel coroutine那是想都甭想的事情。

于是整理了一下SASL的EBNF。
主要参考的是ISO C++和C的EBNF。后来看了Brook的,觉得也差不多,那就这么用了反正。

大部分用YACC完成应该问题不大,不知道其他部分如何。
过两天有时间了修改一下SASL的EBNF,精简一些情况,有的我可能考虑的也没那么清楚。

//SASL: SoftArt Shader Language

Syntax

Program             ::= DeclSeq

//////////////////////////////////
//Declaration
//////////////////////////////////
DeclSeq             ::= Decl |
                        DeclSeq Decl
                        
Decl                ::= BlockDecl |
                        FunctioDef

Declarator          ::= DirectDecl [SemanticSpec] [RegisterSpec]

DirectDecl          ::= DeclId |
                        DirectDecl '(' ParamDeclClause ')'|
                        DirectDecl '[' [ConstExp] ']'|
                        '(' Declarator ')'

CvQualifierSeq      ::= CvQualifier [CvQualifierSeq]

CvQualifier         ::= 'const' | 'uniform'

SemanticSpec        ::= ':' Semantic

RegisterSpec        ::= ':' 'register' '(' Register ')'
                        
BlockDecl           ::= SimpleDecl

SimpleDecl          ::= [DeclSpecSeq] [InitDeclList] ';'

AbsDecl             ::= DirectAbsDecl

DirectAbsDecl       ::= [DirectAbsDecl] '(' ParamDeclClause ')' |
                        [DirectAbsDecl] '[' [ConstExp] ']' |
                        '(' AbsDecl ')'
                        

DeclSpecSeq         ::= [DeclSpecSeq] DeclSpec

InitDeclList        ::= InitDecl |
                        InitDeclList ',' InitDecl

InitDecl            ::=    Declarator [Init]

Init                ::= '=' InitClause                         |
                        ( ExpList)
                        
InitClause          ::= AssignmentExp |
                        '{' InitList [','] '}' |
                        '{' '}'
InitList            ::= InitClause |
                        InitList ',' InitClause
                        
DeclSpec            ::= TypeSpec
                        
TypeSpec            ::= SimpleTypeSpec |
                        ClassSpec

SimpleTypeSpec      ::=    'int' | 'half' | 'float' |
                        'int2' | 'half2' | 'float2' |
                        'int3' | 'half3' | 'float3' |
                        'int4' | 'half4' | 'float4' |
                        'float4x4'

/////////////////////////////
//Function
/////////////////////////////
FunctionDef         ::= [DeclSpecSeq] Declarator FunctionBody

FunctionBody        ::= CompoundStatement

/////////////////////////////
//Statements
/////////////////////////////
CompoundStatement   ::= '{' [StatementSeq] '}'

StatementSeq        ::= Statement |
                        StatementSeq Statement

Statement           ::= ExpStatement |
                        CompountStatement |
                        SelectionStatement |
                        IterationStatement |
                        DeclStatement
                        
ExpStatement        ::= [ Expression ] ';'

SelectionStatement  ::= 'if' '(' Condition ')' Statement |
                        'if' '(' Condition ')' Statement 'else' Statement

IterationStatement  ::= 'while' '(' Condition ')' Statement |
                        'do' Statement 'while' '(' Expression ')' ';'
                        'for' '(' ForInitStatement [Condition] ';' [ Expression ] ')' Statement
        
Condition           ::= Expression |
                        TypeSpecSeq Declarator '=' AssignmentExp

ForInitStatement    ::= ExpStatement |
                        SimpleDecl

DeclStatement       ::= BlockDecl

/////////////////////////////                        
//Parameter
/////////////////////////////
ParamDeclClause     ::= [ ParamDeclList ]

ParamDeclList       ::= ParamDecl |
                        ParamDeclList ',' ParamDecl

ParamDecl           ::= DeclSpecSeq Delarator |
                        DeclSpecSeq [AbsDecl]


/////////////////////////////
//Class And Struct
/////////////////////////////
ClassSpec           ::= ClassHead '{' [ MemberSpec ] '}'

ClassHead           ::= 'struct' [ Identifier ]

MemberSpec    `     ::= MemberDecl [MemberSpec]

MemberDeclaration   ::= [DeclSpecSeq] [MemberDeclList]

MemberDeclList      ::= MemberDecl |
                        MemberDeclList ',' MemberDeclarator
                        
MemberDeclarator    ::=    Declarator [ PureSpec ] |
                        Declarator [ ConstInit ] |
                        [ Identifier ] ':' ConstExp



//////////////////////////////////////
//Expressions
//////////////////////////////////////
Expression          ::= AssignmentExp

ConstExp            ::= CondExp

AssignmentExp       ::= CondExp |
                        LogicalOrExp AssignmentOp AssignmentExp
                        
CondExp             ::= LogicalOrExp |
                        LogicalOrExp '?' Expression ':' AssignmentExp

LogicalOrExp        ::= LogicalAndExp |
                        LogicalOrExp '||' LogicalAndExp
                        
LogicalAndExp       ::= InclusiveOrExp |
                        LogicalAndExp '&&' InclusiveOrExp
                        
InclusiveOrExp      ::= ExclusiveOrExp |
                        InclusiveOrExp '|' ExclusiveOrExp
                        
ExclusiveOrExp      ::= AndExp |
                        ExclusiveOrExp '^' AndExp

AndExp              ::= EqualExp |
                        AndExp '&' EqualExp

EqualExp            ::= RelExp |
                        EqualExp '==' RelExp |
                        EqualExp '!=' RelExp

RelExp              ::= ShiftExp |
                        RelExp '<' ShiftExp |
                        RelExp '>' ShiftExp |
                        RelExp '<=' ShiftExp |
                        RelExp '>=' ShiftExp

ShiftExp            ::= AddExp |
                        ShiftExp '<<' AddExp |
                        ShiftExp '>>' AddExp

AddExp              ::= MulExp |
                        AddExp '+' MulExp |
                        AddExp '-' MulExp

MulExp              ::= PmExp |
                        MulExp '*' PmExp |
                        MulExp '/' PmExp |
                        MulExp '%' PmExp
   
PmExp               ::= CastExp |
                        PmExp '.*' CastExp

CastExp             ::= UnaryExp |
                        '(' TypeId ')' CastExp

UnaryExp            ::= PostfixExp |
                        '++' CastExp |
                        '--' CastExp |
                        UnaryOp CastExp
                        
PostfixExp          ::= PrimaryExp |
                        PostfixExp '[' Expression ']' |
                        PostfixExp '(' Expression ')' |
                        PostfixExp '(' [ ExpList ] ')' |
                        SimpleTypeSpec '(' [ ExpList ] ')' |
                        PostfixExp '++' |
                        PostfixExp '--'

PrimaryExp          ::= Literal |
                        '(' Expression ')' |
                        IdExp

IdExp               ::= UnqualifiedId

ExpList             ::= AssigmentExp |
                        ExpList ',' AssignmentExp
                        
//////////////////////////////
//Identifier
//////////////////////////////
DeclId              ::= IdExp |
                        TypeName

UnqualifiedId       ::= Identifier

Identifier          ::= NonDigit |
                        Identifier NonDigit |
                        Identifier Digit

//////////////////////////////
//Literals
//////////////////////////////
Literal             ::= IntLiteral |
                        FloatLiteral |
                        BoolLitreral

IntLiteral          ::= DemicalLiteral

DemicalLiteral      ::= NonZeroDigit |
                        DemicalLiteral | Digit
   
FloatLiteral        ::= FracConstant [ExponentPart] |
                        DigitSeq ExponentPart
                        
BoolLiteral         ::= 'false' |
                        'true'

FracConstant        ::= [DigitSeq] '.' DigitSeq |
                        DigitSeq '.'
                        
ExponentPart        ::= 'e' [Sign] DigitSeq |
                        'E' [Sign] DigitSeq
                        
DigitSeq            ::= Digit |
                        DigitSeq Digit
                        
//////////////////////////
//Terminals
//////////////////////////

NonDigit            ::= AlphaChar |
                        '_'

NonZeroDigit        ::= '1' |  | '9'

AssignmentOp        ::= '=' |
                        '*='  | '/='  | '%=' |
                        '+='  | '-='  |
                        '>>=' | '<<=' |
                        '&='  | '^='  | '|='
Register
Semantic
Digit
AlphaChar
Keyword

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
 楼主| 发表于 2008-7-25 22:11:00 | 显示全部楼层

Re:SoftArt Shader Language Syntax EBNF

唉,居然都没人理的。。。

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2008-7-26 08:35:00 | 显示全部楼层

Re:SoftArt Shader Language Syntax EBNF

你自己写shader language有什么意义呢,你又不能掌控GPU的汇编,人家一改你就得跟着改。Brook要为不同的显卡和CPU写后端。你这么有时间,完全可以做点更有意义的事嘛。

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
 楼主| 发表于 2008-7-26 11:02:00 | 显示全部楼层

Re: Re:SoftArt Shader Language Syntax EBNF

qrli: Re:SoftArt Shader Language Syntax EBNF

你自己写shader language有什么意义呢,你又不能掌控GPU的汇编,人家一改你就得跟着改。Brook要为不同的显卡和CPU写后端。你这么有时间,完全可以做点更有意义的事嘛。


不是为了显卡而作,是为了我的软件渲染器而作的。

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2008-7-26 11:18:00 | 显示全部楼层

Re:SoftArt Shader Language Syntax EBNF

你在做RenderMan那样的东东么?还是mesa那样的西西

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
 楼主| 发表于 2008-7-26 17:52:00 | 显示全部楼层

Re:SoftArt Shader Language Syntax EBNF

目前类似于MESA,也在参考Reyes的架构,考虑怎么做的灵活一点。
还有就是想直接针对Intel的Larrabee那样的结构吧。

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
 楼主| 发表于 2008-7-26 17:53:00 | 显示全部楼层

Re:SoftArt Shader Language Syntax EBNF

看样子qrli挺猛啊。M个QQ给我吧,呵呵。

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2008-7-26 18:18:00 | 显示全部楼层

Re:SoftArt Shader Language Syntax EBNF

已经好多年不用QQ了,现在只用MSN。我是来攒人品的。

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
 楼主| 发表于 2008-7-26 19:41:00 | 显示全部楼层

Re:SoftArt Shader Language Syntax EBNF

那就给个MSN好咧。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-21 21:02

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表