|
|
|
@ -54,6 +54,27 @@ Node ShaderIR::GetImmediate32(Instruction instr) { |
|
|
|
return Immediate(instr.alu.GetImm20_32()); |
|
|
|
} |
|
|
|
|
|
|
|
Node ShaderIR::GetConstBuffer(u64 index_, u64 offset_) { |
|
|
|
const auto index = static_cast<u32>(index_); |
|
|
|
const auto offset = static_cast<u32>(offset_); |
|
|
|
|
|
|
|
const auto [entry, is_new] = used_cbufs.try_emplace(index); |
|
|
|
entry->second.MarkAsUsed(offset); |
|
|
|
|
|
|
|
return StoreNode(CbufNode(index, Immediate(offset))); |
|
|
|
} |
|
|
|
|
|
|
|
Node ShaderIR::GetConstBufferIndirect(u64 index_, u64 offset_, Node node) { |
|
|
|
const auto index = static_cast<u32>(index_); |
|
|
|
const auto offset = static_cast<u32>(offset_); |
|
|
|
|
|
|
|
const auto [entry, is_new] = used_cbufs.try_emplace(index); |
|
|
|
entry->second.MarkAsUsedIndirect(); |
|
|
|
|
|
|
|
const Node final_offset = Operation(OperationCode::UAdd, NO_PRECISE, node, Immediate(offset)); |
|
|
|
return StoreNode(CbufNode(index, final_offset)); |
|
|
|
} |
|
|
|
|
|
|
|
Node ShaderIR::GetPredicate(u64 pred_, bool negated) { |
|
|
|
const auto pred = static_cast<Pred>(pred_); |
|
|
|
if (pred != Pred::UnusedIndex && pred != Pred::NeverExecute) { |
|
|
|
|