Created
May 9, 2017 17:29
-
-
Save exjam/18651b7d9536a3190813bc318f9f5090 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Program <- _ (Instruction / Comment)* _ EndOfProgram? | |
Instruction <- _ (CfInst / CfExpInst / TexClause / AluClause) | |
Number <- < [0-9]+ > | |
HexNumber <- < '0x' [0-9A-Fa-f]+ > | |
Float <- $< '-'? [0-9]+ ('.' [0-9]+ )? 'f'? > | |
EndOfLine <- '\r\n' / '\n' / '\r' | |
EndOfFile <- !. | |
End <- EndOfLine / EndOfFile | |
Comment <- _ ';' [ \t]* <(!End .)*> &End | |
CfInst <- (InstCount _ CfOpcode _ CfInstProperties _) | |
CfExpInst <- (InstCount _ ExpOpcode ':' _ (ExpPixTarget / ExpPosTarget / ExpParamTarget) _ ',' _ ExpSrc _ CfInstProperties _) | |
TexClause <- (InstCount _ TexClauseInstType _ ':' _ CfInstProperties _) (TexInst / Comment)* | |
AluClause <- (InstCount _ AluClauseInstType _ ':' _ AluClauseProperties _) (AluInst / Comment)* | |
EndOfProgram <- 'END_OF_PROGRAM' | |
InstCount <- <Number> | |
VecGpr <- 'R' Number FourCompSwizzle? | |
SrcGpr <- 'R' <Number> | |
SrcGprRel <- 'R[AL' _ '+' _ <Number> _ ']' | |
ConstantFile <- 'C' <Number> | |
ConstantCache <- 'KC' [0-1] '[' Number ']' | |
DstRel <- '[AR' [xyzwXYZW] ']' / '[AL]' | |
PreviousScalar <- 'PS' <Number> | |
PreviousVector <- 'PV' <Number> | |
OneCompSwizzleOpt <- '.' [xyzwXYZW] | |
FourCompSwizzle <- '.' [xyzwXYZW01_]+ | |
Literal <- HexNumber / Float / '(' _ HexNumber _ ',' _ Float _ ')' | |
WriteMask <- [_]+ | |
Negate <- [-] | |
AluClauseInstType <- 'ALU_PUSH_BEFORE' / 'ALU_POP_AFTER' / 'ALU_POP2_AFTER' | |
/ 'ALU_EXT' / 'ALU_CONTINUE' / 'ALU_BREAK' / 'ALU_ELSE_AFTER' / 'ALU' | |
TexClauseInstType <- 'TEX_ACK' / 'TEX' | |
VtxClauseInstType <- 'VTX' / 'VTX_TC' / 'VTX_ACK' / 'VTX_TC_ACK' | |
CfOpcode <- 'NOP' / 'LOOP_START_NO_AL' / 'LOOP_START_DX10' / 'LOOP_START' | |
/ 'LOOP_END' / 'LOOP_CONTINUE' / 'LOOP_BREAK' / 'JUMP' / 'PUSH_ELSE' / 'PUSH' | |
/ 'ELSE' / 'POP_PUSH_ELSE' / 'POP_PUSH' / 'POP_JUMP' / 'POP' / 'CALL_FS' | |
/ 'CALL' / 'RETURN' / 'EMIT_CUT_VERTEX' / 'EMIT_VERTEX' / 'CUT_VERTEX' | |
/ 'KILL' / 'WAIT_ACK' / 'END_PROGRAM' | |
AluClauseProperties <- ((ADDR / CNT / KCACHE0 / KCACHE1 / USES_WATERFALL / WHOLE_QUAD_MODE / NO_BARRIER) _)* | |
CfInstProperties <- ((ADDR / CNT / POP_CNT / ELEM_SIZE / BURSTCNT / KCACHE0 / KCACHE1 / USES_WATERFALL / WHOLE_QUAD_MODE / NO_BARRIER / VALID_PIX) _)* | |
KCACHE0 <- 'KCACHE0' _ '(' _ 'CB' Number _ ':' _ Number _ '-' _ Number _ ')' | |
KCACHE1 <- 'KCACHE1' _ '(' _ 'CB' Number _ ':' _ Number _ '-' _ Number _ ')' | |
BURSTCNT <- 'BURSTCNT(' <Number> ')' | |
ELEM_SIZE <- 'ELEM_SIZE(' <Number> ')' | |
POP_CNT <- 'POP_CNT(' <Number> ')' | |
ADDR <- 'ADDR(' <Number> ')' | |
CNT <- 'CNT(' <Number> ')' | |
USES_WATERFALL <- 'USES_WATERFALL' | |
WHOLE_QUAD_MODE <- 'WHOLE_QUAD_MODE' / 'WHOLE_QUAD' | |
NO_BARRIER <- 'NO_BARRIER' | |
VALID_PIX <- 'VALID_PIX' | |
ExpSrc <- (SrcGpr / SrcGprRel) FourCompSwizzle? | |
ExpOpcode <- 'EXP_DONE' / 'EXP' | |
ExpPixTarget <- 'PIX' <Number> | |
ExpPosTarget <- 'POS' <Number> | |
ExpParamTarget <- 'PARAM' <Number> | |
TexInst <- _ InstCount _ TexOpcode _ TexDestReg _ ',' _ TexSrcReg _ ',' _ TexResourceId _ ',' _ TexSamplerId _ TexProperties _ | |
TexOpcode <- 'VTX_FETCH' / 'VTX_SEMANTIC' / 'MEM' / 'LD' / 'GET_TEXTURE_INFO' | |
/ 'GET_SAMPLE_INFO' / 'GET_COMP_TEX_LOD' / 'GET_GRADIENTS_H' / 'GET_GRADIENTS_V' | |
/ 'GET_LERP' / 'KEEP_GRADIENTS' / 'SET_GRADIENTS_H' / 'SET_GRADIENTS_V' / 'PASS' | |
/ 'SET_CUBEMAP_INDEX' / 'FETCH4' / 'SAMPLE_C_G_LZ' / 'SAMPLE_C_G_LB' | |
/ 'SAMPLE_C_G_L' / 'SAMPLE_C_G' / 'SAMPLE_C_LZ' / 'SAMPLE_C_LB' / 'SAMPLE_C_L' | |
/ 'SAMPLE_C' / 'SAMPLE_G_LZ' / 'SAMPLE_G_LB' / 'SAMPLE_G_L' / 'SAMPLE_G' | |
/ 'SAMPLE_LZ' / 'SAMPLE_LB' / 'SAMPLE_L' / 'SAMPLE' / 'SET_TEXTURE_OFFSETS' | |
/ 'GATHER4_C_O' / 'GATHER4_O' / 'GATHER4_C' / 'GATHER4' / 'GET_BUFFER_RESINFO' | |
TexDestReg <- VecGpr | |
TexSrcReg <- VecGpr | |
TexResourceId <- 't' <Number> | |
TexSamplerId <- 's' <Number> | |
TexProperties <- ((WHOLE_QUAD_MODE / BC_FRAC_MODE / NORM / XOFFSET / YOFFSET / ZOFFSET / LOD) _)* | |
BC_FRAC_MODE <- 'BC_FRAC_MODE' | |
NORM <- 'NORM(' [xyzwXYZW]+ ')' | |
LOD <- 'LOD(' <Float> ')' | |
XOFFSET <- 'XOFFSET(' <Float> ')' | |
YOFFSET <- 'YOFFSET(' <Float> ')' | |
ZOFFSET <- 'ZOFFSET(' <Float> ')' | |
AluInst <- _ InstCount _ (AluUnit ':' _ (AluScalar3 / AluScalar2 / AluScalar1 / AluScalar0) _)+ _ | |
AluUnit <- [xyzwt] | |
AluScalar0 <- AluOpcode0 AluOutputModifier? _ AluDst _ AluPropertiesOpt | |
AluScalar1 <- AluOpcode1 AluOutputModifier? _ AluDst _ ',' _ AluSrc _ AluPropertiesOpt | |
AluScalar2 <- AluOpcode2 AluOutputModifier? _ AluDst _ ',' _ AluSrc _ ',' _ AluSrc _ AluPropertiesOpt | |
AluScalar3 <- AluOpcode3 _ AluDst _ ',' _ AluSrc _ ',' _ AluSrc _ ',' _ AluSrc _ AluPropertiesOpt | |
AluOpcode0 <- 'NOP' / 'SET_MODE' / 'SET_CF_IDX0' / 'SET_CF_IDX1' | |
AluOpcode1 <- 'FLT64_TO_FLT32' / 'FLT32_TO_FLT64' / 'FREXP_64' / 'FRACT' | |
/ 'TRUNC' / 'CEIL' / 'RNDNE' / 'FLOOR' / 'MOVA_FLOOR' / 'MOVA_INT' / 'MOVA' | |
/ 'MOV' / 'EXP_IEEE' / 'LOG_CLAMPED' / 'LOG_IEEE' | |
/ 'RECIP_CLAMPED' / 'RECIP_IEEE' / 'RECIP_UINT' / 'RECIP_INT' / 'RECIP_FF' | |
/ 'RECIPSQRT_CLAMPED' / 'RECIPSQRT_IEEE' / 'RECIPSQRT_FF' | |
/ 'SQRT_IEEE' / 'FLT_TO_INT' / 'INT_TO_FLT' | |
/ 'UINT_TO_FLT' / 'FLT_TO_UINT' / 'SIN' / 'COS'/ 'FRACT_64' | |
/ 'SQRT_e' / 'EXP_e' / 'LOG_e' / 'RSQ_e' / 'RCP_e' / 'LOG_sat' | |
AluOpcode2 <- 'MULHI_INT24' / 'MULLO_INT' / 'MULHI_INT' / 'MULLO_UINT' | |
/ 'MULHI_UINT' / 'MUL_INT24' / 'MUL_IEEE' / 'MUL_e' / 'MUL_64' / 'MUL' | |
/ 'MAX_DX10' / 'MAX_UINT' / 'MAX_INT' / 'MAX' / 'MIN_DX10' / 'MIN_UINT' | |
/ 'MIN_INT' / 'MIN' / 'SETE' / 'SETGT' / 'SETGE' / 'SETNE' / 'SETE_DX10' | |
/ 'SETGT_DX10' / 'SETGE_DX10' / 'SETNE_DX10' / 'ADD_INT' / 'ADD_64' / 'ADD' | |
/ 'PRED_SETGT_PUSH_INT' / 'PRED_SETGT_PUSH' / 'PRED_SETGT_UINT' | |
/ 'PRED_SETGT_INT' / 'PRED_SETGT_64' / 'PRED_SETGT' / 'PRED_SETGE_PUSH_INT' | |
/ 'PRED_SETGE_PUSH' / 'PRED_SETGE_UINT' / 'PRED_SETGE_INT' / 'PRED_SETGE_64' | |
/ 'PRED_SETGE' / 'PRED_SETE_PUSH_INT' / 'PRED_SETE_INT' / 'PRED_SETE_PUSH' | |
/ 'PRED_SETE_64' / 'PRED_SETE' / 'PRED_SETNE_PUSH_INT' / 'PRED_SETNE_PUSH' | |
/ 'PRED_SETNE_INT' / 'PRED_SETNE' / 'PRED_SETLT_PUSH_INT' | |
/ 'PRED_SETLE_PUSH_INT' / 'PRED_SET_INV' / 'PRED_SET_POP' / 'PRED_SET_CLR' | |
/ 'PRED_SET_RESTORE' / 'KILLE' / 'KILLGT' / 'KILLGE' / 'KILLNE' / 'AND_INT' | |
/ 'OR_INT' / 'XOR_INT' / 'NOT_INT' / 'SUB_INT' / 'SETE_INT' / 'SETGT_INT' | |
/ 'SETGE_INT' / 'SETNE_INT' / 'SETGT_UINT' / 'SETGE_UINT' / 'KILLGT_UINT' | |
/ 'KILLGE_UINT' / 'KILLE_INT' / 'KILLGT_INT' / 'KILLGE_INT' / 'KILLNE_INT' | |
/ 'DOT4_IEEE' / 'DOT4_e' / 'DOT4' / 'CUBE' / 'MAX4' / 'GROUP_BARRIER' | |
/ 'GROUP_SEQ_BEGIN' / 'GROUP_SEQ_END' / 'SET_LDS_SIZE' / 'MOVA_GPR_INT' | |
/ 'ASHR_INT' / 'LSHR_INT' / 'LSHL_INT' / 'LDEXP_64' | |
/ 'PREDGT' | |
AluOpcode3 <- 'BFE_UINT' / 'BFE_INT' / 'BFI_INT' / 'FMA' / 'MULADD_64_D2' | |
/ 'MULADD_64_M4' / 'MULADD_64_M2' / 'MULADD_64' / 'MUL_LIT_D2' / 'MUL_LIT_M4' | |
/ 'MUL_LIT_M2' / 'MUL_LIT' / 'MULADD_IEEE_D2' / 'MULADD_IEEE_M4' | |
/ 'MULADD_IEEE_M2' / 'MULADD_IEEE' / 'MULADD_D2' / 'MULADD_M4' / 'MULADD_M2' | |
/ 'MULADD_e' / 'MULADD' / 'CNDGE_INT' / 'CNDGE' / 'CNDGT_INT' / 'CNDGT' / 'CNDE_INT' / 'CNDE' | |
AluOutputModifier <- '*2' / '*4' / '/2' / '/4' | |
AluDst <- VecGpr / WriteMask | |
AluSrc <- Negate? (AluAbsSrcValue / AluSrcValue) DstRel? OneCompSwizzleOpt? | |
AluAbsSrcValue <- '|' _ AluSrcValue _ '|' | |
AluSrcValue <- VecGpr / ConstantCache / ConstantFile / Literal / PreviousScalar / PreviousVector | |
AluPropertiesOpt <- (AluProperty _)* | |
AluProperty <- BANK_SWIZZLE / UPDATE_EXEC_MASK / UPDATE_PRED / FOG_MERGE / CLAMP | |
UPDATE_PRED <- 'UPDATE_PRED' | |
FOG_MERGE <- 'FOG_MERGE' | |
CLAMP <- 'CLAMP' | |
UPDATE_EXEC_MASK <- 'UPDATE_EXEC_MASK' _ ('(' ('DEACTIVATE' / 'BREAK' / 'CONTINUE' / 'KILL') ')')? | |
BANK_SWIZZLE <- 'SCL_210' / 'SCL_122' / 'SCL_212' / 'SCL_221' / | |
'VEC_012' / 'VEC_021' / 'VEC_120' / 'VEC_102' / 'VEC_201' / 'VEC_210' | |
~_ <- [ \t\r\n]* | |
~__ <- ![a-z0-9_] _ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment