Files
AnyPS5/core/libs/prx/libSceAgcDriver/tests/BdaTests.hpp
T
Celegans12 4709920641 fix(agc): throw instead of aborting when a heap mirror cannot be made
An address-based build whose heap mirror the device refused, or one past
APS5_HEAP_MIRROR_MIB, stopped the process inside acquireMirror. PPSA26344
hit it at 478 s with 6.8 GiB of heap mirrors beside the host imports.

- a mirror that would go past the budget first sweeps the mirrors whose
  registered range is gone, before its allocation; if it still does not
  fit, the build throws "past the budget"
- the mirror is allocated once: a refusal throws with the range, the
  Vulkan result and the mirror totals, so the draw or dispatch fails like
  any other allocation; nothing is registered for the refused range
- the BDA resource tests run with a 4 MiB mirror budget and a mock memory
  limit: a mirror past the budget is made in the swept mirror's memory,
  and a refused one fails after a single allocation attempt
2026-10-09 14:58:20 +02:00

25 lines
844 B
C++

#ifndef CORE_LIBS_PRX_LIBSCEAGCDRIVER_TESTS_BDATESTS_HPP
#define CORE_LIBS_PRX_LIBSCEAGCDRIVER_TESTS_BDATESTS_HPP
#include "prx/libSceAgcDriver/Graphics/include/Context.hpp"
#include <functional>
#include <optional>
#include <span>
struct BdaTestAccess {
std::function<std::span<std::byte>(VkBuffer)> bytes;
std::function<VkDescriptorBufferInfo(std::uint32_t)> descriptor;
std::function<std::span<std::byte>(VkDeviceAddress)> addressBytes;
std::function<void(std::optional<VkDeviceSize>)> limitMemory;
std::function<std::uint64_t()> allocationAttempts;
};
void RunBdaResourceTests(const AgcDriver::Graphics::Context& context, const BdaTestAccess& access);
void RunGuestAllocationTests();
void RunGuestLeaseWaitTests();
void RunUnmappedGapTests();
void RunColorTargetLayoutTests();
void RunLiveStackAccessTests();
#endif