![Page 1: DX12 & Vulkan Dawn of a New Generation of Graphics APIsdeveloper.amd.com/...Stephan_DirectX12_And_Vulkan.pdf · DX12 & Vulkan Dawn of a New Generation of Graphics APIs Stephan Hodes](https://reader030.vdocuments.mx/reader030/viewer/2022040307/5ecb76890746fe023043a7eb/html5/thumbnails/1.jpg)
DX12 & Vulkan Dawn of a New Generation of
Graphics APIs
Stephan Hodes Developer Technology Engineer, AMD
![Page 2: DX12 & Vulkan Dawn of a New Generation of Graphics APIsdeveloper.amd.com/...Stephan_DirectX12_And_Vulkan.pdf · DX12 & Vulkan Dawn of a New Generation of Graphics APIs Stephan Hodes](https://reader030.vdocuments.mx/reader030/viewer/2022040307/5ecb76890746fe023043a7eb/html5/thumbnails/2.jpg)
Agenda
Why do we need new APIs?
What‘s new?
• Parallelism
• Explicit Memory Management
• PSOs and Descriptor Sets
Best Practices
![Page 3: DX12 & Vulkan Dawn of a New Generation of Graphics APIsdeveloper.amd.com/...Stephan_DirectX12_And_Vulkan.pdf · DX12 & Vulkan Dawn of a New Generation of Graphics APIs Stephan Hodes](https://reader030.vdocuments.mx/reader030/viewer/2022040307/5ecb76890746fe023043a7eb/html5/thumbnails/3.jpg)
Evolution of 3D Graphics APIs
• Software rasterization
• 1996 Glide: Bilinear filtering + Transparency
• 1998 DirectX 6: IHV independent + Multitexturing
• 1999 DirectX 7: Hardware Texturing&Lighting + Cube Maps
• 2000 DirectX 8: Programmable shaders + Tessellation
• 2002 DirectX 9: More complex shaders
• 2006 DirectX 10: Unified shader Model
• 2009 DirectX 11: Compute
![Page 4: DX12 & Vulkan Dawn of a New Generation of Graphics APIsdeveloper.amd.com/...Stephan_DirectX12_And_Vulkan.pdf · DX12 & Vulkan Dawn of a New Generation of Graphics APIs Stephan Hodes](https://reader030.vdocuments.mx/reader030/viewer/2022040307/5ecb76890746fe023043a7eb/html5/thumbnails/4.jpg)
0
1000
2000
3000
4000
5000
6000
7000
8000
9000
10000
2006200720082009201020112012201320142015
GPU (GFLOPS)
CPU (10 MIPS singleCore)
GPU performance increasing faster than single core CPU performance
![Page 5: DX12 & Vulkan Dawn of a New Generation of Graphics APIsdeveloper.amd.com/...Stephan_DirectX12_And_Vulkan.pdf · DX12 & Vulkan Dawn of a New Generation of Graphics APIs Stephan Hodes](https://reader030.vdocuments.mx/reader030/viewer/2022040307/5ecb76890746fe023043a7eb/html5/thumbnails/5.jpg)
• Allow multi-threaded command buffer recording • Reduce workload of runtime/driver
• Reduce runtime validation • Move work to init/load time (e.g. Pipeline setup) • More explicit control over the hardware • Reduce convenience functions
How to get GPU bound • Optimize API usage (e.g. state caching & sorting)
• Batch, Batch, Batch!!!
• ~10k draw calls max
New APIs
![Page 6: DX12 & Vulkan Dawn of a New Generation of Graphics APIsdeveloper.amd.com/...Stephan_DirectX12_And_Vulkan.pdf · DX12 & Vulkan Dawn of a New Generation of Graphics APIs Stephan Hodes](https://reader030.vdocuments.mx/reader030/viewer/2022040307/5ecb76890746fe023043a7eb/html5/thumbnails/6.jpg)
Convenience function: Resource renaming
Examples: • Backbuffer • Dynamic vertex buffer • Dynamic constant buffer • Descriptor sets • Command buffer
Frame N Frame N+1
Frame N
Frame N+1
Frame N
CPU: GPU: Res Lifetime:
Frame N+1
Track usage by End-Of-Frame-Fence • Fences are expensive • Use less than 10 fences per frame Best practice for constant buffers: • Use system memory (DX12: UPLOAD) • Keep it mapped
![Page 7: DX12 & Vulkan Dawn of a New Generation of Graphics APIsdeveloper.amd.com/...Stephan_DirectX12_And_Vulkan.pdf · DX12 & Vulkan Dawn of a New Generation of Graphics APIs Stephan Hodes](https://reader030.vdocuments.mx/reader030/viewer/2022040307/5ecb76890746fe023043a7eb/html5/thumbnails/7.jpg)
Adopted by several developers & titles
• Developers are willing do the additional work
• Significant performance improvements in games
• Good ISVs don‘t need runtime validation
Only available on AMD GCN hardware Needed standardization
2013: AMD Mantle „Mantle is not for everyone“
![Page 8: DX12 & Vulkan Dawn of a New Generation of Graphics APIsdeveloper.amd.com/...Stephan_DirectX12_And_Vulkan.pdf · DX12 & Vulkan Dawn of a New Generation of Graphics APIs Stephan Hodes](https://reader030.vdocuments.mx/reader030/viewer/2022040307/5ecb76890746fe023043a7eb/html5/thumbnails/8.jpg)
• It‘s a „just the right level API“
• Support different HW configurations
• Discreet GPU vs. Integrated
• Shaders & command buffer are HW specific
• Support different HW generations
• Think about future hardware
• On PC, your title is never alone
2013: AMD Mantle „Mantle is not a low level API “
![Page 9: DX12 & Vulkan Dawn of a New Generation of Graphics APIsdeveloper.amd.com/...Stephan_DirectX12_And_Vulkan.pdf · DX12 & Vulkan Dawn of a New Generation of Graphics APIs Stephan Hodes](https://reader030.vdocuments.mx/reader030/viewer/2022040307/5ecb76890746fe023043a7eb/html5/thumbnails/9.jpg)
Next Generation API features DirectX12 & Vulkan share the Mantle philosophy:
• Minimize overhead
• Minimize runtime validation
• Allow multithreaded command buffer recording
• Provide low level memory management
• Support multiple asynchronous queues
• Provide explicit access to multiple devices
![Page 10: DX12 & Vulkan Dawn of a New Generation of Graphics APIsdeveloper.amd.com/...Stephan_DirectX12_And_Vulkan.pdf · DX12 & Vulkan Dawn of a New Generation of Graphics APIs Stephan Hodes](https://reader030.vdocuments.mx/reader030/viewer/2022040307/5ecb76890746fe023043a7eb/html5/thumbnails/10.jpg)
The big question: „How much performance will I gain from porting my code to new APIs?“
No magic involved!
Depends on the current bottlenecks
Depends a lot on engine design
• Need to utilize new possibilities
• It might „just work“ (esp. if heavily CPU limited)
• Might need redesign of engine (and asset pipeline)
![Page 11: DX12 & Vulkan Dawn of a New Generation of Graphics APIsdeveloper.amd.com/...Stephan_DirectX12_And_Vulkan.pdf · DX12 & Vulkan Dawn of a New Generation of Graphics APIs Stephan Hodes](https://reader030.vdocuments.mx/reader030/viewer/2022040307/5ecb76890746fe023043a7eb/html5/thumbnails/11.jpg)
Particle Update
Post Processing
Transparent Object
Rendering
Game Engine 1.0 (Designed around API commands)
DirectX 11 Runtime (A lot of validation)
DirectX 11 Driver (A lot of optimization)
Hardware
AO GI
Lighting And
Shading
Shadowmaps
Gbuffer
![Page 12: DX12 & Vulkan Dawn of a New Generation of Graphics APIsdeveloper.amd.com/...Stephan_DirectX12_And_Vulkan.pdf · DX12 & Vulkan Dawn of a New Generation of Graphics APIs Stephan Hodes](https://reader030.vdocuments.mx/reader030/viewer/2022040307/5ecb76890746fe023043a7eb/html5/thumbnails/12.jpg)
Particle Update
Post Processing
Game Engine 1.0 (Designed around API commands)
DirectX 11 Runtime (A lot of validation)
DirectX 11 Driver (A lot of optimization)
Hardware
AO GI
Direct access
DX12 Runtime DX12 Driver
API Abstraction Layer
Shadowmaps
Gbuffer
Lighting And
Shading
Transparent Object
Rendering
![Page 13: DX12 & Vulkan Dawn of a New Generation of Graphics APIsdeveloper.amd.com/...Stephan_DirectX12_And_Vulkan.pdf · DX12 & Vulkan Dawn of a New Generation of Graphics APIs Stephan Hodes](https://reader030.vdocuments.mx/reader030/viewer/2022040307/5ecb76890746fe023043a7eb/html5/thumbnails/13.jpg)
Particle Update
Game Engine 1.0
DirectX 11 Runtime (A lot of validation)
DirectX 11 Driver (A lot of convenience)
Hardware
AO GI
DX12 Runtime
DX12 Driver
Game Engine 2.0
Direct access
Direct access
DirectX 11 Runtime (A lot of validation)
DirectX 11 Driver
Shadowmaps
Gbuffer
Lighting And
Shading
Post Processing
Transparent Object
Rendering
![Page 14: DX12 & Vulkan Dawn of a New Generation of Graphics APIsdeveloper.amd.com/...Stephan_DirectX12_And_Vulkan.pdf · DX12 & Vulkan Dawn of a New Generation of Graphics APIs Stephan Hodes](https://reader030.vdocuments.mx/reader030/viewer/2022040307/5ecb76890746fe023043a7eb/html5/thumbnails/14.jpg)
Think Parallel! Keep the GPU busy
![Page 15: DX12 & Vulkan Dawn of a New Generation of Graphics APIsdeveloper.amd.com/...Stephan_DirectX12_And_Vulkan.pdf · DX12 & Vulkan Dawn of a New Generation of Graphics APIs Stephan Hodes](https://reader030.vdocuments.mx/reader030/viewer/2022040307/5ecb76890746fe023043a7eb/html5/thumbnails/15.jpg)
CPU side multithreading
• Multi threaded command buffer building
• Submission to queue is not thread safe
• Split frame into macro render jobs
• Offload shader compilation from main thread
• Batch command buffer submission
• Don‘t stall during submit/present
![Page 16: DX12 & Vulkan Dawn of a New Generation of Graphics APIsdeveloper.amd.com/...Stephan_DirectX12_And_Vulkan.pdf · DX12 & Vulkan Dawn of a New Generation of Graphics APIs Stephan Hodes](https://reader030.vdocuments.mx/reader030/viewer/2022040307/5ecb76890746fe023043a7eb/html5/thumbnails/16.jpg)
Radeon Fury X Radeon Fury
Compute Units 64 56
Core 1050 Mhz 1000 Mhz
Memory size 4 GB 4 GB
Memory BW 512 GB/s 512 GB/s
ALU 8.6 TFlops 7.17 TFlops
64 CU x 4 SIMD per CU x 10 Wavefronts per SIMD x 64 Threads per Wavefront ______________________ Up to 163840 threads
Batch, Batch, Batch!!!
GPU side multithreading
![Page 17: DX12 & Vulkan Dawn of a New Generation of Graphics APIsdeveloper.amd.com/...Stephan_DirectX12_And_Vulkan.pdf · DX12 & Vulkan Dawn of a New Generation of Graphics APIs Stephan Hodes](https://reader030.vdocuments.mx/reader030/viewer/2022040307/5ecb76890746fe023043a7eb/html5/thumbnails/17.jpg)
IA
VS
Rasterizer
PS
Output
GPU: Single graphics queue
Multiple commands can execute in parallel • Pipeline (usually) must maintain pixel order • Load balancing is the main problem
Culling
Draw N+1
Draw N+1
Draw N+1
Draw N+1
Draw N+1
Draw N+1
Draw N
Draw N
Draw N
Draw N
Draw N
Draw N
Draw N+2
Draw N+2
Draw N+2
Draw N+2
N+2 …
N+2 …
Time Query
![Page 18: DX12 & Vulkan Dawn of a New Generation of Graphics APIsdeveloper.amd.com/...Stephan_DirectX12_And_Vulkan.pdf · DX12 & Vulkan Dawn of a New Generation of Graphics APIs Stephan Hodes](https://reader030.vdocuments.mx/reader030/viewer/2022040307/5ecb76890746fe023043a7eb/html5/thumbnails/18.jpg)
• Indicate RaW/WaW Hazards • Switch resource state between RO/RW/WO
• Decompress DepthStencil/RTs • May cause a stall or cache flush
• Batch them! • Split Barriers may help in the future
• Always execute them on the last queue that wrote the resource
Most common cause for bugs!
Explicit Barriers & Transitions
![Page 19: DX12 & Vulkan Dawn of a New Generation of Graphics APIsdeveloper.amd.com/...Stephan_DirectX12_And_Vulkan.pdf · DX12 & Vulkan Dawn of a New Generation of Graphics APIs Stephan Hodes](https://reader030.vdocuments.mx/reader030/viewer/2022040307/5ecb76890746fe023043a7eb/html5/thumbnails/19.jpg)
IA
VS
Rasterizer
PS
Output
GPU: Barriers
• Hard to detect Barriers in DX11 • Explicit in DX12
Culling
Draw N
Draw N
Draw N
Draw N
Draw N
Draw N
Barrie
r
Draw N+2
Draw N+2
Draw N+2
Draw N+2
Draw N+2
Draw N+2
Time Query
Draw N+1
Draw N+1
Draw N+1
Draw N+1
Draw N+1
Draw N+1
Barrie
r
![Page 20: DX12 & Vulkan Dawn of a New Generation of Graphics APIsdeveloper.amd.com/...Stephan_DirectX12_And_Vulkan.pdf · DX12 & Vulkan Dawn of a New Generation of Graphics APIs Stephan Hodes](https://reader030.vdocuments.mx/reader030/viewer/2022040307/5ecb76890746fe023043a7eb/html5/thumbnails/20.jpg)
IA
VS
Rasterizer
PS
Output
GPU: Barriers
• Batch them! • [DX12] In the future split barriers may help
Culling
Draw N
Draw N
Draw N
Draw N
Draw N
Draw N
Time Query
Draw N+2
Draw N+2
Draw N+2
Draw N+2
Draw N+2
Draw N+2
Double
Barrie
r
Draw N+1
Draw N+1
Draw N+1
Draw N+1
Draw N+1
Draw N+1
![Page 21: DX12 & Vulkan Dawn of a New Generation of Graphics APIsdeveloper.amd.com/...Stephan_DirectX12_And_Vulkan.pdf · DX12 & Vulkan Dawn of a New Generation of Graphics APIs Stephan Hodes](https://reader030.vdocuments.mx/reader030/viewer/2022040307/5ecb76890746fe023043a7eb/html5/thumbnails/21.jpg)
IA
VS
Rasterizer
PS
Output
GPU underutilization
Culling can cause bubbles of inactivity. Fetch latency is a common cause for underutilization
Culling
Time Query
Draw N
Draw N
![Page 22: DX12 & Vulkan Dawn of a New Generation of Graphics APIsdeveloper.amd.com/...Stephan_DirectX12_And_Vulkan.pdf · DX12 & Vulkan Dawn of a New Generation of Graphics APIs Stephan Hodes](https://reader030.vdocuments.mx/reader030/viewer/2022040307/5ecb76890746fe023043a7eb/html5/thumbnails/22.jpg)
Graphics
Compute
Copy
Multiple Queues
• Let driver know about independent workloads
• Each queue type a superset • Multiple queues per type • Specify type at record time • Parallel execution
• Sync using fences • Shared GPU resources
![Page 23: DX12 & Vulkan Dawn of a New Generation of Graphics APIsdeveloper.amd.com/...Stephan_DirectX12_And_Vulkan.pdf · DX12 & Vulkan Dawn of a New Generation of Graphics APIs Stephan Hodes](https://reader030.vdocuments.mx/reader030/viewer/2022040307/5ecb76890746fe023043a7eb/html5/thumbnails/23.jpg)
Multiple queues allow to specify tasks to execute in parallel Schedule different bottlenecks together to improve efficiency
Asynchronous Compute Bus dominated Shader throughput Geometry dominated
Shadow mapping ROP heavy workloads G buffer operations DMA operations - Texture upload - Heap defrag
Deferred lighting Postprocessing effects Most compute tasks - Texture compression - Physics - Simulations
Rendering highly detailed models
![Page 24: DX12 & Vulkan Dawn of a New Generation of Graphics APIsdeveloper.amd.com/...Stephan_DirectX12_And_Vulkan.pdf · DX12 & Vulkan Dawn of a New Generation of Graphics APIs Stephan Hodes](https://reader030.vdocuments.mx/reader030/viewer/2022040307/5ecb76890746fe023043a7eb/html5/thumbnails/24.jpg)
DirectX 11 only supports one device • CF/SLI support essentially a driver hack • Increases latency
Explicit MGPU allows
• Split Frame Rendering • Master/Slave configurations • Split frame rendering • 3D/VR rendering using 2 dGPUs
Explicit MGPU
![Page 25: DX12 & Vulkan Dawn of a New Generation of Graphics APIsdeveloper.amd.com/...Stephan_DirectX12_And_Vulkan.pdf · DX12 & Vulkan Dawn of a New Generation of Graphics APIs Stephan Hodes](https://reader030.vdocuments.mx/reader030/viewer/2022040307/5ecb76890746fe023043a7eb/html5/thumbnails/25.jpg)
Take Control! Explicit Memory Managagement
![Page 26: DX12 & Vulkan Dawn of a New Generation of Graphics APIsdeveloper.amd.com/...Stephan_DirectX12_And_Vulkan.pdf · DX12 & Vulkan Dawn of a New Generation of Graphics APIs Stephan Hodes](https://reader030.vdocuments.mx/reader030/viewer/2022040307/5ecb76890746fe023043a7eb/html5/thumbnails/26.jpg)
Explicit Memory Management
• Control over heaps and residency
• Abstraction for different architectures
• VMM still exists
• Use Evict/MakeResident to page out unused resources
• Avoid oversubscribing resident memory!
![Page 27: DX12 & Vulkan Dawn of a New Generation of Graphics APIsdeveloper.amd.com/...Stephan_DirectX12_And_Vulkan.pdf · DX12 & Vulkan Dawn of a New Generation of Graphics APIs Stephan Hodes](https://reader030.vdocuments.mx/reader030/viewer/2022040307/5ecb76890746fe023043a7eb/html5/thumbnails/27.jpg)
DEFAULT UPLOAD READBACK
Memory Pool
Local (dGPU) System(iGPU)
System System
CPU Properties
No CPU access Write Combine Write Back
Usage Frequent GPU Read/Write Max GPU Bandwidth
CPU Write Once, GPU Read Once Max CPU Write Bandwidth
GPU Write Once, CPU Read Max CPU Read Bandwidth
![Page 28: DX12 & Vulkan Dawn of a New Generation of Graphics APIsdeveloper.amd.com/...Stephan_DirectX12_And_Vulkan.pdf · DX12 & Vulkan Dawn of a New Generation of Graphics APIs Stephan Hodes](https://reader030.vdocuments.mx/reader030/viewer/2022040307/5ecb76890746fe023043a7eb/html5/thumbnails/28.jpg)
Explicit Memory Management Rendertargets & UAVs • Create in DEFAULT
Textures • Write to UPLOAD • Use copy queue to copy to DEFAULT
• Copy swizzles: required on iGPU!
Buffers (CB/VB/IB) • Placement dependent on usage:
• Write once/Read once => UPLOAD • Write once/Read many => Copy to DEFAULT
![Page 29: DX12 & Vulkan Dawn of a New Generation of Graphics APIsdeveloper.amd.com/...Stephan_DirectX12_And_Vulkan.pdf · DX12 & Vulkan Dawn of a New Generation of Graphics APIs Stephan Hodes](https://reader030.vdocuments.mx/reader030/viewer/2022040307/5ecb76890746fe023043a7eb/html5/thumbnails/29.jpg)
Direct3D 12 Resource Creation APIs
Physical Pages
Physical Pages
GPU VA
Resource Heap
Texture3D Buffer
Physical Pages
GPU VA
Resource Heap
Texture2D
Committed Placed Reserved
![Page 30: DX12 & Vulkan Dawn of a New Generation of Graphics APIsdeveloper.amd.com/...Stephan_DirectX12_And_Vulkan.pdf · DX12 & Vulkan Dawn of a New Generation of Graphics APIs Stephan Hodes](https://reader030.vdocuments.mx/reader030/viewer/2022040307/5ecb76890746fe023043a7eb/html5/thumbnails/30.jpg)
Don‘t over-allocate committed memory • Share L1 with windows and other processes
• Don‘t allocate more than 80% • Reduce memory footprint
• Use placed resources to reduce overhead • Use reserved resources as PRT
Allocate most important resources first Group resources used together in same heap • Use MakeResident/Evict
Explicit Memory Management
![Page 31: DX12 & Vulkan Dawn of a New Generation of Graphics APIsdeveloper.amd.com/...Stephan_DirectX12_And_Vulkan.pdf · DX12 & Vulkan Dawn of a New Generation of Graphics APIs Stephan Hodes](https://reader030.vdocuments.mx/reader030/viewer/2022040307/5ecb76890746fe023043a7eb/html5/thumbnails/31.jpg)
Avoid Redundancy!
Organize your pipelines
![Page 32: DX12 & Vulkan Dawn of a New Generation of Graphics APIsdeveloper.amd.com/...Stephan_DirectX12_And_Vulkan.pdf · DX12 & Vulkan Dawn of a New Generation of Graphics APIs Stephan Hodes](https://reader030.vdocuments.mx/reader030/viewer/2022040307/5ecb76890746fe023043a7eb/html5/thumbnails/32.jpg)
Full pipeline optimization
● Simplifies optimization
Additional information at startup
● Shaders
● Raster states
● Static constants
Build a pipeline cache
● No pre-warming
Most engines not designed for monolithic pipelines
IA
Pipeline
RS
DB CB
PS
GS
VS
DS
HS
State
State RT RT
IB
Res Res Res Res Res Res Res Res
Res Res Res Res Res Res Res Res
Res Res Res Res Res Res Res Res
RT DS
State
Descriptor
Set
Descriptor
Set
Descriptor
Set
Root
State
PipelineStateObjects
![Page 33: DX12 & Vulkan Dawn of a New Generation of Graphics APIsdeveloper.amd.com/...Stephan_DirectX12_And_Vulkan.pdf · DX12 & Vulkan Dawn of a New Generation of Graphics APIs Stephan Hodes](https://reader030.vdocuments.mx/reader030/viewer/2022040307/5ecb76890746fe023043a7eb/html5/thumbnails/33.jpg)
Old APIs: • Single resource binding • A lot of work for the driver to track, validate and
manage resource bindings • Data management scripting language style
New APIs: • Group resources in descriptor sets • Pipelines contain „pointers“
• Data management C/C++ style
Descriptor Sets
![Page 34: DX12 & Vulkan Dawn of a New Generation of Graphics APIsdeveloper.amd.com/...Stephan_DirectX12_And_Vulkan.pdf · DX12 & Vulkan Dawn of a New Generation of Graphics APIs Stephan Hodes](https://reader030.vdocuments.mx/reader030/viewer/2022040307/5ecb76890746fe023043a7eb/html5/thumbnails/34.jpg)
Table driven Shared across all shader stages Two-level table
– Root Signature describes a top-level layout • Pointers to descriptor tables • Direct pointers to constant buffers • Inline constants
Changing which table is pointed to is cheap – It’s just writing a pointer – no synchronisation cost
Changing contents of table is harder – Can’t change table in flight on the
hardware – No automatic renaming
Table Pointer
Root Signature
Root Constant
Buffer View
32-bit constant
Table pointer Table
pointer
CB view
CB view
SR view
UA view
Descriptor Table
SR view SR view
SR view
SR view
Descriptor Table
Table pointer
Resource Binding
![Page 35: DX12 & Vulkan Dawn of a New Generation of Graphics APIsdeveloper.amd.com/...Stephan_DirectX12_And_Vulkan.pdf · DX12 & Vulkan Dawn of a New Generation of Graphics APIs Stephan Hodes](https://reader030.vdocuments.mx/reader030/viewer/2022040307/5ecb76890746fe023043a7eb/html5/thumbnails/35.jpg)
PIPELINE_STATE_DESC
Pipeline
PS
VS
DS
HS
Root
Descriptor
Table Pointer
Root Constant
Buffer View
32-bit constant
Table pointer
SR view
SR view
SR view
CB view
CB view
SR view
UA view
CB0
CB1
CB0
CB0
SR0
CB1
CB0
SR0
SR1
UA0
![Page 36: DX12 & Vulkan Dawn of a New Generation of Graphics APIsdeveloper.amd.com/...Stephan_DirectX12_And_Vulkan.pdf · DX12 & Vulkan Dawn of a New Generation of Graphics APIs Stephan Hodes](https://reader030.vdocuments.mx/reader030/viewer/2022040307/5ecb76890746fe023043a7eb/html5/thumbnails/36.jpg)
Use Shader and Pipeline cache • Avoid duplication
Sort draw calls by PSO used • Sort by Tessellation/GS enabled/disabled
Keep Root Descriptor small • Group DescriptorSets by update pattern
Sort Root entries by frequency of update • Most frequently changed entries first
PSO: Best Practices
![Page 37: DX12 & Vulkan Dawn of a New Generation of Graphics APIsdeveloper.amd.com/...Stephan_DirectX12_And_Vulkan.pdf · DX12 & Vulkan Dawn of a New Generation of Graphics APIs Stephan Hodes](https://reader030.vdocuments.mx/reader030/viewer/2022040307/5ecb76890746fe023043a7eb/html5/thumbnails/37.jpg)
Top 5 Performance Advice
#5. Avoid allocation/release at runtime #4. Don‘t oversubscribe! Manage your Memory efficiently #3. Batch, Batch, Batch! Group Barriers, group command buffer submissions #2. Think Parallel! On CPU as well as GPU #1. Old optimization recommendations still apply