mirror of
https://github.com/libretro/RetroArch
synced 2025-03-03 04:14:00 +00:00
(D3D12) Undo commit a79dc19b6cb49cf9480fc066d7932cb99c75a190 - allows us to
set RGUI aspect ratio again and internal upscale - going from upscaling to no upscaling causes a crash though
This commit is contained in:
parent
5ac380ec39
commit
2304faf7f0
@ -188,11 +188,21 @@ static void d3d12_overlay_set_alpha(void* data, unsigned index, float mod)
|
||||
D3D12Unmap(d3d12->overlays.vbo, 0, &range);
|
||||
}
|
||||
|
||||
#define D3D12_GFX_SYNC() \
|
||||
{ \
|
||||
D3D12Fence fence = d3d12->queue.fence; \
|
||||
d3d12->queue.handle->lpVtbl->Signal(d3d12->queue.handle, fence, ++d3d12->queue.fenceValue); \
|
||||
if (fence->lpVtbl->GetCompletedValue(fence) < d3d12->queue.fenceValue) \
|
||||
{ \
|
||||
fence->lpVtbl->SetEventOnCompletion(fence, d3d12->queue.fenceValue, d3d12->queue.fenceEvent); \
|
||||
WaitForSingleObject(d3d12->queue.fenceEvent, INFINITE); \
|
||||
} \
|
||||
}
|
||||
|
||||
static bool d3d12_overlay_load(void* data, const void* image_data, unsigned num_images)
|
||||
{
|
||||
size_t i;
|
||||
D3D12_RANGE range;
|
||||
D3D12Fence fence;
|
||||
d3d12_sprite_t* sprites = NULL;
|
||||
d3d12_video_t* d3d12 = (d3d12_video_t*)data;
|
||||
const struct texture_image* images = (const struct texture_image*)image_data;
|
||||
@ -200,14 +210,8 @@ static bool d3d12_overlay_load(void* data, const void* image_data, unsigned num_
|
||||
if (!d3d12)
|
||||
return false;
|
||||
|
||||
fence = d3d12->queue.fence;
|
||||
D3D12_GFX_SYNC();
|
||||
|
||||
if (fence->lpVtbl->GetCompletedValue(fence) < d3d12->queue.fenceValue)
|
||||
{
|
||||
fence->lpVtbl->SetEventOnCompletion(
|
||||
fence, d3d12->queue.fenceValue, d3d12->queue.fenceEvent);
|
||||
WaitForSingleObject(d3d12->queue.fenceEvent, INFINITE);
|
||||
}
|
||||
d3d12_free_overlays(d3d12);
|
||||
d3d12->overlays.count = num_images;
|
||||
d3d12->overlays.textures = (d3d12_texture_t*)calloc(num_images, sizeof(d3d12_texture_t));
|
||||
@ -460,21 +464,13 @@ static void d3d12_gfx_set_rotation(void* data, unsigned rotation)
|
||||
0.0f, 0.0f, 0.0f, 0.0f ,
|
||||
0.0f, 0.0f, 0.0f, 1.0f }
|
||||
};
|
||||
D3D12Fence fence;
|
||||
D3D12_RANGE read_range;
|
||||
d3d12_video_t* d3d12 = (d3d12_video_t*)data;
|
||||
|
||||
if (!d3d12)
|
||||
return;
|
||||
|
||||
fence = d3d12->queue.fence;
|
||||
|
||||
if (fence->lpVtbl->GetCompletedValue(fence) < d3d12->queue.fenceValue)
|
||||
{
|
||||
fence->lpVtbl->SetEventOnCompletion(
|
||||
fence, d3d12->queue.fenceValue, d3d12->queue.fenceEvent);
|
||||
WaitForSingleObject(d3d12->queue.fenceEvent, INFINITE);
|
||||
}
|
||||
D3D12_GFX_SYNC();
|
||||
d3d12->frame.rotation = rotation;
|
||||
|
||||
radians = d3d12->frame.rotation * (M_PI / 2.0f);
|
||||
@ -630,21 +626,13 @@ static bool d3d12_gfx_set_shader(void* data, enum rarch_shader_type type, const
|
||||
{
|
||||
#if defined(HAVE_SLANG) && defined(HAVE_SPIRV_CROSS)
|
||||
size_t i;
|
||||
D3D12Fence fence;
|
||||
d3d12_texture_t* source = NULL;
|
||||
d3d12_video_t* d3d12 = (d3d12_video_t*)data;
|
||||
|
||||
if (!d3d12)
|
||||
return false;
|
||||
|
||||
fence = d3d12->queue.fence;
|
||||
|
||||
if (fence->lpVtbl->GetCompletedValue(fence) < d3d12->queue.fenceValue)
|
||||
{
|
||||
fence->lpVtbl->SetEventOnCompletion(
|
||||
fence, d3d12->queue.fenceValue, d3d12->queue.fenceEvent);
|
||||
WaitForSingleObject(d3d12->queue.fenceEvent, INFINITE);
|
||||
}
|
||||
D3D12_GFX_SYNC();
|
||||
d3d12_free_shader_preset(d3d12);
|
||||
|
||||
if (string_is_empty(path))
|
||||
@ -1151,21 +1139,13 @@ error:
|
||||
|
||||
static void d3d12_gfx_free(void* data)
|
||||
{
|
||||
D3D12Fence fence;
|
||||
unsigned i;
|
||||
d3d12_video_t* d3d12 = (d3d12_video_t*)data;
|
||||
|
||||
if (!d3d12)
|
||||
return;
|
||||
|
||||
fence = d3d12->queue.fence;
|
||||
|
||||
if (fence->lpVtbl->GetCompletedValue(fence) < d3d12->queue.fenceValue)
|
||||
{
|
||||
fence->lpVtbl->SetEventOnCompletion(
|
||||
fence, d3d12->queue.fenceValue, d3d12->queue.fenceEvent);
|
||||
WaitForSingleObject(d3d12->queue.fenceEvent, INFINITE);
|
||||
}
|
||||
D3D12_GFX_SYNC();
|
||||
|
||||
if (d3d12->flags & D3D12_ST_FLAG_WAITABLE_SWAPCHAINS)
|
||||
CloseHandle(d3d12->chain.frameLatencyWaitableObject);
|
||||
@ -2210,7 +2190,6 @@ static bool d3d12_gfx_frame(
|
||||
bool use_back_buffer = back_buffer_format != d3d12->chain.formats[d3d12->chain.bit_depth];
|
||||
#endif
|
||||
D3D12GraphicsCommandList cmd = d3d12->queue.cmd;
|
||||
D3D12Fence fence = d3d12->queue.fence;
|
||||
|
||||
if (d3d12->flags & D3D12_ST_FLAG_WAITABLE_SWAPCHAINS)
|
||||
WaitForSingleObjectEx(
|
||||
@ -2218,12 +2197,7 @@ static bool d3d12_gfx_frame(
|
||||
1000,
|
||||
true);
|
||||
|
||||
if (fence->lpVtbl->GetCompletedValue(fence) < d3d12->queue.fenceValue)
|
||||
{
|
||||
fence->lpVtbl->SetEventOnCompletion(
|
||||
fence, d3d12->queue.fenceValue, d3d12->queue.fenceEvent);
|
||||
WaitForSingleObject(d3d12->queue.fenceEvent, INFINITE);
|
||||
}
|
||||
D3D12_GFX_SYNC();
|
||||
|
||||
#ifdef HAVE_DXGI_HDR
|
||||
d3d12_hdr_enable = d3d12->flags & D3D12_ST_FLAG_HDR_ENABLE;
|
||||
@ -2898,8 +2872,6 @@ static bool d3d12_gfx_frame(
|
||||
cmd->lpVtbl->Close(cmd);
|
||||
d3d12->queue.handle->lpVtbl->ExecuteCommandLists(d3d12->queue.handle, 1,
|
||||
(ID3D12CommandList* const*)&d3d12->queue.cmd);
|
||||
d3d12->queue.handle->lpVtbl->Signal(d3d12->queue.handle, fence,
|
||||
++d3d12->queue.fenceValue);
|
||||
DXGIPresent(d3d12->chain.handle, d3d12->chain.swap_interval, present_flags);
|
||||
|
||||
if (vsync && wait_for_vblank)
|
||||
@ -3129,14 +3101,7 @@ static void d3d12_gfx_unload_texture(void* data,
|
||||
|
||||
if (d3d12)
|
||||
{
|
||||
D3D12Fence fence = d3d12->queue.fence;
|
||||
|
||||
if (fence->lpVtbl->GetCompletedValue(fence) < d3d12->queue.fenceValue)
|
||||
{
|
||||
fence->lpVtbl->SetEventOnCompletion(
|
||||
fence, d3d12->queue.fenceValue, d3d12->queue.fenceEvent);
|
||||
WaitForSingleObject(d3d12->queue.fenceEvent, INFINITE);
|
||||
}
|
||||
D3D12_GFX_SYNC();
|
||||
}
|
||||
|
||||
d3d12_release_texture(texture);
|
||||
|
Loading…
x
Reference in New Issue
Block a user