|
|
|
@ -30,9 +30,9 @@ struct TextureInst { |
|
|
|
|
|
|
|
using TextureInstVector = boost::container::small_vector<TextureInst, 24>; |
|
|
|
|
|
|
|
constexpr u32 DESCRIPTOR_SIZE = 8; |
|
|
|
constexpr u32 DESCRIPTOR_SIZE_SHIFT = static_cast<u32>(std::countr_zero(DESCRIPTOR_SIZE)); |
|
|
|
constexpr u32 BINDLESS_ARRAY_LENGTH = 1024; |
|
|
|
// TODO: We need to implement scatter/gather CBuf stuff
|
|
|
|
constexpr u32 DESCRIPTOR_SIZE = 1024; |
|
|
|
constexpr u32 DESCRIPTOR_SIZE_SHIFT = u32(std::countr_zero(u32(8))); |
|
|
|
|
|
|
|
IR::Opcode IndexedInstruction(const IR::Inst& inst) { |
|
|
|
switch (inst.GetOpcode()) { |
|
|
|
@ -363,7 +363,7 @@ std::optional<ConstBufferAddr> TryGetConstBuffer(const IR::Inst* inst, Environme |
|
|
|
.secondary_offset = 0, |
|
|
|
.secondary_shift_left = 0, |
|
|
|
.dynamic_offset = dynamic_offset, |
|
|
|
.count = BINDLESS_ARRAY_LENGTH, |
|
|
|
.count = DESCRIPTOR_SIZE, |
|
|
|
.has_secondary = false, |
|
|
|
}; |
|
|
|
} |
|
|
|
@ -717,7 +717,7 @@ void TexturePass(Environment& env, IR::Program& program, const HostTranslateInfo |
|
|
|
const auto insert_point{IR::Block::InstructionList::s_iterator_to(*inst)}; |
|
|
|
IR::IREmitter ir{*texture_inst.block, insert_point}; |
|
|
|
const IR::U32 shift{ir.Imm32(DESCRIPTOR_SIZE_SHIFT)}; |
|
|
|
inst->SetArg(0, ir.UMin(ir.ShiftRightLogical(cbuf.dynamic_offset, shift), ir.Imm32(BINDLESS_ARRAY_LENGTH - 1))); |
|
|
|
inst->SetArg(0, ir.UMin(ir.ShiftRightLogical(cbuf.dynamic_offset, shift), ir.Imm32(DESCRIPTOR_SIZE - 1))); |
|
|
|
} else { |
|
|
|
inst->SetArg(0, IR::Value{}); |
|
|
|
} |
|
|
|
|