Implement DmaDataSrc::MemoryUsingL2 and DmaDataDst::MemoryUsingL2

This commit is contained in:
kalaposfos13 2025-03-24 13:45:15 +01:00
parent 16a68d78eb
commit 784e055a81
2 changed files with 12 additions and 5 deletions

View File

@ -602,20 +602,25 @@ Liverpool::Task Liverpool::ProcessGraphics(std::span<const u32> dcb, std::span<c
if (dma_data->src_sel == DmaDataSrc::Data && dma_data->dst_sel == DmaDataDst::Gds) { 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), rasterizer->InlineData(dma_data->dst_addr_lo, &dma_data->data, sizeof(u32),
true); true);
} else if (dma_data->src_sel == DmaDataSrc::Memory && } else if ((dma_data->src_sel == DmaDataSrc::Memory ||
dma_data->src_sel == DmaDataSrc::MemoryUsingL2) &&
dma_data->dst_sel == DmaDataDst::Gds) { dma_data->dst_sel == DmaDataDst::Gds) {
rasterizer->InlineData(dma_data->dst_addr_lo, rasterizer->InlineData(dma_data->dst_addr_lo,
dma_data->SrcAddress<const void*>(), dma_data->SrcAddress<const void*>(),
dma_data->NumBytes(), true); dma_data->NumBytes(), true);
} else if (dma_data->src_sel == DmaDataSrc::Data && } else if (dma_data->src_sel == DmaDataSrc::Data &&
dma_data->dst_sel == DmaDataDst::Memory) { (dma_data->dst_sel == DmaDataDst::Memory ||
dma_data->dst_sel == DmaDataDst::MemoryUsingL2)) {
rasterizer->InlineData(dma_data->DstAddress<VAddr>(), &dma_data->data, rasterizer->InlineData(dma_data->DstAddress<VAddr>(), &dma_data->data,
sizeof(u32), false); sizeof(u32), false);
} else if (dma_data->src_sel == DmaDataSrc::Gds && } else if (dma_data->src_sel == DmaDataSrc::Gds &&
dma_data->dst_sel == DmaDataDst::Memory) { (dma_data->dst_sel == DmaDataDst::Memory ||
dma_data->dst_sel == DmaDataDst::MemoryUsingL2)) {
// LOG_WARNING(Render_Vulkan, "GDS memory read"); // LOG_WARNING(Render_Vulkan, "GDS memory read");
} else if (dma_data->src_sel == DmaDataSrc::Memory && } else if ((dma_data->src_sel == DmaDataSrc::Memory ||
dma_data->dst_sel == DmaDataDst::Memory) { dma_data->src_sel == DmaDataSrc::MemoryUsingL2) &&
(dma_data->dst_sel == DmaDataDst::Memory ||
dma_data->dst_sel == DmaDataDst::MemoryUsingL2)) {
rasterizer->InlineData(dma_data->DstAddress<VAddr>(), rasterizer->InlineData(dma_data->DstAddress<VAddr>(),
dma_data->SrcAddress<const void*>(), dma_data->SrcAddress<const void*>(),
dma_data->NumBytes(), false); dma_data->NumBytes(), false);

View File

@ -377,12 +377,14 @@ struct PM4CmdAcquireMem {
enum class DmaDataDst : u32 { enum class DmaDataDst : u32 {
Memory = 0, Memory = 0,
Gds = 1, Gds = 1,
MemoryUsingL2 = 3,
}; };
enum class DmaDataSrc : u32 { enum class DmaDataSrc : u32 {
Memory = 0, Memory = 0,
Gds = 1, Gds = 1,
Data = 2, Data = 2,
MemoryUsingL2 = 3,
}; };
struct PM4DmaData { struct PM4DmaData {