directx
TRANSCRIPT
![Page 1: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/1.jpg)
![Page 2: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/2.jpg)
#msdevcon
Windows & More Personal Computing
Как работает DirectX 12Дмитрий АндреевЭксперт по стратегическим технологиям, Microsoft
![Page 3: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/3.jpg)
• Разработано API и рабочие драйвера • Около 70% игроков имеют совместимое с DirectX 12
оборудование• 33.5% уже установили Windows 10
• 1 год для бесплатного апгрейда до Windows 10 для Windows 7 и 8.x
Готовность DirectX 12
* базируется на Steam survey
![Page 4: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/4.jpg)
Direct3D 12 API• Повышение эффективности• Снижение нагрузки на CPU• Увеличение масштабируемости для нескольких ядер
CPU• Улучшение качества контроля состояния• Включение возможностей D3D11
![Page 5: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/5.jpg)
ID3D11DeviceContext
Рендер-контекст D3D11
Input Assembler
Vertex Shader
Hull Shader
Tessellator
Rasterizer
Domain Shader
Geometry Shader
Pixel Shader
Output Merger
GPU Memory
Другие состяния
![Page 6: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/6.jpg)
Direct3D 12 – оптимизация состояния конвейера
Группировка конвейера в единый объект
Копирование PSO в состояние оборудования
HW State 1
HW State 2
PipelineState
ObjectHW State 3
![Page 7: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/7.jpg)
ID3D11DeviceContext
Рендер-контекст D3D11
Input Assembler
Vertex Shader
Hull Shader
Tessellator
Rasterizer
Domain Shader
Geometry Shader
Pixel Shader
Output Merger
GPU Memory
Non-PSO State
![Page 8: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/8.jpg)
Рендер-контекст D3D12 : Pipeline State Object (PSO)
Pipeline State ObjectInput Assembler
Vertex Shader
Hull Shader
Tessellator
Rasterizer
Domain Shader
Geometry Shader
Pixel Shader
Output Merger
GPU Memory
Non-PSO State
![Page 9: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/9.jpg)
Direct3D 12: Дескрипторные кучи и дескрипторные таблицы• Масштабирование возможностей оборудования• Универсальный подход по связыванию ресурсов• Повторное использование статической привязки
• Динамическая индексация шейдерных ресурсов
![Page 10: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/10.jpg)
Дескриптор• Небольшой пакет данных описывающий параметры ресурса• Просто данные – не управляются драйверами/ОС
Descriptor { Type Format Mip Count pData }
Texture
![Page 11: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/11.jpg)
Дескрипторная куча• Место хранения дескрипторов• Структура определяется
приложением• Низкий уровень затрат на
манипуляции• Допустимо создание
множества куч
GPU Memory
Desc
ripto
r Hea
p
![Page 12: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/12.jpg)
Дескрипторные таблицы• Контекст указывает на активную кучу• Не является объектом API• Один тип представления на таблицу
Pipeline State Object…
Vertex Shader
…
Pixel Shader
…
Start IndexSize
![Page 13: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/13.jpg)
Render Context: Дескрипторные кучи и дескрипторные таблицы
Pipeline State ObjectInput Assembler
Vertex Shader
Hull Shader
Tessellator
Rasterizer
Domain Shader
Geometry Shader
Pixel Shader
Output Merger
GPU Memory
Non-PSO State
![Page 14: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/14.jpg)
Дескрипторные таблицы - HLSLTexture2D texA[8] : register(t3, 2);Texture2D texB[8] : register(t2, 4);
SamplerState sam[2] : register(s0, 1);
struct MyCBufferType{ float foo; float bar;};
cbuffer MyCBufferType buf[4] : register(c0, 2);
![Page 15: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/15.jpg)
Дескрипторные таблицы - HLSLfloat4 main( uint i1 : INDEX1, uint i2 : INDEX2, float2 coord : TEXCOORD) : SV_TARGET{ MyCBufferType b = buf[i1]; // CBuffer table 2 element #(i1) SamplerState s = sam[i1]; // Sampler table 1 element #(i1) Texture2D tA = texA[i1]; // SRV table 2 element #(i1+3) Texture2D tB = texB[i2]; // SRV table 4 element #(i2+2) float4 colorA = tA.Sample(s, coord); float4 colorB = tB.Sample(s, coord); return colorA * b.foo + colorB * b.bar;}
![Page 16: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/16.jpg)
DirectX Graphics samples• https://github.com/Microsoft/DirectX-Graphics-Samples
![Page 17: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/17.jpg)
![Page 18: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/18.jpg)
Root Signature
![Page 19: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/19.jpg)
Очереди команд и списки команд
Command Queue
Execute Command List 1Execute Command List 2Signal Fence
Command List 1ClearSetTableExecute Bundle ASetTableDrawSetPSODraw
Command List 2ClearDispatchSetTableExecute Bundle ASetTableExecute Bundle B
SetP
SODraw
SetP
SOSe
tTable
Dispatc
h
SetP
SOSe
tTable
DrawSe
tPSO
Draw
![Page 20: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/20.jpg)
Перегрузка CPU : Повторяющиеся команды рендера• Типичное приложение посылает идентичные пакеты команд от
фрейма к фрейму• 90-95% для типичного современного приложения
![Page 21: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/21.jpg)
Бандл• Небольшой список команд• Единожды записанный• Может быть использован
множество раз Context
ClearDrawSetTableExecute BundleSetTableExecute BundleSetPSO…
SetP
SODraw
SetP
SOSe
tTable
Dispatc
h
SetP
SOSe
tTable
DrawSe
tPSO
Draw
![Page 22: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/22.jpg)
Пример без бандлов// Setup
pContext->SetPipelineState(pPSO);
pContext->SetRenderTargetViewTable(0, 1, FALSE, 0);
pContext->SetVertexBufferTable(0, 1);
pContext->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
// Draw 1
pContext->SetConstantBufferViewTable(D3D12_SHADER_STAGE_PIXEL, 0, 1);
pContext->SetShaderResourceViewTable(D3D12_SHADER_STAGE_PIXEL, 0, 1);
pContext->DrawInstanced(6, 1, 0, 0);
pContext->SetShaderResourceViewTable(D3D12_SHADER_STAGE_PIXEL, 1, 1);
pContext->DrawInstanced(6, 1, 6, 0);
// Draw 2
pContext->SetConstantBufferViewTable(D3D12_SHADER_STAGE_PIXEL, 1, 1);
pContext->SetShaderResourceViewTable(D3D12_SHADER_STAGE_PIXEL, 0, 1);
pContext->DrawInstanced(6, 1, 0, 0);
pContext->SetShaderResourceViewTable(D3D12_SHADER_STAGE_PIXEL, 1, 1);
pContext->DrawInstanced(6, 1, 6, 0);
Set object #1 specific tables and draw
Setup pipeline state and common descriptor tables
Set object #2 specific tables and draw
![Page 23: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/23.jpg)
Создание бандла// Create bundle
pDevice->CreateCommandList(D3D12_COMMAND_LIST_TYPE_BUNDLE, pBundleAllocator, pPSO, pDescriptorHeap, &pBundle);
// Record commands
pBundle->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
pBundle->SetShaderResourceViewTable(D3D12_SHADER_STAGE_PIXEL, 0, 1);
pBundle->DrawInstanced(6, 1, 0, 0);
pBundle->SetShaderResourceViewTable(D3D12_SHADER_STAGE_PIXEL, 1, 1);
pBundle->DrawInstanced(6, 1, 6, 0);
pBundle->Close();
![Page 24: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/24.jpg)
С бандлами// Setup
pContext->SetPipelineState(pPSO);
pContext->SetRenderTargetViewTable(0, 1, FALSE, 0);
pContext->SetVertexBufferTable(0, 1);
pContext->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
// Draw 1
pContext->SetConstantBufferViewTable(D3D12_SHADER_STAGE_PIXEL, 0, 1);
pContext->SetShaderResourceViewTable(D3D12_SHADER_STAGE_PIXEL, 0, 1);
pContext->DrawInstanced(6, 1, 0, 0);
pContext->SetShaderResourceViewTable(D3D12_SHADER_STAGE_PIXEL, 1, 1);
pContext->DrawInstanced(6, 1, 6, 0);
// Draw 2
pContext->SetConstantBufferViewTable(D3D12_SHADER_STAGE_PIXEL, 1, 1);
pContext->SetShaderResourceViewTable(D3D12_SHADER_STAGE_PIXEL, 0, 1);
pContext->DrawInstanced(6, 1, 0, 0);
pContext->SetShaderResourceViewTable(D3D12_SHADER_STAGE_PIXEL, 1, 1);
pContext->DrawInstanced(6, 1, 6, 0);
// Setup
pContext->SetRenderTargetViewTable(0, 1, FALSE, 0);
pContext->SetVertexBufferTable(0, 1);
// Draw 1 and 2
pContext->SetConstantBufferViewTable(D3D12_SHADER_STAGE_PIXEL, 0, 1);
pContext->ExecuteBundle(pBundle);
pContext->SetConstantBufferViewTable(D3D12_SHADER_STAGE_PIXEL, 1, 1);
pContext->ExecuteBundle(pBundle);
Без
![Page 25: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/25.jpg)
Лимиты ресурсов DX11• https://msdn.microsoft.com/en-us/library/windows/desktop/ff47690
0(v=vs.85).aspx• D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION 2048 array slices• Up to 128 resources can be active for each pipeline stage.
![Page 26: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/26.jpg)
![Page 28: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/28.jpg)
D3D11 ПрофайлингPresentApp Logic D3D11 UMD KMDDXGK
App Logic D3D11
App Logic D3D11
App Logic D3D11
Thread 0
Thread 1
Thread 2
Thread 3
0 ms 2.50 ms 5.00 ms 7.50 ms
App Logic D3D Runtime User-mode Driver DXGKernel Kernel-mode Driver Present
![Page 29: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/29.jpg)
D3D12 Профайлинг
App Logic UMDD3D
12 Pres
entDX
GK/
KMD
App Logic UMDD3D
12App Logic UMDD3
D12
App Logic UMDD3D
12
Thread 0
Thread 1
Thread 2
Thread 3
0 ms 2.50 ms 5.00 ms 7.50 ms
App Logic D3D Runtime User-mode Driver DXGKernel Kernel-mode Driver Present
![Page 30: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/30.jpg)
D3D11 v D3D12 результаты
App Logic UMDD3 D1 2 Pr es en tDXG
K/ KM D
App Logic UMDD3 D1 2
App Logic UMDD3 D1 2
App Logic UMDD3 D1 2
Thread 0
Thread 1
Thread 2
Thread 3
0 ms 2.50 ms 5.00 ms 7.50 ms
PresentApp Logic D3D11 UMD KMDDXGK
App Logic D 3 D 1 1
App Logic D 3 D 1 1
App Logic D 3 D 1 1
Thread 0
Thread 1
Thread 2
Thread 3
0 ms 2.50 ms 5.00 ms 7.50 ms
App+GFX (ms) GFX-only (ms)
D3D11 D3D12 D3D11 D3D12
Thread 0 7.88 3.80 5.73 1.17
Thread 1 3.08 2.50 0.35 0.81
Thread 2 2.84 2.46 0.34 0.69
Thread 3 2.63 2.45 0.23 0.65
Total 16.42 11.21 6.65 3.32
![Page 31: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/31.jpg)
Мультиадаптерность
![Page 32: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/32.jpg)
Копирование ресурсов с помощью Multiengine
• Синхронизация между GPUs• Разделяемая общая память
…dGPU3D->Draw(frame1A)dGPU3D->Signal(renderComplete)
dGPUCopy->Wait(renderComplete)dGPUCopy->Copy(frame1A, sharedHeap)dGPUCopy->Signal(copyComplete)
iGPU3D->Wait(copyComplete)iGPU3D->Bind(sharedFrame)iGPU3D->Draw(frame1B)iGPU3D->Present(frame1B)…
![Page 33: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/33.jpg)
Visual Studio Graphics Analyzer
![Page 34: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/34.jpg)
Инструменты анализа графики: последнее поколение
PIX для Xbox 360
CPU, GPU, системный профайлинг и отладка для Xbox консоли
![Page 35: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/35.jpg)
Инструменты анализа графики: последнее поколение
PIX для Xbox 360
Popular unified CPU, GPU, System profiling and debugging tool for Xbox console
PIX для Windows
DirectX SDK инструмент для отладки графики
![Page 36: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/36.jpg)
Инструменты анализа графики: последнее поколение
PIX для Xbox 360
Popular unified CPU, GPU, System profiling and debugging tool for Xbox console
PIX для Windows
DirectX SDK graphics tool focused on graphics debugging
Visual Studio 2012
Visual Studio Graphics Diagnostics 2012:интегрированный в Visual Studio инструмент базирующийся на PIX
![Page 37: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/37.jpg)
• Графики в реальном масштабе времени• Visual Studio Graphics
Analyzer (VSGA)• Специальный
инструмент для анализа фреймов
• Создан с использованием Visual Studio shell
Улучшенный инструмент анализа и диагностики
![Page 38: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/38.jpg)
•Просмотр исходного кода шейдера и результатов компиляции в ассемблер
•Редактирование кода и мгновенный просмотр результатов
Редактирование шейдеров
![Page 39: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/39.jpg)
Анализ нагрузки на GPU• Графики в реальном масштабе
времени: frame time, frame rate, GPU utilization
• Удобно для поиска «бутылочных горлышек» при работе GPU/CPU
![Page 40: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/40.jpg)
• Легкий инструмент для записи и проигрывания фреймов приложения directx • Полный анализ в
VS
Инструмент командной строки для записи фреймов
![Page 41: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/41.jpg)
• Graphics Tools• Visual Studio Community Edition:
http://www.visualstudio.com/downloads/visual-studio-2015-downloads-vs• http://blogs.msdn.com/b/vcblog/
• DirectX 12• Блог: http://blogs.msdn.com/b/directx/• Документация : https://msdn.microsoft.com/en-us/library/dn903821(v=vs.85).aspx
• GDC 2015:• http://channel9.msdn.com/Events/GDC/GDC-2015/Advanced-DirectX12-Graphics-and-Performance• http://amd-dev.wpengine.netdna-cdn.com/wordpress/media/2012/10/D3D12-A-new-meaning-for-efficienc
y-and-performance.ppsx• DirectX Tools:
http://channel9.msdn.com/Events/GDC/GDC-2015/Solve-the-Tough-Graphics-Problems-with-your-Game-Using-DirectX-Tools
• Direct3D 12 Power & Performance: http://channel9.msdn.com/Events/GDC/GDC-2015/Better-Power-Better-Performance-Your-Game-on-DirectX12
• Microsoft DirectX 12 and Graphics Education • https://github.com/Microsoft/DirectX-Graphics-Samples.git
Ресурсы
![Page 42: directx](https://reader035.vdocuments.mx/reader035/viewer/2022062316/58780af91a28ab971e8b5abf/html5/thumbnails/42.jpg)
© 2016 Microsoft Corporation. All rights reserved.