00001 //=================================================================================================// 00002 // filename: RmMFCShaderASMParser.h // 00003 // // 00004 // author: Toshiaki Tsuji // 00005 // ATI Research, Inc. // 00006 // 3D Application Research Group // 00007 // // 00008 // description: ASM Code Parser used by ASM Page // 00009 // // 00010 //=================================================================================================// 00011 // $File: //depot/3darg/Tools/RenderMonkey/sdk/Include/MFCUtilities/RmMFCShaderASMParser.h $ 00012 // $Author: bmistal $ $Revision: #2 $ 00013 //=================================================================================================// 00014 // (C) 2004 ATI Research, Inc. All rights reserved. // 00015 //=================================================================================================// 00016 00017 #ifndef RM_MFC_SHADER_ASM_PARSER_H 00018 #define RM_MFC_SHADER_ASM_PARSER_H 00019 00020 #include "RmMFCShaderSyntaxParser.h" 00021 00022 //..............................................................................................................// 00023 //..............................................................................................................// 00024 //..............................................................................................................// 00025 //..............................................................................................................// 00026 // ASM Parser 00027 //..............................................................................................................// 00028 //..............................................................................................................// 00029 //..............................................................................................................// 00030 //..............................................................................................................// 00031 class RMMFCUTIL_API RmMFCShaderASMParser : public RmMFCShaderSyntaxParser 00032 { 00033 public : 00034 enum OpType 00035 { 00036 OP_ALU, 00037 OP_TEX 00038 }; // End of OpType 00039 00040 struct ShaderOp 00041 { 00042 OpType opType; 00043 RmStringT word; 00044 int instructionCount; 00045 }; // End of 00046 00047 typedef RmLinkedList<ShaderOp*> ShaderOpList; 00048 typedef ShaderOpList::iterator ShaderOpListIterator; 00049 typedef ShaderOpList::const_iterator ShaderOpListConstIterator; 00050 00051 public : 00052 RmMFCShaderASMParser(); 00053 virtual ~RmMFCShaderASMParser(); 00054 00055 // Init InstructionCounts 00056 void InitInstructionCounts(); 00057 00058 // Called by Parser 00059 virtual void OnKeywordFound( Keyword* pKeyword ); 00060 00061 // Op 00062 void InsertOp( OpType opType, const RM_TCHAR *szWord, int instructionCount ); 00063 ShaderOp* FindShaderOp( const RM_TCHAR *szWord ); 00064 00065 // Result Count 00066 int GetALUOpCount() const { return m_ALUOPCount; }; 00067 int GetTexOpCount() const { return m_TexOPCount; }; 00068 00069 // Shader Version 00070 void SetShaderVersion( RmShaderVersion version ); 00071 RmShaderVersion GetShaderVersion() const { return m_shaderVersion; }; 00072 00073 private : 00074 RmShaderVersion m_shaderVersion; 00075 int m_ALUOPCount; 00076 int m_TexOPCount; 00077 ShaderOpList m_shaderOpTable[256]; 00078 00079 void CreateShaderOpTable_VS_1_1(); 00080 void CreateShaderOpTable_VS_2_0(); 00081 void CreateShaderOpTable_VS_3_0(); 00082 void CreateShaderOpTable_PS_1_X(); 00083 void CreateShaderOpTable_PS_2_0(); 00084 void CreateShaderOpTable_PS_3_0(); 00085 void CleanupShaderOpTable(); 00086 }; // End of RmMFCShaderASMParser 00087 00088 #endif 00089
1.3.6