Войти
ПрограммированиеФорумГрафика

Directx 12 вопросы. (2 стр)

Страницы: 1 2 3 4 5 Следующая »
#15
8:44, 16 ноя. 2019

Andrey
> Если не инициализировать ID3D12Debug, ID3D12Debug1 то устройство создается.
> Странно...

Я не понял о чем идет речь.  ID3D12Debug создается для отладки, в частности для вывода сообщений о не удаленных ресурсах (pDebug->ReportLiveObjects) при закрытии аппликации и для довольно глючного валидатора шейдеров (SetEnableGPUBasedValidation). Более никакой практической пользы от этого интерфейса (кроме двух описанных случаев) я не обнаружил. Разумеется все работает и без дебаг-интерфейса, если ты к нему явно не обращаешься. Создание устройства к этому никакого отношения не имеет, устройство создается после инициализации интерфейса, поскольку он в частности контролирует этот процесс, но если его нет, то и фиг с ним.


#16
9:30, 16 ноя. 2019

san

тот самый случай, когда с тобой согласен, да

#17
11:24, 16 ноя. 2019

san
Да, ты все правильно пишешь. Но позавчера действительно убрав инициализацию ID3D12Debug, ID3D12Debug1(остальные интерфейсы не поддерживаются) У меня создавался ID3D12Device.

Вчера я обновил Windows 10 и дрова, все заработало. Я думаю проблема была в обновлении Windows 10.

#18
11:34, 16 ноя. 2019
Andrey

помню как кто-то в 2008 мне с пеной у рта доказывал что в директе всё работает как швейцарские часы

#19
11:37, 16 ноя. 2019

По сравнению с OpenGL (и возможно даже Vulkan) DirectX действительно швейцарские часы.

#20
11:42, 16 ноя. 2019

prowkan

тоже мнение

#21
(Правка: 19:23) 19:03, 18 ноя. 2019

Не всегда успевает залиться текстура картинкой и видны баги.
В виде частичной картинки , а не вся полностью.

При том что картинки 64х64 !
Не ужели 800 миллисекунд не хватает , что бы GPU скопировал ?!

Как надо правильно ждать копирование на GPU ?

В место 1 стоит больше число ставить ?

m_fenceEvent = CreateEvent(0,0,0,0);
command_queCopy->Signal(dx12_fence, 1);
dx12_fence->SetEventOnCompletion(1,m_fenceEvent);
WaitForSingleObject(m_fenceEvent,800); 

#22
19:08, 18 ноя. 2019
WaitForSingleObject(m_fenceEvent,0xFFFFFFFF); 
#23
(Правка: 19:13) 19:11, 18 ноя. 2019

Я не совсем понял что делают эти две строчки.

command_queCopy->Signal(dx12_fence, 1);
dx12_fence->SetEventOnCompletion(1,m_fenceEvent);

И почему тут именно число 1.

Как я понял в общем, мы так на CPU пытаемся ждать , пока GPU не окончит копирование.

И почему нельзя было по человечески сделать проще, типа:

command_queCopy->WaitFinish;

#24
19:54, 18 ноя. 2019

ronniko
> И почему нельзя было по человечески сделать проще, типа:
>
> command_queCopy->WaitFinish;
Тогда теряется гибкость в синхронизации. ID3D12Fence и он может сбрасывать Win32 Event, его можно использовать WaitForSingleObject процессе/потоке, не касаясь Direct3D12 API. (В Vulkan для этого нужно использовать  VK_KHR_external_fence_win32, c POSIX версий не изучал)
>command_queCopy->WaitFinish;
я  так и обернул,

...
computeCommandQueue.WaitForFence(computeFence);
...
graphicsCommandQueue.WaitForFence(presentFence);
void Direct3D12Fence::Wait()
{
  event.Wait(); // WaitForSingleObject
  event.Reset(); // ResetEvent
}

HRESULT Direct3D12CommandQueue::WaitForFence(Direct3D12Fence& d3d12fence)
{
  const UINT64 fence = fenceValue;
  HRESULT hr = queue->Signal(d3d12fence, fence);
  assert(SUCCEEDED(hr) && "ID3D12CommandQueue::Signal failed");
  fenceValue++;
  // Wait until the previous frame is finished.
  if (d3d12fence->GetCompletedValue() < fence) {
    hr = d3d12fence->SetEventOnCompletion(fence, d3d12fence.event);
    assert(SUCCEEDED(hr) && "ID3D12Fence::SetEventOnCompletion failed");
    d3d12fence.Wait();
  }
  return hr;
 }
#25
22:48, 18 ноя. 2019

Andrey
> (В Vulkan для этого нужно использовать  VK_KHR_external_fence_win32

можно подумать что без этого жить нельзя

#26
(Правка: 13:12) 13:10, 26 ноя. 2019

В DX12 надо для разных blend mode создавать свой PSO_pipeline ?
Ничего не нашел кроме как ID3D12GraphicsCommandList::OMSetBlendFactor
void OMSetBlendFactor(
  const FLOAT [4] BlendFactor
);

#27
13:12, 26 ноя. 2019

ronniko
> В DX12 надо для разных blend mode создавать свой PSO_pipeline ?
> Ничего не нашел кроме как ID3D12GraphicsCommandList::OMSetBlendFactor

малолетный идиот, что тут ещё можно сказать

#28
13:13, 26 ноя. 2019

А по конкретнее ?

#29
13:14, 26 ноя. 2019

https://docs.microsoft.com/en-us/windows/win32/api/d3d12/ns-d3d12… ne_state_desc

Страницы: 1 2 3 4 5 Следующая »
ПрограммированиеФорумГрафика