mirror of
https://github.com/hedge-dev/UnleashedRecomp.git
synced 2025-12-19 14:32:19 +00:00
Fix validation errors in Agility SDK 1.616.1.
This commit is contained in:
parent
ada0db62dc
commit
9ed7a53b4c
2 changed files with 47 additions and 1 deletions
|
|
@ -1566,6 +1566,10 @@ namespace plume {
|
||||||
auto makeBarrier = [&](ID3D12Resource *resource, D3D12_RESOURCE_STATES stateBefore, D3D12_RESOURCE_STATES stateAfter, bool supportsUAV, D3D12_RESOURCE_BARRIER &resourceBarrier) {
|
auto makeBarrier = [&](ID3D12Resource *resource, D3D12_RESOURCE_STATES stateBefore, D3D12_RESOURCE_STATES stateAfter, bool supportsUAV, D3D12_RESOURCE_BARRIER &resourceBarrier) {
|
||||||
resourceBarrier = {};
|
resourceBarrier = {};
|
||||||
|
|
||||||
|
if (type == RenderCommandListType::COPY) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (stateBefore != stateAfter) {
|
if (stateBefore != stateAfter) {
|
||||||
resourceBarrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
|
resourceBarrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
|
||||||
resourceBarrier.Transition.StateBefore = stateBefore;
|
resourceBarrier.Transition.StateBefore = stateBefore;
|
||||||
|
|
@ -2228,11 +2232,13 @@ namespace plume {
|
||||||
|
|
||||||
this->device = device;
|
this->device = device;
|
||||||
|
|
||||||
HRESULT res = device->d3d->CreateFence(0, D3D12_FENCE_FLAG_NONE, IID_PPV_ARGS(&d3d));
|
HRESULT res = device->d3d->CreateFence(1, D3D12_FENCE_FLAG_NONE, IID_PPV_ARGS(&d3d));
|
||||||
if (FAILED(res)) {
|
if (FAILED(res)) {
|
||||||
fprintf(stderr, "CreateFence failed with error code 0x%lX.\n", res);
|
fprintf(stderr, "CreateFence failed with error code 0x%lX.\n", res);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
semaphoreValue = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
D3D12CommandSemaphore::~D3D12CommandSemaphore() {
|
D3D12CommandSemaphore::~D3D12CommandSemaphore() {
|
||||||
|
|
|
||||||
|
|
@ -315,6 +315,10 @@ static std::unique_ptr<RenderCommandQueue> g_copyQueue;
|
||||||
static std::unique_ptr<RenderCommandList> g_copyCommandList;
|
static std::unique_ptr<RenderCommandList> g_copyCommandList;
|
||||||
static std::unique_ptr<RenderCommandFence> g_copyCommandFence;
|
static std::unique_ptr<RenderCommandFence> g_copyCommandFence;
|
||||||
|
|
||||||
|
static Mutex g_discardMutex;
|
||||||
|
static std::unique_ptr<RenderCommandList> g_discardCommandList;
|
||||||
|
static std::unique_ptr<RenderCommandFence> g_discardCommandFence;
|
||||||
|
|
||||||
static std::unique_ptr<RenderSwapChain> g_swapChain;
|
static std::unique_ptr<RenderSwapChain> g_swapChain;
|
||||||
static bool g_swapChainValid;
|
static bool g_swapChainValid;
|
||||||
|
|
||||||
|
|
@ -1849,6 +1853,12 @@ bool Video::CreateHostDevice(const char *sdlVideoDriver, bool graphicsApiRetry)
|
||||||
g_copyCommandList = g_device->createCommandList(RenderCommandListType::COPY);
|
g_copyCommandList = g_device->createCommandList(RenderCommandListType::COPY);
|
||||||
g_copyCommandFence = g_device->createCommandFence();
|
g_copyCommandFence = g_device->createCommandFence();
|
||||||
|
|
||||||
|
if (!g_vulkan)
|
||||||
|
{
|
||||||
|
g_discardCommandList = g_device->createCommandList(RenderCommandListType::DIRECT);
|
||||||
|
g_discardCommandFence = g_device->createCommandFence();
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t bufferCount = 2;
|
uint32_t bufferCount = 2;
|
||||||
|
|
||||||
switch (Config::TripleBuffering)
|
switch (Config::TripleBuffering)
|
||||||
|
|
@ -3093,6 +3103,27 @@ static RenderFormat ConvertFormat(uint32_t format)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void DiscardTexture(GuestBaseTexture* texture, RenderTextureLayout layout)
|
||||||
|
{
|
||||||
|
if (!g_vulkan)
|
||||||
|
{
|
||||||
|
std::lock_guard lock(g_discardMutex);
|
||||||
|
|
||||||
|
g_discardCommandList->begin();
|
||||||
|
if (texture->layout != layout)
|
||||||
|
{
|
||||||
|
g_discardCommandList->barriers(RenderBarrierStage::GRAPHICS, RenderTextureBarrier(texture->texture, layout));
|
||||||
|
texture->layout = layout;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_discardCommandList->discardTexture(texture->texture);
|
||||||
|
g_discardCommandList->end();
|
||||||
|
|
||||||
|
g_queue->executeCommandLists(g_discardCommandList.get(), g_discardCommandFence.get());
|
||||||
|
g_queue->waitForCommandFence(g_discardCommandFence.get());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static GuestTexture* CreateTexture(uint32_t width, uint32_t height, uint32_t depth, uint32_t levels, uint32_t usage, uint32_t format, uint32_t pool, uint32_t type)
|
static GuestTexture* CreateTexture(uint32_t width, uint32_t height, uint32_t depth, uint32_t levels, uint32_t usage, uint32_t format, uint32_t pool, uint32_t type)
|
||||||
{
|
{
|
||||||
const auto texture = g_userHeap.AllocPhysical<GuestTexture>(type == 17 ? ResourceType::VolumeTexture : ResourceType::Texture);
|
const auto texture = g_userHeap.AllocPhysical<GuestTexture>(type == 17 ? ResourceType::VolumeTexture : ResourceType::Texture);
|
||||||
|
|
@ -3150,6 +3181,12 @@ static GuestTexture* CreateTexture(uint32_t width, uint32_t height, uint32_t dep
|
||||||
texture->texture->setName(fmt::format("Texture {:X}", g_memory.MapVirtual(texture)));
|
texture->texture->setName(fmt::format("Texture {:X}", g_memory.MapVirtual(texture)));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (desc.flags != RenderTextureFlag::NONE)
|
||||||
|
{
|
||||||
|
DiscardTexture(texture, desc.flags == RenderTextureFlag::RENDER_TARGET ?
|
||||||
|
RenderTextureLayout::COLOR_WRITE : RenderTextureLayout::DEPTH_WRITE);
|
||||||
|
}
|
||||||
|
|
||||||
return texture;
|
return texture;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -3218,6 +3255,9 @@ static GuestSurface* CreateSurface(uint32_t width, uint32_t height, uint32_t for
|
||||||
surface->texture->setName(fmt::format("{} {:X}", desc.flags & RenderTextureFlag::RENDER_TARGET ? "Render Target" : "Depth Stencil", g_memory.MapVirtual(surface)));
|
surface->texture->setName(fmt::format("{} {:X}", desc.flags & RenderTextureFlag::RENDER_TARGET ? "Render Target" : "Depth Stencil", g_memory.MapVirtual(surface)));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
DiscardTexture(surface, desc.flags == RenderTextureFlag::RENDER_TARGET ?
|
||||||
|
RenderTextureLayout::COLOR_WRITE : RenderTextureLayout::DEPTH_WRITE);
|
||||||
|
|
||||||
return surface;
|
return surface;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue