mirror of
https://git.h3cjp.net/H3cJP/citra.git
synced 2024-11-30 16:03:05 +00:00
Merge pull request #10867 from Kelebek1/dma_safe
Use safe reads in DMA engine
This commit is contained in:
commit
2b3bfafb9e
|
@ -130,7 +130,7 @@ void MaxwellDMA::Launch() {
|
||||||
UNIMPLEMENTED_IF(regs.offset_out % 16 != 0);
|
UNIMPLEMENTED_IF(regs.offset_out % 16 != 0);
|
||||||
read_buffer.resize_destructive(16);
|
read_buffer.resize_destructive(16);
|
||||||
for (u32 offset = 0; offset < regs.line_length_in; offset += 16) {
|
for (u32 offset = 0; offset < regs.line_length_in; offset += 16) {
|
||||||
memory_manager.ReadBlockUnsafe(
|
memory_manager.ReadBlock(
|
||||||
convert_linear_2_blocklinear_addr(regs.offset_in + offset),
|
convert_linear_2_blocklinear_addr(regs.offset_in + offset),
|
||||||
read_buffer.data(), read_buffer.size());
|
read_buffer.data(), read_buffer.size());
|
||||||
memory_manager.WriteBlockCached(regs.offset_out + offset, read_buffer.data(),
|
memory_manager.WriteBlockCached(regs.offset_out + offset, read_buffer.data(),
|
||||||
|
@ -142,8 +142,8 @@ void MaxwellDMA::Launch() {
|
||||||
UNIMPLEMENTED_IF(regs.offset_out % 16 != 0);
|
UNIMPLEMENTED_IF(regs.offset_out % 16 != 0);
|
||||||
read_buffer.resize_destructive(16);
|
read_buffer.resize_destructive(16);
|
||||||
for (u32 offset = 0; offset < regs.line_length_in; offset += 16) {
|
for (u32 offset = 0; offset < regs.line_length_in; offset += 16) {
|
||||||
memory_manager.ReadBlockUnsafe(regs.offset_in + offset, read_buffer.data(),
|
memory_manager.ReadBlock(regs.offset_in + offset, read_buffer.data(),
|
||||||
read_buffer.size());
|
read_buffer.size());
|
||||||
memory_manager.WriteBlockCached(
|
memory_manager.WriteBlockCached(
|
||||||
convert_linear_2_blocklinear_addr(regs.offset_out + offset),
|
convert_linear_2_blocklinear_addr(regs.offset_out + offset),
|
||||||
read_buffer.data(), read_buffer.size());
|
read_buffer.data(), read_buffer.size());
|
||||||
|
@ -151,8 +151,9 @@ void MaxwellDMA::Launch() {
|
||||||
} else {
|
} else {
|
||||||
if (!accelerate.BufferCopy(regs.offset_in, regs.offset_out, regs.line_length_in)) {
|
if (!accelerate.BufferCopy(regs.offset_in, regs.offset_out, regs.line_length_in)) {
|
||||||
read_buffer.resize_destructive(regs.line_length_in);
|
read_buffer.resize_destructive(regs.line_length_in);
|
||||||
memory_manager.ReadBlockUnsafe(regs.offset_in, read_buffer.data(),
|
memory_manager.ReadBlock(regs.offset_in, read_buffer.data(),
|
||||||
regs.line_length_in);
|
regs.line_length_in,
|
||||||
|
VideoCommon::CacheType::NoBufferCache);
|
||||||
memory_manager.WriteBlockCached(regs.offset_out, read_buffer.data(),
|
memory_manager.WriteBlockCached(regs.offset_out, read_buffer.data(),
|
||||||
regs.line_length_in);
|
regs.line_length_in);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue