@@ -2589,7 +2589,7 @@ std::mutex queue_locker;
2589
2589
{
2590
2590
for (int queue = 0 ; queue < QUEUE_COUNT; ++queue)
2591
2591
{
2592
- hr = dx12_check (device->CreateFence (0 , D3D12_FENCE_FLAG_NONE, PPV_ARGS (frame_fence [buffer][queue])));
2592
+ hr = dx12_check (device->CreateFence (0 , D3D12_FENCE_FLAG_NONE, PPV_ARGS (frame_fence_cpu [buffer][queue])));
2593
2593
if (FAILED (hr))
2594
2594
{
2595
2595
wilog_messagebox (" ID3D12Device::CreateFence[FRAME] failed! ERROR: %s" , wi::helper::GetPlatformErrorString (hr).c_str ());
@@ -2598,16 +2598,38 @@ std::mutex queue_locker;
2598
2598
switch (queue)
2599
2599
{
2600
2600
case QUEUE_GRAPHICS:
2601
- dx12_check (frame_fence [buffer][queue]->SetName (L" frame_fence [QUEUE_GRAPHICS]" ));
2601
+ dx12_check (frame_fence_cpu [buffer][queue]->SetName (L" frame_fence_cpu [QUEUE_GRAPHICS]" ));
2602
2602
break ;
2603
2603
case QUEUE_COMPUTE:
2604
- dx12_check (frame_fence [buffer][queue]->SetName (L" frame_fence [QUEUE_COMPUTE]" ));
2604
+ dx12_check (frame_fence_cpu [buffer][queue]->SetName (L" frame_fence_cpu [QUEUE_COMPUTE]" ));
2605
2605
break ;
2606
2606
case QUEUE_COPY:
2607
- dx12_check (frame_fence [buffer][queue]->SetName (L" frame_fence [QUEUE_COPY]" ));
2607
+ dx12_check (frame_fence_cpu [buffer][queue]->SetName (L" frame_fence_cpu [QUEUE_COPY]" ));
2608
2608
break ;
2609
2609
case QUEUE_VIDEO_DECODE:
2610
- dx12_check (frame_fence[buffer][queue]->SetName (L" frame_fence[QUEUE_VIDEO_DECODE]" ));
2610
+ dx12_check (frame_fence_cpu[buffer][queue]->SetName (L" frame_fence_cpu[QUEUE_VIDEO_DECODE]" ));
2611
+ break ;
2612
+ };
2613
+
2614
+ hr = dx12_check (device->CreateFence (0 , D3D12_FENCE_FLAG_NONE, PPV_ARGS (frame_fence_gpu[buffer][queue])));
2615
+ if (FAILED (hr))
2616
+ {
2617
+ wilog_messagebox (" ID3D12Device::CreateFence[FRAME] failed! ERROR: %s" , wi::helper::GetPlatformErrorString (hr).c_str ());
2618
+ wi::platform::Exit ();
2619
+ }
2620
+ switch (queue)
2621
+ {
2622
+ case QUEUE_GRAPHICS:
2623
+ dx12_check (frame_fence_gpu[buffer][queue]->SetName (L" frame_fence_gpu[QUEUE_GRAPHICS]" ));
2624
+ break ;
2625
+ case QUEUE_COMPUTE:
2626
+ dx12_check (frame_fence_gpu[buffer][queue]->SetName (L" frame_fence_gpu[QUEUE_COMPUTE]" ));
2627
+ break ;
2628
+ case QUEUE_COPY:
2629
+ dx12_check (frame_fence_gpu[buffer][queue]->SetName (L" frame_fence_gpu[QUEUE_COPY]" ));
2630
+ break ;
2631
+ case QUEUE_VIDEO_DECODE:
2632
+ dx12_check (frame_fence_gpu[buffer][queue]->SetName (L" frame_fence_gpu[QUEUE_VIDEO_DECODE]" ));
2611
2633
break ;
2612
2634
};
2613
2635
}
@@ -5347,7 +5369,8 @@ std::mutex queue_locker;
5347
5369
5348
5370
queue.submit ();
5349
5371
5350
- dx12_check (queue.queue ->Signal (frame_fence[GetBufferIndex ()][q].Get (), 1 ));
5372
+ dx12_check (queue.queue ->Signal (frame_fence_cpu[GetBufferIndex ()][q].Get (), 1 ));
5373
+ dx12_check (queue.queue ->Signal (frame_fence_gpu[GetBufferIndex ()][q].Get (), FRAMECOUNT));
5351
5374
}
5352
5375
5353
5376
for (uint32_t cmd = 0 ; cmd < cmd_last; ++cmd)
@@ -5406,8 +5429,8 @@ std::mutex queue_locker;
5406
5429
continue ;
5407
5430
if (queues[queue2].queue == nullptr )
5408
5431
continue ;
5409
- ID3D12Fence* fence = frame_fence [GetBufferIndex ()][queue2].Get ();
5410
- queues[queue1].queue ->Wait (fence, 1 );
5432
+ ID3D12Fence* fence = frame_fence_gpu [GetBufferIndex ()][queue2].Get ();
5433
+ queues[queue1].queue ->Wait (fence, FRAMECOUNT );
5411
5434
}
5412
5435
}
5413
5436
@@ -5423,7 +5446,7 @@ std::mutex queue_locker;
5423
5446
{
5424
5447
if (queues[queue].queue == nullptr )
5425
5448
continue ;
5426
- ID3D12Fence* fence = frame_fence [bufferindex][queue].Get ();
5449
+ ID3D12Fence* fence = frame_fence_cpu [bufferindex][queue].Get ();
5427
5450
if (FRAMECOUNT >= BUFFERCOUNT)
5428
5451
{
5429
5452
if (fence->GetCompletedValue () < 1 )
0 commit comments