mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-08-04 15:18:45 +00:00
translator: Add V_CMPX_GE_I32
Some checks failed
Build and Release / reuse (push) Has been cancelled
Build and Release / clang-format (push) Has been cancelled
Build and Release / get-info (push) Has been cancelled
Build and Release / windows-sdl (push) Has been cancelled
Build and Release / windows-qt (push) Has been cancelled
Build and Release / macos-sdl (push) Has been cancelled
Build and Release / macos-qt (push) Has been cancelled
Build and Release / linux-sdl (push) Has been cancelled
Build and Release / linux-qt (push) Has been cancelled
Build and Release / pre-release (push) Has been cancelled
Some checks failed
Build and Release / reuse (push) Has been cancelled
Build and Release / clang-format (push) Has been cancelled
Build and Release / get-info (push) Has been cancelled
Build and Release / windows-sdl (push) Has been cancelled
Build and Release / windows-qt (push) Has been cancelled
Build and Release / macos-sdl (push) Has been cancelled
Build and Release / macos-qt (push) Has been cancelled
Build and Release / linux-sdl (push) Has been cancelled
Build and Release / linux-qt (push) Has been cancelled
Build and Release / pre-release (push) Has been cancelled
This commit is contained in:
parent
efa5bcd392
commit
2c7d730a09
3 changed files with 32 additions and 1 deletions
|
@ -270,6 +270,8 @@ void Translator::EmitVectorAlu(const GcnInst& inst) {
|
||||||
return V_CMP_U32(ConditionOp::GT, true, true, inst);
|
return V_CMP_U32(ConditionOp::GT, true, true, inst);
|
||||||
case Opcode::V_CMPX_LG_I32:
|
case Opcode::V_CMPX_LG_I32:
|
||||||
return V_CMP_U32(ConditionOp::LG, true, true, inst);
|
return V_CMP_U32(ConditionOp::LG, true, true, inst);
|
||||||
|
case Opcode::V_CMPX_GE_I32:
|
||||||
|
return V_CMP_U32(ConditionOp::GE, true, true, inst);
|
||||||
|
|
||||||
// V_CMP_{OP8}_U32
|
// V_CMP_{OP8}_U32
|
||||||
case Opcode::V_CMP_F_U32:
|
case Opcode::V_CMP_F_U32:
|
||||||
|
|
|
@ -605,7 +605,7 @@ void PatchImageSampleInstruction(IR::Block& block, IR::Inst& inst, Info& info,
|
||||||
: IR::F32{};
|
: IR::F32{};
|
||||||
const IR::F32 lod_clamp = inst_info.has_lod_clamp ? get_addr_reg(addr_reg++) : IR::F32{};
|
const IR::F32 lod_clamp = inst_info.has_lod_clamp ? get_addr_reg(addr_reg++) : IR::F32{};
|
||||||
|
|
||||||
const auto new_inst = [&] -> IR::Value {
|
auto new_inst = [&] -> IR::Value {
|
||||||
if (inst_info.is_gather) {
|
if (inst_info.is_gather) {
|
||||||
if (inst_info.is_depth) {
|
if (inst_info.is_depth) {
|
||||||
return ir.ImageGatherDref(handle, coords, offset, dref, inst_info);
|
return ir.ImageGatherDref(handle, coords, offset, dref, inst_info);
|
||||||
|
|
|
@ -666,6 +666,35 @@ Liverpool::Task Liverpool::ProcessCompute(std::span<const u32> acb, int vqid) {
|
||||||
};
|
};
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case PM4ItOpcode::DmaData: {
|
||||||
|
const auto* dma_data = reinterpret_cast<const PM4DmaData*>(header);
|
||||||
|
if (dma_data->dst_addr_lo == 0x3022C) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (dma_data->src_sel == DmaDataSrc::Data && dma_data->dst_sel == DmaDataDst::Gds) {
|
||||||
|
rasterizer->InlineData(dma_data->dst_addr_lo, &dma_data->data, sizeof(u32), true);
|
||||||
|
} else if (dma_data->src_sel == DmaDataSrc::Memory &&
|
||||||
|
dma_data->dst_sel == DmaDataDst::Gds) {
|
||||||
|
rasterizer->InlineData(dma_data->dst_addr_lo, dma_data->SrcAddress<const void*>(),
|
||||||
|
dma_data->NumBytes(), true);
|
||||||
|
} else if (dma_data->src_sel == DmaDataSrc::Data &&
|
||||||
|
dma_data->dst_sel == DmaDataDst::Memory) {
|
||||||
|
rasterizer->InlineData(dma_data->DstAddress<VAddr>(), &dma_data->data, sizeof(u32),
|
||||||
|
false);
|
||||||
|
} else if (dma_data->src_sel == DmaDataSrc::Gds &&
|
||||||
|
dma_data->dst_sel == DmaDataDst::Memory) {
|
||||||
|
LOG_WARNING(Render_Vulkan, "GDS memory read");
|
||||||
|
} else if (dma_data->src_sel == DmaDataSrc::Memory &&
|
||||||
|
dma_data->dst_sel == DmaDataDst::Memory) {
|
||||||
|
rasterizer->InlineData(dma_data->DstAddress<VAddr>(),
|
||||||
|
dma_data->SrcAddress<const void*>(), dma_data->NumBytes(),
|
||||||
|
false);
|
||||||
|
} else {
|
||||||
|
UNREACHABLE_MSG("WriteData src_sel = {}, dst_sel = {}",
|
||||||
|
u32(dma_data->src_sel.Value()), u32(dma_data->dst_sel.Value()));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
case PM4ItOpcode::AcquireMem: {
|
case PM4ItOpcode::AcquireMem: {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue