mirror of
https://github.com/doitsujin/dxvk.git
synced 2024-12-12 22:08:59 +01:00
47 lines
1.4 KiB
C++
47 lines
1.4 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;
|
||
|
|
||
|
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;
|
||
|
}
|
||
|
|
||
|
void DxsoAnalyzer::finalize(size_t tokenCount) {
|
||
|
m_analysis->bytecodeByteLength = tokenCount * sizeof(uint32_t);
|
||
|
}
|
||
|
|
||
|
}
|