|
|
|
@ -141,7 +141,7 @@ inline void Write(u32 addr, const T data) {
|
|
|
|
|
GSP_GPU::SignalInterrupt(GSP_GPU::InterruptId::PSC1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
VideoCore::g_renderer->hw_rasterizer->NotifyFlush(config.GetStartAddress(), config.GetEndAddress() - config.GetStartAddress());
|
|
|
|
|
VideoCore::g_renderer->hw_rasterizer->InvalidateRegion(config.GetStartAddress(), config.GetEndAddress() - config.GetStartAddress());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Reset "trigger" flag and set the "finish" flag
|
|
|
|
@ -172,7 +172,7 @@ inline void Write(u32 addr, const T data) {
|
|
|
|
|
u32 output_gap = config.texture_copy.output_gap * 16;
|
|
|
|
|
|
|
|
|
|
size_t contiguous_input_size = config.texture_copy.size / input_width * (input_width + input_gap);
|
|
|
|
|
VideoCore::g_renderer->hw_rasterizer->NotifyPreRead(config.GetPhysicalInputAddress(), contiguous_input_size);
|
|
|
|
|
VideoCore::g_renderer->hw_rasterizer->FlushRegion(config.GetPhysicalInputAddress(), contiguous_input_size);
|
|
|
|
|
|
|
|
|
|
u32 remaining_size = config.texture_copy.size;
|
|
|
|
|
u32 remaining_input = input_width;
|
|
|
|
@ -205,7 +205,7 @@ inline void Write(u32 addr, const T data) {
|
|
|
|
|
config.flags);
|
|
|
|
|
|
|
|
|
|
size_t contiguous_output_size = config.texture_copy.size / output_width * (output_width + output_gap);
|
|
|
|
|
VideoCore::g_renderer->hw_rasterizer->NotifyFlush(config.GetPhysicalOutputAddress(), contiguous_output_size);
|
|
|
|
|
VideoCore::g_renderer->hw_rasterizer->InvalidateRegion(config.GetPhysicalOutputAddress(), contiguous_output_size);
|
|
|
|
|
|
|
|
|
|
GSP_GPU::SignalInterrupt(GSP_GPU::InterruptId::PPF);
|
|
|
|
|
break;
|
|
|
|
@ -232,7 +232,7 @@ inline void Write(u32 addr, const T data) {
|
|
|
|
|
u32 input_size = config.input_width * config.input_height * GPU::Regs::BytesPerPixel(config.input_format);
|
|
|
|
|
u32 output_size = output_width * output_height * GPU::Regs::BytesPerPixel(config.output_format);
|
|
|
|
|
|
|
|
|
|
VideoCore::g_renderer->hw_rasterizer->NotifyPreRead(config.GetPhysicalInputAddress(), input_size);
|
|
|
|
|
VideoCore::g_renderer->hw_rasterizer->FlushRegion(config.GetPhysicalInputAddress(), input_size);
|
|
|
|
|
|
|
|
|
|
for (u32 y = 0; y < output_height; ++y) {
|
|
|
|
|
for (u32 x = 0; x < output_width; ++x) {
|
|
|
|
@ -339,7 +339,7 @@ inline void Write(u32 addr, const T data) {
|
|
|
|
|
g_regs.display_transfer_config.trigger = 0;
|
|
|
|
|
GSP_GPU::SignalInterrupt(GSP_GPU::InterruptId::PPF);
|
|
|
|
|
|
|
|
|
|
VideoCore::g_renderer->hw_rasterizer->NotifyFlush(config.GetPhysicalOutputAddress(), output_size);
|
|
|
|
|
VideoCore::g_renderer->hw_rasterizer->InvalidateRegion(config.GetPhysicalOutputAddress(), output_size);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|