Vulkan Subpasses. or The Frame Buffer is Lava. Andrew Garrard Samsung R&D Institute UK. UK Khronos Chapter meet, May 2016

Similar documents
Vulkan Multipass mobile deferred done right

Moving to Vulkan: How to make your 3D graphics more explicit

Achieving High-performance Graphics on Mobile With the Vulkan API

Vulkan on Mobile. Daniele Di Donato, ARM GDC 2016

Vulkan: Architecture positive How Vulkan maps to PowerVR GPUs Kevin sun Lead Developer Support Engineer, APAC PowerVR Graphics.

Bringing AAA graphics to mobile platforms. Niklas Smedberg Senior Engine Programmer, Epic Games

Profiling and Debugging Games on Mobile Platforms

Vulkan on Android: Gotchas and best practices

Vulkan API 杨瑜, 资深工程师

Mali Developer Resources. Kevin Ho ARM Taiwan FAE

LPGPU Workshop on Power-Efficient GPU and Many-core Computing (PEGPUM 2014)

Vulkan: Scaling to Multiple Threads. Kevin sun Lead Developer Support Engineer, APAC PowerVR Graphics

Copyright Khronos Group Page 1. Vulkan Overview. June 2015

Deferred Rendering Due: Wednesday November 15 at 10pm

Working with Metal Overview

PowerVR Performance Recommendations The Golden Rules. October 2015

Keeping your GPU fed without getting bitten

Keeping your GPU fed without getting bitten

PowerVR Hardware. Architecture Overview for Developers

Achieving Console Quality Games on Mobile

Bifrost - The GPU architecture for next five billion

EECS 487: Interactive Computer Graphics

GUERRILLA DEVELOP CONFERENCE JULY 07 BRIGHTON

The Bifrost GPU architecture and the ARM Mali-G71 GPU

Optimizing and Profiling Unity Games for Mobile Platforms. Angelo Theodorou Senior Software Engineer, MPG Gamelab 2014, 25 th -27 th June

Parallelizing Graphics Pipeline Execution (+ Basics of Characterizing a Rendering Workload)

Mobile HW and Bandwidth

Moving Mobile Graphics: Mobile Graphics 101 Andrew Garrard, Samsung R&D Institute UK SIGGRAPH. All Rights Reserved

Mali Demos: Behind the Pixels. Stacy Smith

Real-Time Rendering (Echtzeitgraphik) Michael Wimmer

PowerVR Performance Recommendations. The Golden Rules

Breaking Down Barriers: An Intro to GPU Synchronization. Matt Pettineo Lead Engine Programmer Ready At Dawn Studios

Course Recap + 3D Graphics on Mobile GPUs

Vulkan (including Vulkan Fast Paths)

Render-To-Texture Caching. D. Sim Dietrich Jr.

Parallelizing Graphics Pipeline Execution (+ Basics of Characterizing a Rendering Workload)

Vulkan: Mark My DWORDS

Shaders. Slide credit to Prof. Zwicker

ASYNCHRONOUS SHADERS WHITE PAPER 0

Lecture 9: Deferred Shading. Visual Computing Systems CMU , Fall 2013

Next-Generation Graphics on Larrabee. Tim Foley Intel Corp

The Graphics Pipeline

PowerVR Performance Recommendations. The Golden Rules

RSX Best Practices. Mark Cerny, Cerny Games David Simpson, Naughty Dog Jon Olick, Naughty Dog

Parallel Programming on Larrabee. Tim Foley Intel Corp

PowerVR Series5. Architecture Guide for Developers

Copyright Khronos Group Page 1

The Application Stage. The Game Loop, Resource Management and Renderer Design

Enhancing Traditional Rasterization Graphics with Ray Tracing. March 2015

LOD and Occlusion Christian Miller CS Fall 2011

UI, Graphics & EFL. Carsten Haitzler Principal Engineer Samsung Electronics Korea Founder/Leader Enlightenment / EFL

Moving Mobile Graphics Advanced Real-time Shadowing. Marius Bjørge ARM

Applications of Explicit Early-Z Z Culling. Jason Mitchell ATI Research

Hello & welcome to this last part about many light rendering on mobile hardware, i.e. on devices like smart phones and tablets.

Order Matters in Resource Creation

Using SPIR-V in practice with SPIRV-Cross

Optimizing DirectX Graphics. Richard Huddy European Developer Relations Manager

ARM Mali Application Developer Best Practices

The Rasterization Pipeline

Adaptive Point Cloud Rendering

Sign up for crits! Announcments

Investigating real-time rendering techniques approaching realism using the Vulkan API

Rendering Structures Analyzing modern rendering on mobile

Ultimate Graphics Performance for DirectX 10 Hardware

Drawing Fast The Graphics Pipeline

Next Generation OpenGL Neil Trevett Khronos President NVIDIA VP Mobile Copyright Khronos Group Page 1

GeForce4. John Montrym Henry Moreton

Streaming Massive Environments From Zero to 200MPH

CMSC427 Advanced shading getting global illumination by local methods. Credit: slides Prof. Zwicker

15 Sharing Main Memory Segmentation and Paging

Low-Overhead Rendering with Direct3D. Evan Hart Principal Engineer - NVIDIA

Optimisation. CS7GV3 Real-time Rendering

Khronos Connects Software to Silicon

Driving Change. Vulkanising Mad Max

Real-Time Graphics Architecture

Ray Tracing. Computer Graphics CMU /15-662, Fall 2016

WebGL and GLSL Basics. CS559 Fall 2015 Lecture 10 October 6, 2015

Vulkan and Animation 3/13/ &height=285&playerId=

DEFERRED RENDERING STEFAN MÜLLER ARISONA, ETH ZURICH SMA/

Shadows for Many Lights sounds like it might mean something, but In fact it can mean very different things, that require very different solutions.

Pipeline Operations. CS 4620 Lecture Steve Marschner. Cornell CS4620 Spring 2018 Lecture 11

Mobile Performance Tools and GPU Performance Tuning. Lars M. Bishop, NVIDIA Handheld DevTech Jason Allen, NVIDIA Handheld DevTools

Com S 336 Final Project Ideas

Shadows in the graphics pipeline

Understanding M3G 2.0 and its Effect on Producing Exceptional 3D Java-Based Graphics. Sean Ellis Consultant Graphics Engineer ARM, Maidenhead

Graphics Performance Optimisation. John Spitzer Director of European Developer Technology

Rendering Grass with Instancing in DirectX* 10

WebGL (Web Graphics Library) is the new standard for 3D graphics on the Web, designed for rendering 2D graphics and interactive 3D graphics.

Lets assume each object has a defined colour. Hence our illumination model is looks unrealistic.

The Rasterization Pipeline

GLSL Applications: 2 of 2

Computergrafik. Matthias Zwicker. Herbst 2010

Pipeline Operations. CS 4620 Lecture 14

Scheduling Image Processing Pipelines

Game Development for

Overview. Technology Details. D/AVE NX Preliminary Product Brief

16 Sharing Main Memory Segmentation and Paging

Optimizing for DirectX Graphics. Richard Huddy European Developer Relations Manager

Enhancing Traditional Rasterization Graphics with Ray Tracing. October 2015

Real - Time Rendering. Graphics pipeline. Michal Červeňanský Juraj Starinský

Transcription:

Vulkan Subpasses or The Frame Buffer is Lava Andrew Garrard Samsung R&D Institute UK

Vulkan: Making use of the GPU more efficient Vulkan aims to reduce the overheads of keeping the GPU busy Vulkan subpasses Page 96

Vulkan: Making use of the GPU more efficient Vulkan aims to reduce the overheads of keeping the GPU busy - Efficient generation of work on multiple CPU cores Core 1 CmdBuf CmdBuf CmdBuf Core 2 CmdBuf CmdBuf CmdBuf Command buffer recording Core 3 CmdBuf CmdBuf CmdBuf Core 4 Submit Submit Submit Vulkan subpasses Page 97

Invoke Invoke Invoke Invoke Click to edit Master title style Vulkan: Making use of the GPU more efficient Vulkan aims to reduce the overheads of keeping the GPU busy - Efficient generation of work on multiple CPU cores - Reuse of command buffers to avoid CPU build time Record 2 ry command buffer Record primary command buffer 2 ry 2 ry 2 ry 2 ry Vulkan subpasses Page 98

Vulkan: Making use of the GPU more efficient Vulkan aims to reduce the overheads of keeping the GPU busy - Efficient generation of work on multiple CPU cores - Reuse of command buffers to avoid CPU build time vkqueuesubmit vkqueuesubmit vkqueuesubmit Record command buffer CmdBuf CmdBuf CmdBuf Record command buffer CmdBuf CmdBuf Record command buffer CmdBuf Vulkan subpasses Page 99

Vulkan: Making use of the GPU more efficient Vulkan aims to reduce the overheads of keeping the GPU busy - Efficient generation of work on multiple CPU cores - Reuse of command buffers to avoid CPU build time - Potentially more efficient memory management Heap 1 Heap 2 Pool 1 Pool 2 User-defined memory reuse Explicit state transitions Image 1 Image 2 Image 3 Cost invoked at defined points View 1 View 2 Vulkan subpasses Page 100

Vulkan: Making use of the GPU more efficient Vulkan aims to reduce the overheads of keeping the GPU busy - Efficient generation of work on multiple CPU cores - Reuse of command buffers to avoid CPU build time - Potentially more efficient memory management - Avoiding unpredictable shader compilation Compile to SPIR-V (slow) Offline Record command buffer (slow-ish) 2 ry thread Submit command buffer (fast) Submitting thread Vulkan subpasses Page 101

Vulkan: Making use of the GPU more efficient Vulkan aims to reduce the overheads of keeping the GPU busy - Efficient generation of work on multiple CPU cores - Reuse of command buffers to avoid CPU build time - Potentially more efficient memory management - Avoiding unpredictable shader compilation Mostly, the message has been that if you re entirely limited by shader performance or bandwidth, Vulkan can t help you (there is no magic wand) Vulkan subpasses Page 102

Vulkan: Making use of the GPU more efficient Actually, that s not entirely true... APIs like OpenGL were designed when the GPU looked very different (or was partly software) The way to design an efficient mobile GPU is not a perfect match for OpenGL -Think a CPU s command decode unit/microcode But the translation isn t always perfectly efficient Vulkan subpasses Page 103

Tiled GPUs Most (not all) mobile GPUs use tiling - It s all about the bandwidth (size and power limits) Scene description Binning pass Shading pass On-chip tile memory is much faster than the main frame buffer Vulkan subpasses Page 104

Not everything reaches memory Rendering requires lots of per-pixel data - Z, stencil - Full multisample resolution We usually only care about the final image - We can throw away Z and stencil - We only need a downsampled (A)RGB - Don t need to load anything from a previous frame Z Stencil RGB RGB Vulkan subpasses Page 105

Sometimes we want the results of rendering Output from one rendering job can be used by the next Z buffer for shadow maps Rendering for environment maps HDR bloom These can have low resolution and may not take much bandwidth Vulkan subpasses Page 106

Sometimes you do need framebuffer resolution Deferred shading Z Light weight render storing persurface content at each fragment Diffuse/ɑ Specular/ Specularity Render full-screen quad and perform fragment shading Normal Vulkan subpasses Page 107

Sometimes you do need framebuffer resolution Deferred shading Deferred lighting Diffuse Light weight render for lighting input Z Specularity Render full-screen quad and calculate lighting output Specular Re-render scene with full fragment shading, using lighting inputs Normal Vulkan subpasses Page 108

Sometimes you do need framebuffer resolution Deferred shading Deferred lighting Order-independent transparency Vulkan subpasses Page 109

Sometimes you do need framebuffer resolution Deferred shading Deferred lighting Order-independent transparency HDR tone mapping Vulkan subpasses Page 110

Rendering outputs separately Rendering to each surface separately is bad Geometry has a per-bin cost - Sometimes the cost is low, but it s there - Vertices in multiple bins get processed repeatedly - Rendering the scene repeatedly is painful Even immediate-mode renderers hate this! Vulkan subpasses Page 111

Multiple render targets don t help much Using MRTs means multiple buffers in one pass Single scene traversal This is a typical approach for immediate-mode renderers (e.g. desktop/console systems) Reduces the geometry load (only process once) Still writing a lot of data off-chip - Tilers are all about trying not to do this! - Increases use of shader resources may slow some h/w Vulkan subpasses Page 112

Pixel Local Storage (OpenGL ES extension) Tiler-friendly (at last) - Store only the current tile values - Read them later in the tile processing But not portable! - Not practical on immediate renderers - Debugging on desktop won t work! - Capabilities vary between devices - Driver doesn t have visibility - Data access is restricted Vulkan subpasses Page 113

Vulkan: Explicit dependencies Vulkan has direct support for this type of rendering work load By telling the driver how you intend to use the rendered results, the driver can produce a better mapping to the hardware - The extra information is a little verbose, but simpler than handling all possible cases yourself! Vulkan subpasses Page 114

Vulkan render passes and subpasses A render pass groups dependent operations - All images written in a render pass are the same size Geometry Lighting Fragment Single render pass Vulkan subpasses Page 115

Vulkan render passes and subpasses A render pass groups dependent operations - All images written in a render pass are the same size A render pass contains a number of subpasses - Subpasses describe access to attachments - Dependencies can be defined between subpasses Sub pass 1: Geo Sub pass 2: Light Sub pass 3: Frag Vulkan subpasses Page 116

Vulkan render passes and subpasses A render pass groups dependent operations - All images written in a render pass are the same size A render pass contains a number of subpasses - Subpasses describe access to attachments - Dependencies can be defined between subpasses Each render pass instance has to be contained within a single command buffer (unit of work) - Some tilers schedule by render pass Vulkan subpasses Page 117

Defining a render pass VkRenderPassCreateInfo - VkAttachmentDescription *pattachments - Just the descriptions, not the actual attachments! - VkSubpassDescription *psubpasses - VkSubpassDependency *pdependencies vkcreaterenderpass(device, createinfo,.. pass) - Gives you a VkRenderPass object - This is a template that you can use repeatedly - When we use it, we get a render pass instance Vulkan subpasses Page 118

Describing attachments for a render pass VkAttachmentDescription - format/samples - loadop - VK_ATTACHMENT_LOAD_OP_LOAD to preserve - VK_ATTACHMENT_LOAD_OP_DONT_CARE for overwrites - VK_ATTACHMENT_LOAD_OP_CLEAR uniform clears (e.g. Z) - storeop - VK_ATTACHMENT_STORE_OP_STORE to output it - VK_ATTACHMENT_STORE_OP_DONT_CARE may discard after the render pass Vulkan subpasses Page 119

Defining a subpass VkSubpassDescription - pinputattachments - Which of the render pass s attachments this subpass reads - pcolorattachments - Which ones this subpass writes (1:1 - optional) - presolveattachments - Which ones this subpass writes (resolving multisampling) - ppreserveattachments - Which attachments need to persist across this subpass - Subpasses are numbered and ordered Vulkan subpasses Page 120

Defining subpass dependencies VkSubpassDependency - srcsubpass - dstsubpass - Where the dependency applies (can be external) - srcstagemask - dststagemask - Execution dependencies between subpasses - srcaccessmask - dstaccessmask - Memory dependencies between subpasses Vulkan subpasses Page 121

Vulkan framebuffers A VkFramebuffer defines the set of attachments used by a render pass instance VkFramebufferCreateInfo - renderpass - pattachments - These are actual VkImageViews this time! - width - height - layers Vulkan subpasses Page 122

Starting to use a render pass vkcmdbeginrenderpass/vkcmdendrenderpass - Starts a render pass instance in a command buffer - You start in the first (maybe only) subpass implicitly - prenderpassbegin contains configuration VkRenderPassBeginInfo - VkRenderPass renderpass - The render pass template - VkFrameBuffer framebuffer - Specifies targets for rendering Vulkan subpasses Page 123

Putting it all together VkAttachmentDescription VkSubpassDescription VkAttachmentDescription VkSubpassDescription VkAttachmentDescription VkSubpassDescription VkAttachmentDescription VkRenderPassCreateInfo VkImageView VkImageView vkcreaterenderpass VkImageView VkImageView VkRenderPass VkFramebufferCreateInfo VkSubpassDependency VkSubpassDependency Key: Objects are dark grey Functions are light grey Arrows between objects are references of some sort Arrows into functions are arguments Arrows out of functions are constructed objects vkcreateframebuffer VkRenderPassBeginInfo VkCommandBuffer VkFramebuffer vkcmdbeginrenderpass Vulkan subpasses Page 124

Simple rendering vkallocatecommandbuffers (VK_COMMAND_BUFFER_LEVEL_PRIMARY) vkbegincommandbuffer vkcmdbeginrenderpass vkcmddraw (etc.) Command buffer Render pass Draw Draw Draw Draw vkcmdendrenderpass vkendcommandbuffer vkqueuesubmit Queue Vulkan subpasses Page 125

Multiple render passes You can have more than one render pass in a command buffer - Yes, Leeloo multipass, we know Render pass Command buffer Render pass Draw Draw Draw Draw - So a command buffer can render to many outputs - E.g. you could render to the same shadow and environment maps every frame by reusing the same command buffer - But it must be the same outputs each time you submit - A specific render pass instance has fixed vkframebuffers! Vulkan subpasses Page 126

Two limitations Different render passes independent outputs - Rendering goes off-chip, there s no PLS-style on-chip reuse of pixel contents You can t reuse the same command buffer with a different render target - E.g. for double buffering or streamed content - We ll come back to this Still sometimes all you need, though! Vulkan subpasses Page 127

New subpass Click to edit Master title style More than one subpass vkcmdnextsubpass moves to the next subpass - Implicitly start in the first subpass of the render pass - Dependencies say what you re accessing from previous subpasses - Same render pass so accesses stay on chip (if possible) Draw Draw Command buffer Render Pass Draw Draw Draw Vulkan subpasses Page 128

New subpass Click to edit Master title style Using multiple subpasses vkcmdbegincommandbuffer vkcmdbeginrenderpass vkcmddraw (etc.) Command buffer Render Pass vkcmdnextsubpass Draw Draw Draw Draw Draw vkcmddraw (etc.) vkcmdendrenderpass vkcmdendcommandbuffer Vulkan subpasses Page 129

Accessing subpass output in fragment shaders In SPIR-V, previous subpass content is read with OpImageRead - Coordinates are sample-relative, and need to be 0 - OpTypeImage Dim = SubpassData In GLSL (using GL_KHR_vulkan_glsl): - Types for subpass access are [ui]subpassinput(ms) - layout(input_attachment_index = i, ) uniform subpassinput t; to select a subpass - subpassload() to access the pixel C.f. pixel_localext layouts in EXT_shader_pixel_local_storage when using OpenGL ES Vulkan subpasses Page 130

Avoiding unnecessary allocations If we re using subpasses, we likely don t need the images in memory - A tiler may be able to process the subpasses entirely on-chip, without needing an allocation - Still need to do the allocation in case the tiler can t handle the request/on an immediate-mode renderer! - Won t commit resources unless it actually needs to vkcreateimage flags for lazy committal - VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT Vulkan subpasses Page 131

Vulkan subpasses: advantages The driver knows what you re doing - It can reorder subpasses - It can change the tile size EXT_shader_pixel_local_storage is actually more explicit than Vulkan here (and may still be offered as an extension) - It can balance resources between subpasses - It will fall back to memory for you if it has to - Under the hood, mechanism likely matches PLS Works on immediate mode renderers - Probably MRTs and normal external writes - Desktop debugging tools will work! Vulkan subpasses Page 132

There s more: Secondary command buffers Vulkan has two levels of command buffers - Determined by vkallocatecommandbuffers VK_COMMAND_BUFFER_LEVEL_PRIMARY - Main command buffer, as we ve seen so far VK_COMMAND_BUFFER_LEVEL_SECONDARY - Command buffer that can be invoked from the primary command buffer Vulkan subpasses Page 133

Use of secondary command buffers vkbegincommandbuffer - Takes a VkCommandBufferBeginInfo VkCommandBufferBeginInfo - flags include: - VK_COMMANDBUFFER_USAGE_RENDER_PASS_CONTINUE_BIT - pinheritanceinfo VkCommandBufferInheritanceInfo - renderpass and subpass - framebuffer (can be null, more efficient if known) Vulkan subpasses Page 134

Secondary command buffers and passes Why do we need the continue bit? - Render passes (and subpasses) can t start in a secondary command buffer - Non-render pass stuff can be in a secondary buffer - You can run a compute shader outside a render pass - Otherwise, the render pass is inherited from the primary command buffer Vulkan subpasses Page 135

Secondary command buffers and passes Why specify render pass/framebuffer? - Command buffers needs to know this when recording - Some operations depends on render pass info (e.g. format) - Framebuffer is optional (can just inherit) - If you can specify the actual framebuffer, the command buffer can be less generic and therefore may be faster Vulkan subpasses Page 136

New subpass Click to edit Master title style Invoking the secondary command buffer You can t submit a secondary command buffer You have to invoke it from a primary command buffer with vkcmdexecutecommands Secondary buffer Secondary buffer Secondary buffer Draw Draw Draw Draw Draw Draw Primary command buffer Render pass Render pass vkcec vkcec vkcec Vulkan subpasses Page 137

New subpass Click to edit Master title style Secondary command buffer code vkcmdbegincommandbuffer vkcmdbeginrenderpass Primary command buffer Render pass vkcmdexecutecommands vkcmdnextsubpass vkcec Secondary buffer vkcec vkcmdexecutecommands Draw Draw vkcmdendrenderpass Secondary buffer vkcmdendcommandbuffer Draw Draw Vulkan subpasses Page 138

Performance and parallelism Creating a command buffer can be slow - Lots of state to check, may require compilation - This happens in GLES as well, you just don t control when! So create secondary command buffers on different threads - Lots of 4- and 8-core CPUs in cell phones these days Invoking the secondary buffer is lightweight - Primary command buffer generation is quick(er) Vulkan subpasses Page 139

What does this have to do with passes? Remember: - Render passes exist within (primary) command buffers - The command buffer sets up the GPU for the render pass - On-chip rendering happens within a render pass - If you want content to persist between render passes, it ll reach memory (or at least cache), not stay in the tile buffer - You can t use multiple threads to build work for a primary command buffer in parallel - You can build many secondary command buffers at once Vulkan subpasses Page 140

You can t mix and match Within a subpass you can either (but not both): - Execute rendering commands directly in the primary command buffer - VK_SUBPASS_CONTENTS_INLINE Command buffer Render pass Draw Draw Draw Draw Vulkan subpasses Page 141

You can t mix and match Within a subpass you can either (but not both): - Execute rendering commands directly in the primary command buffer - VK_SUBPASS_CONTENTS_INLINE - Invoke secondary command buffers from the primary command buffer with vkcmdexecutecommands - VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS Primary command buffer Secondary buffer Render pass Secondary buffer Draw Draw vkcec vkcec Draw Draw Vulkan subpasses Page 142

You can t mix and match Within a subpass you can either (but not both): - Execute rendering commands directly in the primary command buffer - VK_SUBPASS_CONTENTS_INLINE - Invoke secondary command buffers from the primary command buffer with vkcmdexecutecommands - VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS - Chosen by vkcmdbeginrenderpass/vkcmdnextsubpass - Remember: you can only do these in a primary command buffer! Vulkan subpasses Page 143

Command buffer reuse: even faster Primary command buffers work with a fixed render pass and framebuffer - You can reuse a primary command buffer, but it will always access the same images often good enough - May have to wait for execution to end; can t be one-time What if you want to access different targets? - E.g. a cycle of framebuffers or streamed content? - You can round-robin several command buffers - Or you can use secondary command buffers! Vulkan subpasses Page 144

Compatible render passes and frame buffers The render pass a secondary command buffer uses needn t be the one it was recorded with - It can be compatible - Same formats, number of sub-passes, etc. You can have primary command buffers with different outputs, and they can re-use secondary command buffers - The primary has to be different to record new targets - The primary may have to patch secondary addresses Vulkan subpasses Page 145

Almost-free use with changing framebuffers No cost for secondary command buffers Primary command buffer is simple and quick Primary command buffer Render pass Target image 1 CEC CEC Target image 2 Primary command buffer Render pass Secondary command buffer CEC CEC Secondary command buffer Vulkan subpasses Page 146

So I can do bloom/dof/rain/motion blur! No! Remember, you can only access the current pixel Tilers process one tile at a time - If you could try to access a different pixel, the tile containing it may not be there - You have to write out the whole image to do this - Slow, painful, last resort! - Yes, we can think of possible solutions too - Give it time (lots of different hardware out there)? Vulkan subpasses Page 147

Coming out of the shadow(buffer)s Render passes are integral to the Vulkan API - Reflects modern, high-quality rendering approaches The driver has more information to work with - It can do more for you - Remember this if you complain it s verbose! Hardware resource management is hard - Expect drivers to get better over time Another tool for better mobile gaming Vulkan subpasses Page 148

Thank you Over to you Andrew Garrard a.garrard at samsung.com Vulkan subpasses Page 149