Продублирую вопрос здесь.
Почему производители видеокарт пишут что видеокарта поддерживает какой то там Directx ну к примеру Directx 12, кроме Opengl, Vulcan, и у меня вопрос, они эту библиотеку вшивают как то в чип видеокарты или библиотека никакого отношения к видеокарте не имеет и архитектура видеокарты поддерживает набор инструкции и ассемблерных команд которые прописаны в самой библиотеке?
Mikki
> они эту библиотеку вшивают как то в чип видеокарты
нет
> архитектура видеокарты поддерживает набор инструкции и ассемблерных команд
> которые прописаны в самой библиотеке
нет
Aroch
> > они эту библиотеку вшивают как то в чип видеокарты
> нет
Тогда почему некоторые видеокарты поддерживают Directx 12 а некоторые нет?
Mikki
Нет драйверов или возможности полноценной реализации дх12 из-за железа.
Mikki
> Тогда почему некоторые видеокарты поддерживают Directx 12 а некоторые нет?
разберись в том что такое графический api и какое он место занимает на пути: исполняемый файл -> [звенья которые ты пропустил] -> видеокарта
Кстати, а почему в directx SDK нет файлов d3d12.lib и d3dx12.lib?
Mikki
> а почему в directx SDK нет файлов
Если ты про тот SDK, который june 2010, то попробуй угадать почему.
d3d12.lib - есть в Windows SDK
d3dx12.lib - не существует в природе
MrShoor
Просто я по глянул в установленный sdk и увидел что их нет несмотря на то что я скачал с офф сайта.
Значет только на 10-ке, теперь я понял.
Mikki
> d3d12.lib
Можно и так:
FN_D3D12_CREATE_DEVICE D3D12DllData::Init() { d3d12Dll = LoadLibraryA( "d3d12.dll"); if ( !d3d12Dll) { LogMsgErr( "Can't load d3d12.dll\n"); return nullptr; } PFN_D3D12_CREATE_DEVICE D3D12CreateDevice = reinterpret_cast<PFN_D3D12_CREATE_DEVICE>( GetProcAddress( d3d12Dll, "D3D12CreateDevice")); D3D12SerializeVersionedRootSignature = reinterpret_cast<PFN_D3D12_SERIALIZE_VERSIONED_ROOT_SIGNATURE>( GetProcAddress( d3d12Dll, "D3D12SerializeVersionedRootSignature")); return D3D12CreateDevice; }
Вот интересное
D3D12_DRAW_INDEXED_ARGUMENTS drawIndexedArgs : SV_DrawIndexedArgs;
uint vbTable : SV_VertexBufferTable; // can be omitted if vertex bindings aren't used
D3D12_INDEX_BUFFER indexBuffer : SV_IndexBuffer
https://github.com/microsoft/DirectX-Specs/blob/master/d3d/WorkGr… raphics-nodes
Я сделал ошибку: Вместо D3D12_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT поставил D3D12_FILTER_MIN_MAG_LINEAR_MIP_POINT и для Sampler сделал операцию сравнения. Итого на AMD RX 6500 XT работает корректно драйвер корректирует ошибку подставив D3D12_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT, на nVidia не работает :) Вcпоминиаю далекие времена Direct3D9 когда Навидия игнорировала 2 параметр MinVertexIndex https://learn.microsoft.com/en-us/windows/win32/api/d3d9/nf-d3d9-… exedprimitive и ландшафт рисовался корректно, на ATI/Intel нет, хотя включение Sofware Device приводила к ошике в Direct3D Debug Runtime что-то типа "Invalid Stream Index".
Навидия кого-то сильно покусала:)
Может стоит сначала доки читать ?
Как получить pipelinestatistics для Compute ?
при вызове для Compute получаю ошибку
DX ERROR: ID3D12GraphicsCommandList::BeginQuery: Invalid API called. This method is not valid for D3D12_COMMAND_LIST_TYPE_COMPUTE or D3D12_COMMAND_LIST_TYPE_COPY. [ EXECUTION ERROR #932: ]
хотя есть в
D3D12_QUERY_DATA_PIPELINE_STATISTICS::CSInvocations
D3D12_QUERY_DATA_PIPELINE_STATISTICS1::CSInvocations
Andrey
Считать вызовы компьюта можно, но на прямых очередях
https://learn.microsoft.com/en-us/windows/win32/direct3d12/queries
luckyleo769
> Считать вызовы компьюта можно, но на прямых очередях
Но на прямых очередях неоптимально работает Compute ...