graphics-hook: Track DXGI status with counter
Previous approach could mark Present exit too early.
This commit is contained in:
parent
dfb9bb74f7
commit
4c7c1854bd
@ -45,7 +45,7 @@ struct d3d12_data {
|
||||
|
||||
static struct d3d12_data data = {};
|
||||
|
||||
extern thread_local bool dxgi_presenting;
|
||||
extern thread_local int dxgi_presenting;
|
||||
extern ID3D12CommandQueue *dxgi_possible_swap_queues[8];
|
||||
extern size_t dxgi_possible_swap_queue_count;
|
||||
extern bool dxgi_present_attempted;
|
||||
@ -375,7 +375,7 @@ hook_execute_command_lists(ID3D12CommandQueue *queue, UINT NumCommandLists,
|
||||
|
||||
if (dxgi_possible_swap_queue_count <
|
||||
_countof(dxgi_possible_swap_queues)) {
|
||||
if (dxgi_presenting &&
|
||||
if ((dxgi_presenting > 0) &&
|
||||
(queue->GetDesc().Type == D3D12_COMMAND_LIST_TYPE_DIRECT)) {
|
||||
if (try_append_queue_if_unique(queue)) {
|
||||
hlog("Remembering D3D12 queue from present: queue=0x%" PRIX64,
|
||||
|
@ -25,7 +25,7 @@ resize_buffers_t RealResizeBuffers = nullptr;
|
||||
present_t RealPresent = nullptr;
|
||||
present1_t RealPresent1 = nullptr;
|
||||
|
||||
thread_local bool dxgi_presenting = false;
|
||||
thread_local int dxgi_presenting = 0;
|
||||
struct ID3D12CommandQueue *dxgi_possible_swap_queues[8]{};
|
||||
size_t dxgi_possible_swap_queue_count;
|
||||
bool dxgi_present_attempted = false;
|
||||
@ -230,9 +230,9 @@ static HRESULT STDMETHODCALLTYPE hook_present(IDXGISwapChain *swap,
|
||||
}
|
||||
}
|
||||
|
||||
dxgi_presenting = true;
|
||||
++dxgi_presenting;
|
||||
const HRESULT hr = RealPresent(swap, sync_interval, flags);
|
||||
dxgi_presenting = false;
|
||||
--dxgi_presenting;
|
||||
dxgi_present_attempted = true;
|
||||
|
||||
if (capture && capture_overlay) {
|
||||
@ -297,9 +297,9 @@ hook_present1(IDXGISwapChain1 *swap, UINT sync_interval, UINT flags,
|
||||
}
|
||||
}
|
||||
|
||||
dxgi_presenting = true;
|
||||
++dxgi_presenting;
|
||||
const HRESULT hr = RealPresent1(swap, sync_interval, flags, params);
|
||||
dxgi_presenting = false;
|
||||
--dxgi_presenting;
|
||||
dxgi_present_attempted = true;
|
||||
|
||||
if (capture && capture_overlay) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user