Skip to content

Commit 908ebae

Browse files
Fix installer not booting with the changes.
1 parent efe04e1 commit 908ebae

File tree

1 file changed

+10
-1
lines changed

1 file changed

+10
-1
lines changed

UnleashedRecomp/gpu/video.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,7 @@ static constexpr RenderFormat BACKBUFFER_FORMAT = RenderFormat::B8G8R8A8_UNORM;
320320
static std::unique_ptr<RenderCommandSemaphore> g_acquireSemaphores[NUM_FRAMES];
321321
static std::unique_ptr<RenderCommandSemaphore> g_renderSemaphores[NUM_FRAMES];
322322
static uint32_t g_backBufferIndex;
323+
static std::unique_ptr<GuestSurface> g_backBufferHolder;
323324
static GuestSurface* g_backBuffer;
324325

325326
static std::unique_ptr<RenderTexture> g_intermediaryBackBufferTexture;
@@ -1948,7 +1949,10 @@ bool Video::CreateHostDevice(const char *sdlVideoDriver)
19481949
desc.renderTargetCount = 1;
19491950
g_gammaCorrectionPipeline = g_device->createGraphicsPipeline(desc);
19501951

1951-
g_backBuffer = g_userHeap.AllocPhysical<GuestSurface>(ResourceType::RenderTarget);
1952+
// NOTE: We initially allocate this on host memory to make the installer work, even if the 4 GB memory allocation fails.
1953+
g_backBufferHolder = std::make_unique<GuestSurface>(ResourceType::RenderTarget);
1954+
1955+
g_backBuffer = g_backBufferHolder.get();
19521956
g_backBuffer->width = 1280;
19531957
g_backBuffer->height = 720;
19541958
g_backBuffer->format = BACKBUFFER_FORMAT;
@@ -2006,6 +2010,11 @@ static uint32_t CreateDevice(uint32_t a1, uint32_t a2, uint32_t a3, uint32_t a4,
20062010
LoadTexture((uint8_t *)achievement.pImageBuffer, achievement.ImageBufferSize).release();
20072011
}
20082012

2013+
// Move backbuffer to guest memory.
2014+
assert(!g_memory.IsInMemoryRange(g_backBuffer) && g_backBufferHolder != nullptr);
2015+
g_backBuffer = g_userHeap.AllocPhysical<GuestSurface>(std::move(*g_backBufferHolder));
2016+
g_backBufferHolder = nullptr;
2017+
20092018
auto device = g_userHeap.AllocPhysical<GuestDevice>();
20102019
memset(device, 0, sizeof(*device));
20112020

0 commit comments

Comments
 (0)