directx

42

Upload: dmitry-andreev

Post on 15-Apr-2017

25 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: directx
Page 2: directx

#msdevcon

Windows & More Personal Computing

Как работает DirectX 12Дмитрий АндреевЭксперт по стратегическим технологиям, Microsoft

Page 3: directx

• Разработано API и рабочие драйвера • Около 70% игроков имеют совместимое с DirectX 12

оборудование• 33.5% уже установили Windows 10

• 1 год для бесплатного апгрейда до Windows 10 для Windows 7 и 8.x

Готовность DirectX 12

* базируется на Steam survey

Page 4: directx

Direct3D 12 API• Повышение эффективности• Снижение нагрузки на CPU• Увеличение масштабируемости для нескольких ядер

CPU• Улучшение качества контроля состояния• Включение возможностей D3D11

Page 5: directx

ID3D11DeviceContext

Рендер-контекст D3D11

Input Assembler

Vertex Shader

Hull Shader

Tessellator

Rasterizer

Domain Shader

Geometry Shader

Pixel Shader

Output Merger

GPU Memory

Другие состяния

Page 6: directx

Direct3D 12 – оптимизация состояния конвейера

Группировка конвейера в единый объект

Копирование PSO в состояние оборудования

HW State 1

HW State 2

PipelineState

ObjectHW State 3

Page 7: directx

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

Рендер-контекст 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

Direct3D 12: Дескрипторные кучи и дескрипторные таблицы• Масштабирование возможностей оборудования• Универсальный подход по связыванию ресурсов• Повторное использование статической привязки

• Динамическая индексация шейдерных ресурсов

Page 10: directx

Дескриптор• Небольшой пакет данных описывающий параметры ресурса• Просто данные – не управляются драйверами/ОС

Descriptor { Type Format Mip Count pData }

Texture

Page 11: directx

Дескрипторная куча• Место хранения дескрипторов• Структура определяется

приложением• Низкий уровень затрат на

манипуляции• Допустимо создание

множества куч

GPU Memory

Desc

ripto

r Hea

p

Page 12: directx

Дескрипторные таблицы• Контекст указывает на активную кучу• Не является объектом API• Один тип представления на таблицу

Pipeline State Object…

Vertex Shader

Pixel Shader

Start IndexSize

Page 13: directx

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

Дескрипторные таблицы - 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

Дескрипторные таблицы - 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

DirectX Graphics samples• https://github.com/Microsoft/DirectX-Graphics-Samples

Page 17: directx
Page 18: directx

Root Signature

Page 19: directx

Очереди команд и списки команд

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

Перегрузка CPU : Повторяющиеся команды рендера• Типичное приложение посылает идентичные пакеты команд от

фрейма к фрейму• 90-95% для типичного современного приложения

Page 21: directx

Бандл• Небольшой список команд• Единожды записанный• Может быть использован

множество раз Context

ClearDrawSetTableExecute BundleSetTableExecute BundleSetPSO…

SetP

SODraw

SetP

SOSe

tTable

Dispatc

h

SetP

SOSe

tTable

DrawSe

tPSO

Draw

Page 22: directx

Пример без бандлов// 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

Создание бандла// 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

С бандлами// 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

Лимиты ресурсов 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
Page 27: directx

• http://Ptex.us

Per-Face texture mapping

Page 28: directx

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

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

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 32: directx

Копирование ресурсов с помощью 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

Visual Studio Graphics Analyzer

Page 34: directx

Инструменты анализа графики: последнее поколение

PIX для Xbox 360

CPU, GPU, системный профайлинг и отладка для Xbox консоли

Page 35: directx

Инструменты анализа графики: последнее поколение

PIX для Xbox 360

Popular unified CPU, GPU, System profiling and debugging tool for Xbox console

PIX для Windows

DirectX SDK инструмент для отладки графики

Page 36: directx

Инструменты анализа графики: последнее поколение

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

• Графики в реальном масштабе времени• Visual Studio Graphics

Analyzer (VSGA)• Специальный

инструмент для анализа фреймов

• Создан с использованием Visual Studio shell

Улучшенный инструмент анализа и диагностики

Page 38: directx

•Просмотр исходного кода шейдера и результатов компиляции в ассемблер

•Редактирование кода и мгновенный просмотр результатов

Редактирование шейдеров

Page 39: directx

Анализ нагрузки на GPU• Графики в реальном масштабе

времени: frame time, frame rate, GPU utilization

• Удобно для поиска «бутылочных горлышек» при работе GPU/CPU

Page 40: directx

• Легкий инструмент для записи и проигрывания фреймов приложения directx • Полный анализ в

VS

Инструмент командной строки для записи фреймов

Page 41: directx

• 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

© 2016 Microsoft Corporation. All rights reserved.