1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2024-12-12 13:08:50 +01:00
dxvk/src/dxso/dxso_analysis.cpp
Joshua Ashton e0b83b13b5 [dxso] Only track co-issue parent opcode rather than the full context
Tracking the full instruction ctx is slow and unnecessary
2019-12-25 18:00:46 +00:00

57 lines
1.7 KiB
C++

#include "dxso_analysis.h"
namespace dxvk {
DxsoAnalyzer::DxsoAnalyzer(
DxsoAnalysisInfo& analysis)
: m_analysis(&analysis) { }
void DxsoAnalyzer::processInstruction(
const DxsoInstructionContext& ctx) {
DxsoOpcode opcode = ctx.instruction.opcode;
// Co-issued CNDs are issued before their parents,
// except when the parent is a CND.
if (opcode == DxsoOpcode::Cnd &&
m_parentOpcode != DxsoOpcode::Cnd &&
ctx.instruction.coissue) {
m_analysis->coissues.push_back(ctx);
}
if (opcode == DxsoOpcode::TexKill)
m_analysis->usesKill = true;
if (opcode == DxsoOpcode::DsX
|| opcode == DxsoOpcode::DsY
|| opcode == DxsoOpcode::Tex
|| opcode == DxsoOpcode::TexCoord
|| opcode == DxsoOpcode::TexBem
|| opcode == DxsoOpcode::TexBemL
|| opcode == DxsoOpcode::TexReg2Ar
|| opcode == DxsoOpcode::TexReg2Gb
|| opcode == DxsoOpcode::TexM3x2Pad
|| opcode == DxsoOpcode::TexM3x2Tex
|| opcode == DxsoOpcode::TexM3x3Pad
|| opcode == DxsoOpcode::TexM3x3Tex
|| opcode == DxsoOpcode::TexM3x3Spec
|| opcode == DxsoOpcode::TexM3x3VSpec
|| opcode == DxsoOpcode::TexReg2Rgb
|| opcode == DxsoOpcode::TexDp3Tex
|| opcode == DxsoOpcode::TexM3x2Depth
|| opcode == DxsoOpcode::TexDp3
|| opcode == DxsoOpcode::TexM3x3
// Explicit LOD.
//|| opcode == DxsoOpcode::TexLdd
//|| opcode == DxsoOpcode::TexLdl
|| opcode == DxsoOpcode::TexDepth)
m_analysis->usesDerivatives = true;
m_parentOpcode = ctx.instruction.opcode;
}
void DxsoAnalyzer::finalize(size_t tokenCount) {
m_analysis->bytecodeByteLength = tokenCount * sizeof(uint32_t);
}
}