void Parse(Builder& target) { ParseSignature(); ParseRegisters(target); ParseTextSection(target); ParseStackSection(target); ParseRegion(target); }
HRESULT Vc4Disasm::Run(const VC4_QPU_INSTRUCTION* pShader, ULONG ShaderSize, TCHAR *pTitle) { if (pTitle) this->xprintf(TEXT("---------- %s ----------\n"), pTitle); ULONG cInstruction = ShaderSize / sizeof(VC4_QPU_INSTRUCTION); for (ULONG i = 0; i < cInstruction; i++) { VC4_QPU_INSTRUCTION Instruction = pShader[i]; ParseSignature(Instruction); switch (VC4_QPU_GET_SIG(Instruction)) { case VC4_QPU_SIG_BREAK: case VC4_QPU_SIG_NO_SIGNAL: case VC4_QPU_SIG_THREAD_SWITCH: case VC4_QPU_SIG_PROGRAM_END: case VC4_QPU_SIG_WAIT_FOR_SCOREBOARD: case VC4_QPU_SIG_SCOREBOARD_UNBLOCK: case VC4_QPU_SIG_LAST_THREAD_SWITCH: case VC4_QPU_SIG_COVERAGE_LOAD: case VC4_QPU_SIG_COLOR_LOAD: case VC4_QPU_SIG_COLOR_LOAD_AND_PROGRAM_END: case VC4_QPU_SIG_LOAD_TMU0: case VC4_QPU_SIG_LOAD_TMU1: case VC4_QPU_SIG_ALPAH_MASK_LOAD: case VC4_QPU_SIG_ALU_WITH_RADDR_B: ParseALUInstruction(Instruction); break; case VC4_QPU_SIG_LOAD_IMMEDIATE: if (VC4_QPU_IS_OPCODE_SEMAPHORE(Instruction)) { ParseSemaphoreInstruction(Instruction); } else { ParseLoadImmInstruction(Instruction); } break; case VC4_QPU_SIG_BRANCH: ParseBranchInstruction(Instruction); break; default: this->xprintf(TEXT("Invalid signature")); break; } ParseFlags(Instruction); Flush(0); } return S_OK; }