Я не совсем понял что делают эти две строчки.
command_queCopy->Signal(dx12_fence, 1); dx12_fence->SetEventOnCompletion( 1,m_fenceEvent);
И почему тут именно число 1.
Как я понял в общем, мы так на CPU пытаемся ждать , пока GPU не окончит копирование.
И почему нельзя было по человечески сделать проще, типа:
command_queCopy->WaitFinish;
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; }
Andrey
> (В Vulkan для этого нужно использовать VK_KHR_external_fence_win32
можно подумать что без этого жить нельзя
В DX12 надо для разных blend mode создавать свой PSO_pipeline ?
Ничего не нашел кроме как ID3D12GraphicsCommandList::OMSetBlendFactor
void OMSetBlendFactor(
const FLOAT [4] BlendFactor
);
Инуендо.
Ты не понял моего вопроса.
Я спросил как быстро менять D3D12_BLEND_DESC.
И кроме как создавать PSO_pipeline с нужным D3D12_BLEND_DESC я ничего не нашел.
Меня же интересует , есть ли быстрый метод переключение разных D3D12_BLEND_DESC ?
ronniko
> Ты не понял моего вопроса.
ты не понял сути новых апи
ronniko
Список прозрачных обектов рисуется отдельно, если будут идти несколько с одинаковым PSO с прозрачностью, достаточно не ставить повторно. Это снизит нагрузку на CPU. В общем да, нужно создавать отдельно другой PSO либо ставить Blend фактор параметры через
ID3D12GraphicsCommandList::OMSetBlendFactor.
Andrey
> Список прозрачных обектов рисуется отдельно, если будут идти несколько с
> одинаковым PSO с прозрачностью, достаточно не ставить повторно.
причёт тут отдельно или нет ? если другой тип блендинга или шейдер то PSO нужно менять
> Это снизит нагрузку на CPU.
смена PSO это удар по GPU прежде всего
> либо ставить Blend фактор параметры через
> ID3D12GraphicsCommandList::OMSetBlendFactor.
там только цвет же
Правильные новости про новый API от создателей DirectX 12... очень правильные... и там не какой-то хрен типа DXR... хотя даже там есть коррективы типа упрощенной версии...
https://www.igromania.ru/news/87663/V_Microsoft_rasskazali_o_novy… rectX_12.html
Там вот такое, вот...
- DirectX Mesh Shader (DMS)
- DirectX Sampler Feedback (DSF)
- Texture-Space Shading (TSS)
Вот только у меня очень правильный вопрос: А когда поддержку трассировки лучей завезут в OpenGL и DirectX 11? Неужели здесь все настолько сложно?
helix.d
> Вот только у меня очень правильный вопрос: А когда поддержку трассировки лучей
> завезут в OpenGL и DirectX 11? Неужели здесь все настолько сложно?
да не сложно, просто нафиг вендорам не нужно. это боль - поддерживать старые АПИ.
Кто собирал DX12 пример простой треугольник для Win 10
Напишите какой у вас FPS без vsync-a(то есть больше 60 FPS должно быть).
И напишите какая видеокарта и проц.
И обязательно рендер должен быть каждый раз, а не по window resize или move !
Можно отсюда для Win 10
https://www.3dgep.com/learning-directx-12-2/
Или этот:
https://github.com/GPUOpen-LibrariesAndSDKs/HelloD3D12/
Простой треугольник (пример HelloTriangle):
https://github.com/microsoft/DirectX-Graphics-Samples/tree/master… D12HelloWorld
ronniko
>Кто собирал DX12 пример простой треугольник для Win 10
Где сорцы?
В среднем кажет 670 фпс, вот для такой картинки:
ГПУ: GeForce GTX 660M.
Ноутбук с Win 10 ?