Parser - main-output instruction
This commit is contained in:
parent
1ee448a4c0
commit
a455f2ad40
4 changed files with 24 additions and 1 deletions
|
@ -43,7 +43,7 @@ syn keyword srdKWDefAsset program pipeline input framebuffer texture sampler
|
||||||
syn keyword srdKWDebug profiling odbg ui-overrides
|
syn keyword srdKWDebug profiling odbg ui-overrides
|
||||||
|
|
||||||
syn keyword srdKWState use-texture use-framebuffer use-program use-pipeline
|
syn keyword srdKWState use-texture use-framebuffer use-program use-pipeline
|
||||||
syn keyword srdKWState uniforms uniforms-i viewport
|
syn keyword srdKWState uniforms uniforms-i viewport main-output
|
||||||
|
|
||||||
syn keyword srdKWDraw fullscreen
|
syn keyword srdKWDraw fullscreen
|
||||||
|
|
||||||
|
|
1
opast.cc
1
opast.cc
|
@ -102,6 +102,7 @@ A_Node* opast::ASTVisitorBrowser(
|
||||||
case A_Node::OP_PROGRAM: case A_Node::OP_PIPELINE:
|
case A_Node::OP_PROGRAM: case A_Node::OP_PIPELINE:
|
||||||
case A_Node::OP_INPUT: case A_Node::OP_FULLSCREEN:
|
case A_Node::OP_INPUT: case A_Node::OP_FULLSCREEN:
|
||||||
case A_Node::OP_ODBG: case A_Node::OP_LOCALS:
|
case A_Node::OP_ODBG: case A_Node::OP_LOCALS:
|
||||||
|
case A_Node::OP_MAINOUT:
|
||||||
//
|
//
|
||||||
case A_Node::OP_USE_FRAMEBUFFER: case A_Node::OP_USE_PIPELINE:
|
case A_Node::OP_USE_FRAMEBUFFER: case A_Node::OP_USE_PIPELINE:
|
||||||
case A_Node::OP_USE_PROGRAM: case A_Node::OP_USE_TEXTURE:
|
case A_Node::OP_USE_PROGRAM: case A_Node::OP_USE_TEXTURE:
|
||||||
|
|
10
opast.hh
10
opast.hh
|
@ -26,6 +26,7 @@ class A_Node
|
||||||
OP_FULLSCREEN , // Draw a fullscreen quad
|
OP_FULLSCREEN , // Draw a fullscreen quad
|
||||||
OP_INPUT , // Input declaration
|
OP_INPUT , // Input declaration
|
||||||
OP_LOCALS , // Declare local variables
|
OP_LOCALS , // Declare local variables
|
||||||
|
OP_MAINOUT , // Select the output buffer
|
||||||
OP_ODBG , // Output debugging
|
OP_ODBG , // Output debugging
|
||||||
OP_PIPELINE , // Shader pipeline declaration
|
OP_PIPELINE , // Shader pipeline declaration
|
||||||
OP_PROFILE , // Profiling block
|
OP_PROFILE , // Profiling block
|
||||||
|
@ -511,6 +512,15 @@ class T_LocalsInstrNode : public A_InstructionNode
|
||||||
{ return varLocs_[ index ]; }
|
{ return varLocs_[ index ]; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Main output selection
|
||||||
|
class T_MainOutputInstrNode : public A_InstructionNode
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
T_MainOutputInstrNode( T_InstrListNode& parent ) noexcept
|
||||||
|
: A_InstructionNode( OP_MAINOUT , parent , E_InstrRestriction::INIT )
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
// Output debugging
|
// Output debugging
|
||||||
class T_OutputDebugInstrNode : public A_InstructionNode
|
class T_OutputDebugInstrNode : public A_InstructionNode
|
||||||
{
|
{
|
||||||
|
|
12
opparser.cc
12
opparser.cc
|
@ -19,6 +19,7 @@ struct T_ParserImpl_
|
||||||
IF ,
|
IF ,
|
||||||
INPUT ,
|
INPUT ,
|
||||||
LOCALS ,
|
LOCALS ,
|
||||||
|
MAINOUT ,
|
||||||
ODBG ,
|
ODBG ,
|
||||||
PIPELINE ,
|
PIPELINE ,
|
||||||
PROFILE ,
|
PROFILE ,
|
||||||
|
@ -47,6 +48,7 @@ struct T_ParserImpl_
|
||||||
add( "if" , E_InstrType::IF );
|
add( "if" , E_InstrType::IF );
|
||||||
add( "input" , E_InstrType::INPUT );
|
add( "input" , E_InstrType::INPUT );
|
||||||
add( "locals" , E_InstrType::LOCALS );
|
add( "locals" , E_InstrType::LOCALS );
|
||||||
|
add( "main-output" , E_InstrType::MAINOUT );
|
||||||
add( "odbg" , E_InstrType::ODBG );
|
add( "odbg" , E_InstrType::ODBG );
|
||||||
add( "pipeline" , E_InstrType::PIPELINE );
|
add( "pipeline" , E_InstrType::PIPELINE );
|
||||||
add( "profiling" , E_InstrType::PROFILE );
|
add( "profiling" , E_InstrType::PROFILE );
|
||||||
|
@ -505,7 +507,17 @@ void T_ParserImpl_::parseInstructions(
|
||||||
M_CASE_( USE_TEXTURE , UseTexture );
|
M_CASE_( USE_TEXTURE , UseTexture );
|
||||||
M_CASE_( VIEWPORT , Viewport );
|
M_CASE_( VIEWPORT , Viewport );
|
||||||
|
|
||||||
|
case E_InstrType::MAINOUT:
|
||||||
|
if ( ilist.size( ) != 1 ) {
|
||||||
|
errors.addNew( "too many arguments" , iname.location( ) );
|
||||||
|
}
|
||||||
|
instructions.add< T_MainOutputInstrNode >( ).location( ) = iname.location( );
|
||||||
|
break;
|
||||||
|
|
||||||
case E_InstrType::FULLSCREEN:
|
case E_InstrType::FULLSCREEN:
|
||||||
|
if ( ilist.size( ) != 1 ) {
|
||||||
|
errors.addNew( "too many arguments" , iname.location( ) );
|
||||||
|
}
|
||||||
instructions.add< T_FullscreenInstrNode >( ).location( ) = iname.location( );
|
instructions.add< T_FullscreenInstrNode >( ).location( ) = iname.location( );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue