Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ]...

71
Mobilizing Call of Duty: Bringing a Blockbuster Title to Android Reboot Develop Red 2019 Benjamin Mitchell GameDev Engineer, Samsung Electronics

Transcript of Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ]...

Page 1: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Mobilizing Call of Duty:Bringing a Blockbuster Title to AndroidReboot Develop Red 2019

Benjamin MitchellGameDev Engineer, Samsung Electronics

Page 2: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV
Page 3: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Galaxy GameDev : since 2016

Page 4: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV
Page 5: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Bringing Call of Duty to Mobile

• Call of Duty Mobile

• Adaptive Performance

• Vulkan Optimizations

Page 6: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV
Page 7: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Call of Duty Mobile

Page 8: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Call of Duty Mobile

Page 9: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Call of Duty Mobile

Page 10: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Call of Duty Mobile

Page 11: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Call of Duty Mobile

Page 12: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV
Page 13: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Mobile Limitation

FPS

Core Freq

Temperature After Throttling• Temperature– No active cooling

– Performance Throttling

• Power– Limitation of Battery

• Performance– Hardware Fragmentation

• Optimization is out of the Developer’s control.

Page 14: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Adaptive Performance

Galaxy Game SDK

14

• Gather Data- Device Performance- Thermal Trends

• Adapt Performance- Adjust Quality Settings- Modify performance requirements

Page 15: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Power Manager

Power Budget Control

Default Core Frequencies

With Frequency Cap

Page 16: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Power Manager

Frame Time Tracking

1.0 ms

Bottleneck Detection

FrameTime

CPUTime

GPUTime

Target FPS

CPU

GPUGPUTime

CPUTime

FrameTime

Bottleneck Detection

FrameTime

CPUTime

GPUTime

Target FPS

CPU

GPU

1.0 ms

1.0 ms

Page 17: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Default Power ManagerAuto Perf Control

Temp Trend

Target FPS

U/D CPU

U/D GPU

Value

U/D CPU

U/D GPU

Update Interval

CPU Level

CPU Level CPU Level

GPU Level

GPU Level GPU Level

TempTrend

Bottleneck Detection

FrameTime

CPU Time

GPUTime

Target FPS

CPU

GPU

Bottleneck

Mode Allow U/D CPU

Allow U/D GPU

GPUTime

CPUTime

FrameTime

Page 18: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV
Page 19: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Adaptive Performance Quality Scaling

• Quality Scale Factors

• Shadow/Rendering Distance

• Texture LoD

• Animation LoD

• Target Frame Rate

Page 20: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Power Manager + Dynamic Quality Scaling

30

15

200 10

Time [m]

Page 21: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Adaptive Performance is now available

Page 22: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Adaptive Performance is now available

22

Page 23: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Adaptive Performance in Call of Duty Mobile

Page 24: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Adaptive Performance in Call of Duty Mobile

• Quality Scale Factors

• Shadow Distance

• Foliage LoD

• Animation LoD

• Target Frame Rate

• Power Management

• Bottleneck Detection

• CPU/GPU Power Budget Control

Page 25: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Adaptive Performance

Feature Parameter Scaling Impact

Shadow Distance 80 ~ 50 CPU 0~10% offloading

Foliage LOD 1 ~ 0.8 GPU 0~5% offloading

Animation LOD 0 ~ 2 CPU 0~3% offloadingGPU 0~1% offloading

Target Frame Rate 57 ~ 60 CPU 0~5% offloadingGPU 0~5% offloading

Shadow Distance(80 ~ 50)

Foliage LOD(1.0 ~ 0.8)

Page 26: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Adaptive Performance

• Adaptive Performance

vs Normal Condition

Feature ADP Normal

FPS 58 54Stability (%) 100 100

CPU (%) 11.37 11.69

GPU (%) 80.08 87.85

FPS

ADP-FPS Normal-FPS

Page 27: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Adaptive Performance

• Can save power and

manage thermal better

Feature ADP Normal

FPS 58 54Stability (%) 100 100

CPU (%) 11.37 11.69

GPU (%) 80.08 87.85

Temperature

Normal ADP 60 160 260 360 460

Max Freq

ADP-CPU ADP-GPU

Normal-CPU Normal-GPU

Page 28: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV
Page 29: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

General Vulkan Optimizations

• Pipeline Barriers

• Ensure most optimal stage masks

• Batch them!• Load/Store Ops

• You don’t always have to care!

• LoadOpLoad and StoreOpStore• Cache Stuff

• PSOs

• Descriptor Sets

Page 30: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

General Vulkan Optimizations

• Pipeline Barriers

• Ensure most optimal stage masks

• Batch them!• Load/Store Ops

• You don’t always have to care!

• LoadOpLoad and StoreOpStore• Cache Stuff

• PSOs

• Descriptor Sets

Page 31: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

General Vulkan Optimizations• Pipeline Barriers

— Ensure optimal use of stage masks

— This is NOT optimal

Vertex Shader

Fragment Shader

Vertex Shader

...

Fragment Shader

Vertex Shader

...

Fragment Shader

...

SRC VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT

DST VK_PIPELINE_STAGE_VERTEX_SHADER_BIT

Page 32: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

General Vulkan Optimizations• Pipeline Barriers

— Ensure optimal use of stage masks

— This IS optimal

Vertex Shader

Fragment Shader

Vertex Shader

...

Fragment Shader

Vertex Shader

...

Fragment Shader

...

SRC VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT

DST VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT

Page 33: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

General Vulkan Optimizations• Pipeline Barriers

— Batch them!

vkCmdPipelineBarrier(…, 1, &barrier);

vkCmdPipelineBarrier(…, 1, &barrier);

vkCmdPipelineBarrier(…, 1, &barrier);

vkCmdPipelineBarrier(…, 1, &barrier);

vkCmdPipelineBarrier(…, 1, &barrier);

vkCmdPipelineBarrier(…, 5, &barriers.getData());

Page 34: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

General Vulkan Optimizations

• Pipeline Barriers

• Ensure most optimal stage masks

• Batch them!• Load/Store Ops

• You don’t always have to care!

• LoadOpLoad and StoreOpStore• Cache Stuff

• PSOs

• Descriptor Sets

Page 35: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

General Vulkan Optimizations• Load/Store Ops

— You don’t always have to care!

colorAttachment.loadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE

colorAttachment.storeOp = VK_ATTACHMENT_STORE_OP_DONT_CARE

colorAttachment.loadOp = VK_ATTACHMENT_LOAD_OP_LOAD

colorAttachment.storeOp = VK_ATTACHMENT_STORE_OP_STORE

Page 36: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

General Vulkan Optimizations

• Pipeline Barriers

• Ensure most optimal stage masks

• Batch them!• Load/Store Ops

• You don’t always have to care!

• LoadOpLoad and StoreOpStore• Cache Stuff

• Use VKPipelineCache

• Descriptor Sets

Page 37: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

General Vulkan Optimizations• Cache Stuff

— Use VkPipelineCache

— Descriptor Sets

vkCreateGraphicsPipelines(device, VK_NULL_HANDLE, …);

1st Run

vkCreateGraphicsPipelines(device, VK_NULL_HANDLE, …);

2nd Run

vkCreateGraphicsPipelines(device, pipelineCache, …);

2nd Run

vkCreateGraphicsPipelines(device, VK_NULL_HANDLE, …);

1st Run

vkCreatePipelineCache(device, &createInfo, NULL, &cache);

Page 38: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

General Vulkan Optimizations• Cache Stuff

— Use VkPipelineCache

— Descriptor Sets

vkUpdateDescriptorSets(device, …);

1st Frame

vkUpdateDescriptorSets(device, …);

All remaining Frames

descriptorSet = someDescriptorMap.find(resourceKey);

All remaining Frames

vkUpdateDescriptorSets(device, …);

1st Frame

someDescriptorMap.emplace(resourceKey, &descriptorSet);

Page 39: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

General Vulkan Optimizations

• Pipeline Barriers

• Ensure most optimal stage masks

• Batch them!• Load/Store Ops

• You don’t always have to care!

• LoadOpLoad and StoreOpStore• Cache Stuff

• PSOs

• Descriptor Sets

Page 40: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

General Vulkan Optimizations

• WaitForFence

• Try to avoid it!

• Use a pool of Command Buffers• RenderPasses

• Minimize switching

• Combine passes!• Threads

• Put stuff on other threads.

Page 41: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

General Vulkan Optimizations

• WaitForFence

• Try to avoid it!

• Use a pool of Command Buffers• RenderPasses

• Minimize switching

• Combine passes!• Threads

• Put stuff on other threads.

Page 42: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

General Vulkan Optimizations• WaitForFences

— Try to avoid it!

— Make use of pools of command buffers

vkWaitForFences(device, 1, &fence, true, timeout);

…if(!fencePool.empty())

fence = fencePool.pop_back();

Else

fence = vkCreateFence(…, &fenceToUse);

result = vkGetFenceStatus(device, fence);

if(result == VK_STATUS_NOT_READY)

fencePool.push_back(fence);

Page 43: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

General Vulkan Optimizations

• WaitForFence

• Try to avoid it!

• Use a pool of Command Buffers• RenderPasses

• Minimize switching

• Combine passes!• Threads

• Put stuff on other threads.

Page 44: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

General Vulkan Optimizations• RenderPasses

— Minimize switching

vkCmdBeginRenderPass(commandBuffer, &beginInfo, contents);

vkCmdEndRenderPass(commandBuffer);

vkCmdBeginRenderPass(commandBuffer, &beginInfo, contents);

DrawObjects2();

DrawObjects1();

vkCmdEndRenderPass(commandBuffer);

vkCmdBeginRenderPass(commandBuffer, &beginInfo, contents);

DrawObjects2();

DrawObjects1();

vkCmdEndRenderPass(commandBuffer);

Page 45: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

General Vulkan Optimizations

• WaitForFence

• Try to avoid it!

• Use a pool of Command Buffers• RenderPasses

• Minimize switching

• Combine passes!• Threads

• Put stuff on other threads.

Page 46: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

General Vulkan Optimizations• Threads

Task 1 Task 2 Task 3 Task 1

Task 1 Task 2

Task 3

Original

Multi-Threaded

Thread 1

Thread 2

Thread 1

Task 3

Task 1 Task 2

Page 47: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

General Vulkan Optimizations

• WaitForFence

• Try to avoid it!

• Use a pool of Command Buffers• RenderPasses

• Minimize switching

• Combine passes!• Threads

• Put stuff on other threads.

Page 48: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Vulkan Optimizations in Call of Duty Mobile

• Single Scratch Buffer

• Low Priority Destroy Thread

• Descriptor Set Batching/Caching

• RenderPass Load/Store

• Threaded Present

• VB, IB Binding Optimization

• Direct Buffer Access

Page 49: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

• Single Scratch Buffer

• Low Priority Destroy Thread

• Descriptor Set Batching/Caching

• RenderPass Load/Store

• Threaded Present

• VB, IB Binding Optimization

• Direct Buffer Access

Vulkan Optimizations

Page 50: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Vulkan Optimizations

— Ring buffer for all needs

— Usually recreated only during first load

Allocate Allocate Allocate

offset offset offset

Allocate

Free Memory

Allocate

Not enough memoryLarger buffer

• Single Scratch Buffer

Page 51: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Vulkan Optimizations

• Single Scratch Buffer

• Low Priority Destroy Thread

• Descriptor Set Batching/Caching

• RenderPass Load/Store

• Threaded Present

• VB, IB Binding Optimization

• Direct Buffer Access

Page 52: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Vulkan Optimizations

Signal

DestroyThread

• Low Priority Destroy Thread

Render thread Destroy thread

Delayed Destroy

Delayed Destroy

Delayed Destroy

Garbage Collect

vkDestroy***

vkDestroy***

vkDestroy***

Wait

Page 53: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Vulkan Optimizations

• Single Scratch Buffer

• Low Priority Destroy Thread

• Descriptor Set Batching/Caching

• RenderPass Load/Store

• Threaded Present

• VB, IB Binding Optimization

• Direct Buffer Access

Page 54: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Vulkan Optimizations• Descriptor Set Batching/Caching

vkUpdateDescriptorSets

vkUpdateDescriptorSets

vkUpdateDescriptorSets

vkUpdateDescriptorSets

vkUpdateDescriptorSets

vkUpdateDescriptorSets

— Combine separate Update calls into one

Page 55: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Vulkan Optimizations• Descriptor Set Batching/Caching

— Cache and reuse sets with same resources

AllocateDS+

UpdateDS

BindDS+

Draw…

AllocateDS+

UpdateDS

BindDS+

Draw…

AllocateDS+

UpdateDS

BindDS+

Draw… …

AllocateDS+

UpdateDS

BindDS+

Draw…

BindDS+

Draw……

BindDS+

Draw…

Allocate and update Descriptor Sets before each draw call

Reuse Descriptors Sets from cache

Page 56: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Vulkan Optimizations• Descriptor Set Batching/Caching

— Cache and reuse sets with same resources

BindDS+

Draw…

BindDS+

Draw…

BindDS+

Draw… …

AllocateDS+

UpdateDS

BindDS+

Draw…

BindDS+

Draw……

BindDS+

Draw…

AllocateDS+

UpdateDS

AllocateDS+

UpdateDS

AllocateDS+

UpdateDS

Allocate and update Descriptor Sets before each draw call

Reuse Descriptors Sets from cache

Page 57: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Vulkan Optimizations• Descriptor Set Batching/Caching

— Cache and reuse sets with same resources

AllocateDS+

UpdateDS

BindDS+

Draw…

Allocate and update Descriptor Sets before each draw call

Reuse Descriptors Sets from cache

AllocateDS+

UpdateDS

BindDS+

Draw…

AllocateDS+

UpdateDS

BindDS+

Draw… …

BindDS+

Draw…

BindDS+

Draw……

BindDS+

Draw…

AllocateDS+

UpdateDS

Page 58: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Vulkan Optimizations

• Single Scratch Buffer

• Low Priority Destroy Thread

• Descriptor Set Batching/Caching

• RenderPass Load/Store

• Threaded Present

• VB, IB Binding Optimization

• Direct Buffer Access

Page 59: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Vulkan Optimizations• RenderPass Load/Store

When render target is being fully redrawn there is no need to load previous data.

Page 60: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Vulkan Optimizations

• Single Scratch Buffer

• Low Priority Destroy Thread

• Descriptor Set Batching/Caching

• RenderPass Load/Store

• Threaded Present

• VB, IB Binding Optimization

• Direct Buffer Access

Page 61: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Vulkan Optimizations• Threaded Present

Prepare Render Present Prepare

Prepare Render Prepare

Present

Original

Threaded present

Render thread

Present thread

Render thread

Page 62: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Vulkan Optimizations

• Single Scratch Buffer

• Low Priority Destroy Thread

• Descriptor Set Batching/Caching

• RenderPass Load/Store

• Threaded Present

• VB, IB Binding Optimization

• Direct Buffer Access

Page 63: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Vulkan Optimizations• VB, IB Binding Optimization

As buffers are same there is no need to bind them every draw call.

Page 64: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Vulkan Optimizations

• Single Scratch Buffer

• Low Priority Destroy Thread

• Descriptor Set Batching/Caching

• RenderPass Load/Store

• Threaded Present

• VB, IB Binding Optimization

• Direct Buffer Access

Page 65: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Vulkan Optimizations

Upload(vertex/index/uniform data)

Main thread

Copy

Device bufferRender thread

Memory

Memory

Copy

Upload(vertex/index/uniform data)

Main thread

Copy

Device buffer

Render thread

• Direct Buffer Access

Original

Direct access

Page 66: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV
Page 67: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Top 3 Takeaways

1: Use Adaptive Performance!

[email protected]

Page 68: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Top 3 Takeaways

1: Use Adaptive Performance!2: Check your barriers!

[email protected]

Page 69: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Top 3 Takeaways

1: Use Adaptive Performance!2: Check your barriers!3: Check your load/store ops!

[email protected]

Page 70: Mobilizing Call Of Duty - The Khronos Group Inc...' v o s µ o l v K ] u ] Ì ] } v Z v W ² D ] v ] u ] Ì Á ] Z ] v P YN&PG%HJLQ5HQGHU3DVV FRPPDQG%XIIHU EHJLQ,QIR FRQWHQWV YN&PG(QG5HQGHU3DVV

Top 3 Takeaways

1: Use Adaptive Performance!2: Check your barriers!3: Check your load/store ops!3.5: Thread stuff!

[email protected]