DirectX 12 - Dari Leonardo da Vinci ke Seni Kontemporer

Grafik komputer adalah disiplin yang luas dan berkembang pesat. Setiap tahun, antarmuka pemrograman aplikasi menjadi lebih fleksibel, yang memungkinkan mereka untuk mengimplementasikan formasi gambar yang lebih kompleks dan algoritma pemrosesan. Namun, kemungkinan grafik interaktif belum mencapai tingkat pemodelan 3d dan paket visualisasi. Semua ini mendorong penelitian aktif di bidang ini.


gambar


DirectX 12 adalah komponen antarmuka pemrograman grafis berkinerja tinggi. Tujuan utama dari antarmuka baru adalah untuk mengurangi overhead CPU dari driver, menurunkan tingkat abstraksi perangkat keras, kemampuan untuk menggabungkan kartu grafis pada tingkat API (sebelum itu hanya ada CrossFireX spesifik-vender, solusi NVIDIA SLI). Resmi dirilis oleh Microsoft pada Juli 2015.


Artikel ini ditujukan bagi mereka yang sudah bekerja dengan perpustakaan grafik (OpenGL, DirectX 11). Namun, bagi orang-orang yang berencana untuk mulai belajar grafik dengan versi 12, mungkin juga bermanfaat.


Di dalamnya, kami akan mempertimbangkan topik-topik berikut:


  • Lingkungan Hidup
  • Deskripsi singkat dari pipa grafis
  • Fitur DirectX 12 baru
    1. Serikat
    2. Tim
    3. Sinkronisasi
    4. Lampiran Sumber Daya

Lingkungan Hidup


DirectX 12 Windows SDK Windows 10. IDE Visual Studio, C++. DirectX, d3d12.h dxgi1_6.h d3d12.lib, dxguid.lib, dxgi.lib, d3dcompiler.lib. Windows SDK. "D3D12 Helper Library" d3dx12.h, boilerplate . d3dx12.h .



, โ€” - . , โ€” . , . . , , . , โ€” , .


, .



, , , , , , . โ€” . , . , , , , . . โ€” (clip space).



โ€” , . . , . , . . ( ). API. , , .



, , , , . .



, (scissor test), (stencil test) (depth test). , . - , . , , . , .


DirectX 11 ( DiretcX 12 )


DirectX 12


DirectX 12.



11 : RSSetState(), OMSetDepthStencilState(), OMSetBlendState(). , . , . , โ€” PSO (Pipeline State Object). : " ", . , , Root Signature ( ).



immideate context. . , DirectX 11 deferred context. DirectX 12 immideate context deferred . deferred command list, .


, : command list, , CPU .


, . , GPU, . , Release() โ€” , .



GPU, DirectX 12 fence, ID3D12Fence . Fence โ€” , GPU . ยซยป , ID3D12CommandQueue::Signal() . ID3D12Fence::SetEventOnCompletion(UINT64 Value, HANDLE hEvent) winapi event. WaitForSingleObject() event- , . GPU , fence , WaitForSingleObject() .



โ€” DirectX.



DirectX 11 : API. , ( ) 5 6 :


ID3D11ShaderResourceView* srvs[] = { 
    texture1->GetShaderResourceView();
    texture2->GetShaderResourceView();
};
context->PSSetShaderResources(5, 2, srvs);

GetShaderResourceView() ID3D11ShaderResourceView.
:


Texture2D texture1 : register(t5);
Texture2D texture2 : register(t6);

, . , . ? GCN ISA, :


All vector memory operations use an image resource constant (T#) that is a 128- or 256-bit value in SGPRs. This constant is sent to the texture cache when the instruction is executed. This constant defines the address, data format, and characteristics of the surface in memory.

, , (128 256-), . , , . , , ยซยป . : (T#), (S#) (V#). Direct3D 12 , , โ€” GPU.



, . โ€” , (GPU , , , , ). โ€” . :


  • Constant buffer views (CBVs)
  • Unordered access views (UAVs)
  • Shader resource views (SRVs)
  • Samplers

CBVs, UAVs, SRVs , โ€” . , .


shader visible . , non shader visible :


  • Render Target Views (RTVs)
  • Depth Stencil Views (DSVs)
  • Stream Output Views (SOVs)

views ( ), non shader visible ( D3D12_DESCRIPTOR_HEAP_FLAGS::D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE ).


view's, (, , ) :


  • Index Buffer View (IBV)
  • Vertex Buffer View (VBV)

D3D12_INDEX_BUFFER_VIEW D3D12_VERTEX_BUFFER_VIEW . Pipeline State Object. PSO .


, ID3D11...View, .


Root signature


Root signature โ€” DirectX 12 API . , , . Root signature , () , .


Root signature , root parameter. root parameter root arguments. root argument, . Root parameter :


  • Root constants (1 DWORD == 32bit value)
  • Inline descriptors ( 64-bit GPU virtual addresses, 2 DWORDs )
  • (1 DWORD)

root signature โ€” 64 DWORDs. , .


Root constant root signature 32- , constant buffer. (, MVP ), ( 4 ). , . : " ".


root signature โ€” inline descriptors. โ€” per object. , . . ( ), GPU. , , ID3D12GraphicsCommandList::SetGraphicsRootConstantBufferView, root parameter inline descriptor .


, . descriptor range. Descriptor range โ€” . :


typedef enum D3D12_DESCRIPTOR_RANGE_TYPE
    {
        D3D12_DESCRIPTOR_RANGE_TYPE_SRV = 0,
        D3D12_DESCRIPTOR_RANGE_TYPE_UAV = ( D3D12_DESCRIPTOR_RANGE_TYPE_SRV + 1 ) ,
        D3D12_DESCRIPTOR_RANGE_TYPE_CBV = ( D3D12_DESCRIPTOR_RANGE_TYPE_UAV + 1 ) ,
        D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER = ( D3D12_DESCRIPTOR_RANGE_TYPE_CBV + 1 ) 
    }   D3D12_DESCRIPTOR_RANGE_TYPE;

typedef struct D3D12_DESCRIPTOR_RANGE
    {
    D3D12_DESCRIPTOR_RANGE_TYPE RangeType;
    UINT NumDescriptors;
    UINT BaseShaderRegister;
//...
    }   D3D12_DESCRIPTOR_RANGE;

, RangeType โ€” , NumDescriptors โ€” , BaseShaderRegister โ€” . . ID3D12GraphicsCommandList::SetGraphicsRootDescriptorTable, root parameter . , , . , descriptor heap.



Kami telah memeriksa beberapa fitur DirectX 12. Jika Anda tertarik dengan topik ini atau bidang grafis komputer lainnya, berhenti berlangganan komentar.


Tautan:
https://docs.microsoft.com/en-us/windows/win32/direct3d12/directx-12-programming-guide
https://developer.nvidia.com/dx12-dos-and-donts
https: // gpuopen.com/performance-root-signature-descriptor-sets/


All Articles