Files
mitch030504--Wiicompiled_VR…/aurora-main/lib/gfx/efb_ram_copy.hpp
T

30 lines
1.2 KiB
C++

#pragma once
#include "common.hpp"
#include "texture.hpp"
#include <dolphin/gx/GXEnum.h>
namespace aurora::gfx::efb_ram {
void schedule(void* dest, uint32_t width, uint32_t height, GXTexFmt format, TextureHandle texture) noexcept;
bool has_pending(void* dest = nullptr) noexcept;
bool prepare_downloads(void* dest = nullptr) noexcept;
void encode_downloads(const wgpu::CommandEncoder& encoder, void* dest = nullptr) noexcept;
bool complete_downloads() noexcept;
void cancel() noexcept;
// Frame-latent readbacks for probe-sized CPU-consumed copies: they ride the frame's own encode and
// retain completed pixels in host memory. The producer publishes a compatible
// result only when schedule() is called again for that destination, while the
// game still owns it as a copy buffer. Per frame, from the worker: seal, encode,
// then after_submit. GPU callbacks must never write to guest RAM.
void seal_async_downloads() noexcept;
void encode_async_downloads(const wgpu::CommandEncoder& encoder) noexcept;
void after_submit() noexcept;
// Drops requests sealed for a frame that will never be encoded.
void abort_async() noexcept;
void shutdown() noexcept;
} // namespace aurora::gfx::efb_ram