SlideShare una empresa de Scribd logo
1 de 37
Mark Kilgard, January 19, 2016
Migrating from OpenGL to Vulkan
2
About the Speaker
Mark Kilgard
Principal Graphics Software Engineer in Austin, Texas
Long-time OpenGL driver developer at NVIDIA
Author and implementer of many OpenGL extensions
Collaborated on the development of Cg
First commercial GPU shading language
Recently working on GPU-accelerated vector graphics
(Yes, and wrote GLUT in ages past)
Who is this guy?
3
Motivation for Talk
What kinds of apps benefit from Vulkan?
How to prepare your OpenGL code base to transition to Vulkan
How various common OpenGL usage scenarios are re-thought in Vulkan
Re-thinking your application structure for Vulkan
Coming from OpenGL, Preparing for Vulkan
4
Analogy
Different Valid Approaches
5
Analogy
Fixed-function OpenGL
Pre-assembled toy car
fun out of the box,
not much room for customization
6
Analogy
Modern AZDO OpenGL with Programmable Shaders
LEGO Kit
you build it yourself,
comes with plenty of useful, pre-shaped pieces
AZDO = Approaching Zero Driver Overhead
7
Analogy
Vulkan
Pine Wood Derby Kit
you build it yourself to race from raw materials
power tools used to assemble, adult supervision highly recommended
8
Analogy
Different Valid Approaches
Fixed-function OpenGL
Modern AZDO OpenGL with
Programmable Shaders
Vulkan
9
Beneficial Vulkan Scenarios
Is your graphics work
CPU bound?
Can your graphics
work creation be
parallelized?
start
yes
Vulkan
friendly
yes
Has Parallelizable CPU-bound Graphics Work
10
Beneficial Vulkan Scenarios
Your graphics
platform is fixed
You’ll
do whatever
it takes to squeeze
out max
perf.
start
yes
Vulkan
friendly
yes
Maximizing a Graphics Platform Budget
11
Beneficial Vulkan Scenarios
You put
a premium on
avoiding
hitches
You can
manage your
graphics resource
allocations
start
yes
Vulkan
friendly
yes
Managing Predictable Performance, Free of Hitching
12
Unlikely to Benefit
1. Need for compatibility to pre-Vulkan platforms
2. Heavily GPU-bound application
3. Heavily CPU-bound application due to non-graphics work
4. Single-threaded application, unlikely to change
5. App can target middle-ware engine, avoiding direct 3D graphics API dependencies
• Consider using an engine targeting Vulkan, instead of dealing with Vulkan yourself
Scenarios to Reconsider Coding to Vulkan
13
First Steps Migrating to Vulkan
Eliminate fixed-function
Source all geometry from vertex buffer objects (VBOs) with vertex arrays
Use all programmable GLSL shaders with layout() qualifiers
Consider using samplers
Do all rendering into framebuffer objects (FBOs)
Stay within the non-deprecated subset (e.g. no GL_QUADS, for now…)
Think about better batching & classify all your render states
Avoid depending on OpenGL context state
All pretty sensible advice, even if you stick with OpenGL
Modernize Your OpenGL
14
Next Steps Migrating to Vulkan
Think about how your application would handle losing the GPU
Similar to ARB_robustness
Profile your application, understand what portions are CPU and GPU bound
Vulkan most benefits apps bottlenecked on graphics work creation and driver validation
Is that your app?
Adopt common features available in both OpenGL and Vulkan first in OpenGL
Proving out tessellation or multi-draw-indirect probably easier first in your stable
OpenGL code base
Again all pretty sensible advice, even if you stick with OpenGL
Modernize Your OpenGL
15
Thinking about Vulkan vs. OpenGL
OpenGL, largely understood in terms of
Its API, functions for commands and queries
And how that API interacts with the OpenGL
state machine
OpenGL has lots of implicit synchronization
Errors handled largely by ignoring command
OpenGL API manages various objects
But allocation of underlying device resources
largely handled by driver
+
OpenGL Has a Well-established Approach
Originally client-server
16
Thinking about Vulkan vs. OpenGL
Vulkan constructs and submits work for a
graphics device
Idealized graphics + compute device
Requires application to maintain valid Vulkan
usage for proper operation
Not expected to behave correctly in face of
errors, justified for performance
Instead of updating state machine, Vulkan is
about establishing working relationships
between objects
Pre-validates operation of actions
Vulkan Plays By Different Rules
Explicit API
Explicit memory management
Explicit synchronization
Explicit queuing of work
Explicit management of buffer state with
render passes
Not client-server, explicitly depends on
shared resources and memory
17
Truly Transitioning to Vulkan
Much more graphics resource responsibility for the application
You need to allocate from large device memory chunk
You become responsible for proper explicit synchronization
Fences, Barriers, Semaphores
Barriers are probably the hardest to appreciate
Everything has to be structured as pipeline state objects (PSOs)
Understand render passes
Think how parallel command buffer generation would operate
You become responsible for multi-threaded exclusion of your Vulkan objects
Vulkan Done Right Rethinks Entire Graphics Rendering
18
Common Graphics Tasks
Loading a mipmapped texture
Loading a vertex buffer object for rendering
Choosing a shader representation and loading shaders
Initiating compute work
Managing a memory sub-allocator
Thinking about render passes
Managing Predictable Performance, Free of Hitching
19
Loading a Texture
Well traveled path via OpenGL 3.0
glBindTexture(GL_TEXTURE_2D, texture_name);
glTexImage2D(GL_TEXTURE_2D, 0, GL_SRGB8, width, height,
/*border*/0, GL_UNSIGNED_BYTE, GL_RGBA, pixels);
glGenerateMipmap(GL_TEXTURE_2D);
Does more than you think it does
The OpenGL View
20
Logical Operations to Load a Texture
1. Create host driver objects corresponding to texture/sampler/image/view/layout
2. Copy call’s image to staging memory accessible to host+device
3. (OpenGL might do a format conversion and pixel transfer)
4. Allocates device memory for texture image for texturing
5. Copy image from host+device memory to device memory for texturing
6. Allocate device resources for sampler
7. Generate mipmap levels
21
Various Vulkan Objects “inside” a Texture
No such thing as “VkTexture”
Instead
Texture state in Vulkan = VkDescriptorImageInfo
Combines: VkSampler + VkImageView + VkImageLayout
Sampling state + Image state + Current image layout
Texture binding in Vulkan = part of VkDescriptorSetLayoutBinding
Contained with VkDescriptorSetLayout
Building Up the OpenGL Texture Object from Vulkan Concepts
OpenGL textures are opaque,
so lacks an exposed image layout
22
Allocating Image Memory for Texture
VkImage
VkDevice
vkGetImageMemoryRequirements
VkMemoryRequirements
vkBindImageMemory
VkDeviceMemory
vkAllocateMemory
vkCreateImage
With VulkanNaïve approach!
vkAllocateMemory is expensive.
Demos may do this, but real apps
should sub-allocate from large
VkDeviceMemory allocations
See next slide…
23
Sub-allocating Image Memory for Texture
VkImage
VkDevice
vkGetImageMemoryRequirements
VkMemoryRequirements
vkBindImageMemory
VkDeviceMemory
vkAllocateMemory
vkCreateImage
One large device memory allocation, assigned to multiple images
Proper approach!
vkAllocateMemory makes a
large allocation with and then
sub-allocates enough
memory for the image
So who writes
the sub-allocator?
You do!
24
Binding Descriptor Sets for a Texture
VkDescriptorImageInfoVkSampler
VkImageView
VkImageLayout
VkDescriptorSetLayout
VkWriteDescriptorSet vkAllocateDescriptorSets
VkPipelineLayout
vkCmdBindDescriptorSets
VkCommandBuffer
vkCreateDescriptorSetLayout
vkCreatePipelineLayout
vkUpdateDescriptorSets
So Pipeline Sees Texture
25
Establishing Sampler Bindings for a Pipeline Object
VkDescriptorSetLayoutBinding for a sampler binding
vkCreateDescriptorSetLayout
VkDescriptorSetLayout
vkCreatePipelineLayout
VkPipelineLayout
vkCreateGraphicsPipelines
VkPipeline
vkCmdBindPipeline
Vulkan Pipelines Need to Know How They Will Bind Samplers
VkCommandBuffer
26
Base Level Specification + Mipmap Generation
VkCommandBuffer
vkCmdBlitImage
vkCmdPipelineBarrier
vkCmdBlitImage
for each upper mipmap level
vkCmdPipelineBarrier
Vulkan Command Buffer Orchestrates Blit + Downsamples
staging
image
texture
base
image
texture
base
image
level 1
mipmap
level i
mipmap
level i+1
mipmap
27
Binding to a Vertex Array Object (VAO) and
Rendering from Vertex Arrays
Well traveled path via OpenGL 3.0
glBindVertexArray(vertex_array_object);
glDrawElements(GL_TRIANGLES, count, GL_UNSIGNED_INT, indices);
Again, does more than you think it does
The OpenGL View
28
Allocating Buffer Memory for VBO
VkBuffer
VkDevice
vkGetBufferMemoryRequirements
VkMemoryRequirements
vkBindBufferMemory
VkDeviceMemory
vkAllocateMemory
VkCreateBuffer
With VulkanNaïve approach!
vkAllocateMemory is expensive.
Demos may do this, but real apps
should sub-allocate from large
VkDeviceMemory allocations
29
Binding Vertex State To A Pipeline
VkVertexInputBindingDescription
VkVertexInputAttributeDescription
VkPipelineVertexInputStateCreateInfo
VkGraphicsPipelineCreateInfo
VkGraphicsPipeline
vkCreateGraphicsPipelines
So Pipeline Sees Vertex Input State
VkPipelineShaderStageCreateInfo
VkPipelineInputAssemblyStateCreateInfo
VkPipelineViewportStateCreateInfo
VkPipelineRasterizationStateCreateInfo
VkPipelineMultisampleStateCreateInfo
VkPipelineDepthStencilStateCreateInfo
VkPipelineColorBlendStateCreateInfo
VkPipelineDynamicStateCreateInfo
30
Binding Vertex Buffer For Drawing
For the vertex input statevkCmdBindPipeline
Buffer Binding Is Performed With The Command Queue
vkCmdBindVertexBuffers For the vertex data
vkCmdBeginRenderPass
vkCmdBindDescriptorSets
vkCmdDrawIndexed
vkCmdEndRenderPass
Begin Drawing
Draw
End Drawing
31
Big Features, Ready for Vulkan
Compute shaders
Tessellation shaders
Geometry shaders
Sparse resources (textures and buffers)
In OpenGL 4.5 today
Vulkan has the same big features, just different API
Mostly the same GLSL can be used in either case
Prototype in OpenGL now, Enable in Vulkan next
32
Thinking about render passes
OpenGL just has commands to draw primitives
No explicit notion of a render pass in OpenGL API
Vulkan does have render passes, VkRenderPass
Includes notion of sub-passes
Designed to facilitate tiling architectures
Bounds the lifetime of intermediate framebuffer results
Allows iterating over subpasses (chunking) within a render pass on a per tile basis
In most cases, you won’t need to deal with subpasses
How do rendering operations affect the retained framebuffer?
33
Render Pass
Describes the list attachments the render pass involves
Each attachment can specify
How the attachment state is initialized (loaded, cleared, dont-care)
How the attach state is stored (store, or dont-care)
Don’t-care allows framebuffer intermediates to be discarded
E.g. depth buffer not needed after the render pass
How the layout of attachment could change
Sub-pass dependencies indicate involvement of attachments within a subpass
What does a Vulkan Render Pass Provide?
34
Render Passes
vkCmdBeginRenderPass
vkCmdEndRenderPass
vkCmdBeginRenderPass
vkCmdNextSubpass
vkCmdNextSubpass
vkCmdEndRenderPass
Monolithic or Could Have Sub-passes
Each subpass
has its own
description and
dependencies
Simple render pass,
no subpasses
Complex render pass,
with multiple subpasses
35
Vulkan Application Structure
Parallel Command Buffer Generation
Traditional single-threaded
OpenGL app structure
update scene
draw scene
single thread
Possible multi-threaded
Vulkan app structure
collect secondary
command buffers
distribute
update scene work
submit
command
buffer
build secondary
command buffer
work thread
build secondary
command buffer
work thread
build secondary
command buffer
work thread
build secondary
command buffer
work thread
36
Conclusions
Vulkan is a radical departure from OpenGL
Modernizing your OpenGL code base is definitely good for moving to Vulkan
But it will take more work than that!
Vulkan’s explicitness makes simple operations like a texture bind quite involved
Think about multi-threaded command buffer creation
Get Ready for Vulkan
Migrating from OpenGL to Vulkan

Más contenido relacionado

La actualidad más candente

OpenGL 4.4 - Scene Rendering Techniques
OpenGL 4.4 - Scene Rendering TechniquesOpenGL 4.4 - Scene Rendering Techniques
OpenGL 4.4 - Scene Rendering TechniquesNarann29
 
Secrets of CryENGINE 3 Graphics Technology
Secrets of CryENGINE 3 Graphics TechnologySecrets of CryENGINE 3 Graphics Technology
Secrets of CryENGINE 3 Graphics TechnologyTiago Sousa
 
Rendering Tech of Space Marine
Rendering Tech of Space MarineRendering Tech of Space Marine
Rendering Tech of Space MarinePope Kim
 
Graphics Gems from CryENGINE 3 (Siggraph 2013)
Graphics Gems from CryENGINE 3 (Siggraph 2013)Graphics Gems from CryENGINE 3 (Siggraph 2013)
Graphics Gems from CryENGINE 3 (Siggraph 2013)Tiago Sousa
 
Screen Space Reflections in The Surge
Screen Space Reflections in The SurgeScreen Space Reflections in The Surge
Screen Space Reflections in The SurgeMichele Giacalone
 
FrameGraph: Extensible Rendering Architecture in Frostbite
FrameGraph: Extensible Rendering Architecture in FrostbiteFrameGraph: Extensible Rendering Architecture in Frostbite
FrameGraph: Extensible Rendering Architecture in FrostbiteElectronic Arts / DICE
 
OpenGL NVIDIA Command-List: Approaching Zero Driver Overhead
OpenGL NVIDIA Command-List: Approaching Zero Driver OverheadOpenGL NVIDIA Command-List: Approaching Zero Driver Overhead
OpenGL NVIDIA Command-List: Approaching Zero Driver OverheadTristan Lorach
 
vkFX: Effect(ive) approach for Vulkan API
vkFX: Effect(ive) approach for Vulkan APIvkFX: Effect(ive) approach for Vulkan API
vkFX: Effect(ive) approach for Vulkan APITristan Lorach
 
Rendering Technologies from Crysis 3 (GDC 2013)
Rendering Technologies from Crysis 3 (GDC 2013)Rendering Technologies from Crysis 3 (GDC 2013)
Rendering Technologies from Crysis 3 (GDC 2013)Tiago Sousa
 
Getting started with Ray Tracing in Unity 2019.3 - Unite Copenhagen 2019
Getting started with Ray Tracing in Unity 2019.3 - Unite Copenhagen 2019Getting started with Ray Tracing in Unity 2019.3 - Unite Copenhagen 2019
Getting started with Ray Tracing in Unity 2019.3 - Unite Copenhagen 2019Unity Technologies
 
Khronos Munich 2018 - Halcyon and Vulkan
Khronos Munich 2018 - Halcyon and VulkanKhronos Munich 2018 - Halcyon and Vulkan
Khronos Munich 2018 - Halcyon and VulkanElectronic Arts / DICE
 
Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14
Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14
Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14AMD Developer Central
 
GS-4106 The AMD GCN Architecture - A Crash Course, by Layla Mah
GS-4106 The AMD GCN Architecture - A Crash Course, by Layla MahGS-4106 The AMD GCN Architecture - A Crash Course, by Layla Mah
GS-4106 The AMD GCN Architecture - A Crash Course, by Layla MahAMD Developer Central
 
Five Rendering Ideas from Battlefield 3 & Need For Speed: The Run
Five Rendering Ideas from Battlefield 3 & Need For Speed: The RunFive Rendering Ideas from Battlefield 3 & Need For Speed: The Run
Five Rendering Ideas from Battlefield 3 & Need For Speed: The RunElectronic Arts / DICE
 
Approaching zero driver overhead
Approaching zero driver overheadApproaching zero driver overhead
Approaching zero driver overheadCass Everitt
 
Lighting of Killzone: Shadow Fall
Lighting of Killzone: Shadow FallLighting of Killzone: Shadow Fall
Lighting of Killzone: Shadow FallGuerrilla
 
Physically Based Sky, Atmosphere and Cloud Rendering in Frostbite
Physically Based Sky, Atmosphere and Cloud Rendering in FrostbitePhysically Based Sky, Atmosphere and Cloud Rendering in Frostbite
Physically Based Sky, Atmosphere and Cloud Rendering in FrostbiteElectronic Arts / DICE
 

La actualidad más candente (20)

OpenGL 4.4 - Scene Rendering Techniques
OpenGL 4.4 - Scene Rendering TechniquesOpenGL 4.4 - Scene Rendering Techniques
OpenGL 4.4 - Scene Rendering Techniques
 
Secrets of CryENGINE 3 Graphics Technology
Secrets of CryENGINE 3 Graphics TechnologySecrets of CryENGINE 3 Graphics Technology
Secrets of CryENGINE 3 Graphics Technology
 
Rendering Tech of Space Marine
Rendering Tech of Space MarineRendering Tech of Space Marine
Rendering Tech of Space Marine
 
Graphics Gems from CryENGINE 3 (Siggraph 2013)
Graphics Gems from CryENGINE 3 (Siggraph 2013)Graphics Gems from CryENGINE 3 (Siggraph 2013)
Graphics Gems from CryENGINE 3 (Siggraph 2013)
 
Lighting the City of Glass
Lighting the City of GlassLighting the City of Glass
Lighting the City of Glass
 
Screen Space Reflections in The Surge
Screen Space Reflections in The SurgeScreen Space Reflections in The Surge
Screen Space Reflections in The Surge
 
FrameGraph: Extensible Rendering Architecture in Frostbite
FrameGraph: Extensible Rendering Architecture in FrostbiteFrameGraph: Extensible Rendering Architecture in Frostbite
FrameGraph: Extensible Rendering Architecture in Frostbite
 
Stochastic Screen-Space Reflections
Stochastic Screen-Space ReflectionsStochastic Screen-Space Reflections
Stochastic Screen-Space Reflections
 
OpenGL NVIDIA Command-List: Approaching Zero Driver Overhead
OpenGL NVIDIA Command-List: Approaching Zero Driver OverheadOpenGL NVIDIA Command-List: Approaching Zero Driver Overhead
OpenGL NVIDIA Command-List: Approaching Zero Driver Overhead
 
vkFX: Effect(ive) approach for Vulkan API
vkFX: Effect(ive) approach for Vulkan APIvkFX: Effect(ive) approach for Vulkan API
vkFX: Effect(ive) approach for Vulkan API
 
Lighting you up in Battlefield 3
Lighting you up in Battlefield 3Lighting you up in Battlefield 3
Lighting you up in Battlefield 3
 
Rendering Technologies from Crysis 3 (GDC 2013)
Rendering Technologies from Crysis 3 (GDC 2013)Rendering Technologies from Crysis 3 (GDC 2013)
Rendering Technologies from Crysis 3 (GDC 2013)
 
Getting started with Ray Tracing in Unity 2019.3 - Unite Copenhagen 2019
Getting started with Ray Tracing in Unity 2019.3 - Unite Copenhagen 2019Getting started with Ray Tracing in Unity 2019.3 - Unite Copenhagen 2019
Getting started with Ray Tracing in Unity 2019.3 - Unite Copenhagen 2019
 
Khronos Munich 2018 - Halcyon and Vulkan
Khronos Munich 2018 - Halcyon and VulkanKhronos Munich 2018 - Halcyon and Vulkan
Khronos Munich 2018 - Halcyon and Vulkan
 
Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14
Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14
Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14
 
GS-4106 The AMD GCN Architecture - A Crash Course, by Layla Mah
GS-4106 The AMD GCN Architecture - A Crash Course, by Layla MahGS-4106 The AMD GCN Architecture - A Crash Course, by Layla Mah
GS-4106 The AMD GCN Architecture - A Crash Course, by Layla Mah
 
Five Rendering Ideas from Battlefield 3 & Need For Speed: The Run
Five Rendering Ideas from Battlefield 3 & Need For Speed: The RunFive Rendering Ideas from Battlefield 3 & Need For Speed: The Run
Five Rendering Ideas from Battlefield 3 & Need For Speed: The Run
 
Approaching zero driver overhead
Approaching zero driver overheadApproaching zero driver overhead
Approaching zero driver overhead
 
Lighting of Killzone: Shadow Fall
Lighting of Killzone: Shadow FallLighting of Killzone: Shadow Fall
Lighting of Killzone: Shadow Fall
 
Physically Based Sky, Atmosphere and Cloud Rendering in Frostbite
Physically Based Sky, Atmosphere and Cloud Rendering in FrostbitePhysically Based Sky, Atmosphere and Cloud Rendering in Frostbite
Physically Based Sky, Atmosphere and Cloud Rendering in Frostbite
 

Destacado

NVIDIA OpenGL in 2016
NVIDIA OpenGL in 2016NVIDIA OpenGL in 2016
NVIDIA OpenGL in 2016Mark Kilgard
 
Modern OpenGL Usage: Using Vertex Buffer Objects Well
Modern OpenGL Usage: Using Vertex Buffer Objects Well Modern OpenGL Usage: Using Vertex Buffer Objects Well
Modern OpenGL Usage: Using Vertex Buffer Objects Well Mark Kilgard
 
EXT_window_rectangles
EXT_window_rectanglesEXT_window_rectangles
EXT_window_rectanglesMark Kilgard
 
GTC 2012: NVIDIA OpenGL in 2012
GTC 2012: NVIDIA OpenGL in 2012GTC 2012: NVIDIA OpenGL in 2012
GTC 2012: NVIDIA OpenGL in 2012Mark Kilgard
 
NV_path rendering Functional Improvements
NV_path rendering Functional ImprovementsNV_path rendering Functional Improvements
NV_path rendering Functional ImprovementsMark Kilgard
 
Advanced Scenegraph Rendering Pipeline
Advanced Scenegraph Rendering PipelineAdvanced Scenegraph Rendering Pipeline
Advanced Scenegraph Rendering PipelineNarann29
 
Killzone Shadow Fall: Threading the Entity Update on PS4
Killzone Shadow Fall: Threading the Entity Update on PS4Killzone Shadow Fall: Threading the Entity Update on PS4
Killzone Shadow Fall: Threading the Entity Update on PS4jrouwe
 
Understaing Android EGL
Understaing Android EGLUnderstaing Android EGL
Understaing Android EGLSuhan Lee
 
NVIDIA Investor's Day 2014 Presentation by Rob Csongor: Tomorrow's Car Today
NVIDIA Investor's Day 2014 Presentation by Rob Csongor: Tomorrow's Car TodayNVIDIA Investor's Day 2014 Presentation by Rob Csongor: Tomorrow's Car Today
NVIDIA Investor's Day 2014 Presentation by Rob Csongor: Tomorrow's Car TodayNVIDIA
 
Вулкани и земјотреси
Вулкани и земјотресиВулкани и земјотреси
Вулкани и земјотресиMomchilo Iliiev
 
Introduction to Direct 3D 12 by Ivan Nevraev
Introduction to Direct 3D 12 by Ivan NevraevIntroduction to Direct 3D 12 by Ivan Nevraev
Introduction to Direct 3D 12 by Ivan NevraevAMD Developer Central
 
вулкани и земјотреси
вулкани и земјотресивулкани и земјотреси
вулкани и земјотресиvalentinastanoevska
 
Woden 2: Developing a modern 3D graphics engine in Smalltalk
Woden 2: Developing a modern 3D graphics engine in SmalltalkWoden 2: Developing a modern 3D graphics engine in Smalltalk
Woden 2: Developing a modern 3D graphics engine in SmalltalkESUG
 
Pitfalls of Object Oriented Programming by SONY
Pitfalls of Object Oriented Programming by SONYPitfalls of Object Oriented Programming by SONY
Pitfalls of Object Oriented Programming by SONYAnaya Medias Swiss
 
Milestone Highway Construction
Milestone Highway ConstructionMilestone Highway Construction
Milestone Highway Constructioncoreycarr
 
Global Power Systems Pvt. Ltd., Nagpur, Generators Set & Controller
Global Power Systems Pvt. Ltd., Nagpur, Generators Set & ControllerGlobal Power Systems Pvt. Ltd., Nagpur, Generators Set & Controller
Global Power Systems Pvt. Ltd., Nagpur, Generators Set & ControllerIndiaMART InterMESH Limited
 

Destacado (18)

NVIDIA OpenGL in 2016
NVIDIA OpenGL in 2016NVIDIA OpenGL in 2016
NVIDIA OpenGL in 2016
 
Modern OpenGL Usage: Using Vertex Buffer Objects Well
Modern OpenGL Usage: Using Vertex Buffer Objects Well Modern OpenGL Usage: Using Vertex Buffer Objects Well
Modern OpenGL Usage: Using Vertex Buffer Objects Well
 
EXT_window_rectangles
EXT_window_rectanglesEXT_window_rectangles
EXT_window_rectangles
 
GTC 2012: NVIDIA OpenGL in 2012
GTC 2012: NVIDIA OpenGL in 2012GTC 2012: NVIDIA OpenGL in 2012
GTC 2012: NVIDIA OpenGL in 2012
 
Beyond porting
Beyond portingBeyond porting
Beyond porting
 
NV_path rendering Functional Improvements
NV_path rendering Functional ImprovementsNV_path rendering Functional Improvements
NV_path rendering Functional Improvements
 
Advanced Scenegraph Rendering Pipeline
Advanced Scenegraph Rendering PipelineAdvanced Scenegraph Rendering Pipeline
Advanced Scenegraph Rendering Pipeline
 
Killzone Shadow Fall: Threading the Entity Update on PS4
Killzone Shadow Fall: Threading the Entity Update on PS4Killzone Shadow Fall: Threading the Entity Update on PS4
Killzone Shadow Fall: Threading the Entity Update on PS4
 
OpenGL L06-Performance
OpenGL L06-PerformanceOpenGL L06-Performance
OpenGL L06-Performance
 
Understaing Android EGL
Understaing Android EGLUnderstaing Android EGL
Understaing Android EGL
 
NVIDIA Investor's Day 2014 Presentation by Rob Csongor: Tomorrow's Car Today
NVIDIA Investor's Day 2014 Presentation by Rob Csongor: Tomorrow's Car TodayNVIDIA Investor's Day 2014 Presentation by Rob Csongor: Tomorrow's Car Today
NVIDIA Investor's Day 2014 Presentation by Rob Csongor: Tomorrow's Car Today
 
Вулкани и земјотреси
Вулкани и земјотресиВулкани и земјотреси
Вулкани и земјотреси
 
Introduction to Direct 3D 12 by Ivan Nevraev
Introduction to Direct 3D 12 by Ivan NevraevIntroduction to Direct 3D 12 by Ivan Nevraev
Introduction to Direct 3D 12 by Ivan Nevraev
 
вулкани и земјотреси
вулкани и земјотресивулкани и земјотреси
вулкани и земјотреси
 
Woden 2: Developing a modern 3D graphics engine in Smalltalk
Woden 2: Developing a modern 3D graphics engine in SmalltalkWoden 2: Developing a modern 3D graphics engine in Smalltalk
Woden 2: Developing a modern 3D graphics engine in Smalltalk
 
Pitfalls of Object Oriented Programming by SONY
Pitfalls of Object Oriented Programming by SONYPitfalls of Object Oriented Programming by SONY
Pitfalls of Object Oriented Programming by SONY
 
Milestone Highway Construction
Milestone Highway ConstructionMilestone Highway Construction
Milestone Highway Construction
 
Global Power Systems Pvt. Ltd., Nagpur, Generators Set & Controller
Global Power Systems Pvt. Ltd., Nagpur, Generators Set & ControllerGlobal Power Systems Pvt. Ltd., Nagpur, Generators Set & Controller
Global Power Systems Pvt. Ltd., Nagpur, Generators Set & Controller
 

Similar a Migrating from OpenGL to Vulkan

Advanced Graphics Workshop - GFX2011
Advanced Graphics Workshop - GFX2011Advanced Graphics Workshop - GFX2011
Advanced Graphics Workshop - GFX2011Prabindh Sundareson
 
OpenGL Fixed Function to Shaders - Porting a fixed function application to “m...
OpenGL Fixed Function to Shaders - Porting a fixed function application to “m...OpenGL Fixed Function to Shaders - Porting a fixed function application to “m...
OpenGL Fixed Function to Shaders - Porting a fixed function application to “m...ICS
 
C++ on the Web: Run your big 3D game in the browser
C++ on the Web: Run your big 3D game in the browserC++ on the Web: Run your big 3D game in the browser
C++ on the Web: Run your big 3D game in the browserAndre Weissflog
 
Shader Programming With Unity
Shader Programming With UnityShader Programming With Unity
Shader Programming With UnityMindstorm Studios
 
mloc.js 2014 - JavaScript and the browser as a platform for game development
mloc.js 2014 - JavaScript and the browser as a platform for game developmentmloc.js 2014 - JavaScript and the browser as a platform for game development
mloc.js 2014 - JavaScript and the browser as a platform for game developmentDavid Galeano
 
CS 354 Programmable Shading
CS 354 Programmable ShadingCS 354 Programmable Shading
CS 354 Programmable ShadingMark Kilgard
 
An Introduction to Computer Science with Java .docx
An Introduction to  Computer Science with Java .docxAn Introduction to  Computer Science with Java .docx
An Introduction to Computer Science with Java .docxdaniahendric
 
High Fidelity Games: Real Examples, Best Practices ... | Oleksii Vasylenko
High Fidelity Games: Real Examples, Best Practices ... | Oleksii VasylenkoHigh Fidelity Games: Real Examples, Best Practices ... | Oleksii Vasylenko
High Fidelity Games: Real Examples, Best Practices ... | Oleksii VasylenkoJessica Tams
 
Minko - Flash Conference #5
Minko - Flash Conference #5Minko - Flash Conference #5
Minko - Flash Conference #5Minko3D
 
JIT Spraying Never Dies - Bypass CFG By Leveraging WARP Shader JIT Spraying.pdf
JIT Spraying Never Dies - Bypass CFG By Leveraging WARP Shader JIT Spraying.pdfJIT Spraying Never Dies - Bypass CFG By Leveraging WARP Shader JIT Spraying.pdf
JIT Spraying Never Dies - Bypass CFG By Leveraging WARP Shader JIT Spraying.pdfSamiraKids
 
Computer Graphics - Lecture 01 - 3D Programming I
Computer Graphics - Lecture 01 - 3D Programming IComputer Graphics - Lecture 01 - 3D Programming I
Computer Graphics - Lecture 01 - 3D Programming I💻 Anton Gerdelan
 
Introduction to Computing on GPU
Introduction to Computing on GPUIntroduction to Computing on GPU
Introduction to Computing on GPUIlya Kuzovkin
 
Interactive 3D graphics for web with three.js, Andrey Vedilin, DataArt
Interactive  3D graphics for web with three.js, Andrey Vedilin, DataArtInteractive  3D graphics for web with three.js, Andrey Vedilin, DataArt
Interactive 3D graphics for web with three.js, Andrey Vedilin, DataArtAlina Vilk
 
Minko stage3d 20130222
Minko stage3d 20130222Minko stage3d 20130222
Minko stage3d 20130222Minko3D
 
EFL: Scaling From the Embedded World to the Desktop
EFL: Scaling From the Embedded World to the DesktopEFL: Scaling From the Embedded World to the Desktop
EFL: Scaling From the Embedded World to the DesktopSamsung Open Source Group
 
Docker primer and tips
Docker primer and tipsDocker primer and tips
Docker primer and tipsSamuel Chow
 

Similar a Migrating from OpenGL to Vulkan (20)

Advanced Graphics Workshop - GFX2011
Advanced Graphics Workshop - GFX2011Advanced Graphics Workshop - GFX2011
Advanced Graphics Workshop - GFX2011
 
OpenGL Fixed Function to Shaders - Porting a fixed function application to “m...
OpenGL Fixed Function to Shaders - Porting a fixed function application to “m...OpenGL Fixed Function to Shaders - Porting a fixed function application to “m...
OpenGL Fixed Function to Shaders - Porting a fixed function application to “m...
 
Android native gl
Android native glAndroid native gl
Android native gl
 
C++ on the Web: Run your big 3D game in the browser
C++ on the Web: Run your big 3D game in the browserC++ on the Web: Run your big 3D game in the browser
C++ on the Web: Run your big 3D game in the browser
 
Shader Programming With Unity
Shader Programming With UnityShader Programming With Unity
Shader Programming With Unity
 
mloc.js 2014 - JavaScript and the browser as a platform for game development
mloc.js 2014 - JavaScript and the browser as a platform for game developmentmloc.js 2014 - JavaScript and the browser as a platform for game development
mloc.js 2014 - JavaScript and the browser as a platform for game development
 
OpenGL for 2015
OpenGL for 2015OpenGL for 2015
OpenGL for 2015
 
CS 354 Programmable Shading
CS 354 Programmable ShadingCS 354 Programmable Shading
CS 354 Programmable Shading
 
An Introduction to Computer Science with Java .docx
An Introduction to  Computer Science with Java .docxAn Introduction to  Computer Science with Java .docx
An Introduction to Computer Science with Java .docx
 
High Fidelity Games: Real Examples, Best Practices ... | Oleksii Vasylenko
High Fidelity Games: Real Examples, Best Practices ... | Oleksii VasylenkoHigh Fidelity Games: Real Examples, Best Practices ... | Oleksii Vasylenko
High Fidelity Games: Real Examples, Best Practices ... | Oleksii Vasylenko
 
Minko - Flash Conference #5
Minko - Flash Conference #5Minko - Flash Conference #5
Minko - Flash Conference #5
 
LightWave™ 3D 11 Add-a-Seat
LightWave™ 3D 11 Add-a-SeatLightWave™ 3D 11 Add-a-Seat
LightWave™ 3D 11 Add-a-Seat
 
JIT Spraying Never Dies - Bypass CFG By Leveraging WARP Shader JIT Spraying.pdf
JIT Spraying Never Dies - Bypass CFG By Leveraging WARP Shader JIT Spraying.pdfJIT Spraying Never Dies - Bypass CFG By Leveraging WARP Shader JIT Spraying.pdf
JIT Spraying Never Dies - Bypass CFG By Leveraging WARP Shader JIT Spraying.pdf
 
Task 2
Task 2Task 2
Task 2
 
Computer Graphics - Lecture 01 - 3D Programming I
Computer Graphics - Lecture 01 - 3D Programming IComputer Graphics - Lecture 01 - 3D Programming I
Computer Graphics - Lecture 01 - 3D Programming I
 
Introduction to Computing on GPU
Introduction to Computing on GPUIntroduction to Computing on GPU
Introduction to Computing on GPU
 
Interactive 3D graphics for web with three.js, Andrey Vedilin, DataArt
Interactive  3D graphics for web with three.js, Andrey Vedilin, DataArtInteractive  3D graphics for web with three.js, Andrey Vedilin, DataArt
Interactive 3D graphics for web with three.js, Andrey Vedilin, DataArt
 
Minko stage3d 20130222
Minko stage3d 20130222Minko stage3d 20130222
Minko stage3d 20130222
 
EFL: Scaling From the Embedded World to the Desktop
EFL: Scaling From the Embedded World to the DesktopEFL: Scaling From the Embedded World to the Desktop
EFL: Scaling From the Embedded World to the Desktop
 
Docker primer and tips
Docker primer and tipsDocker primer and tips
Docker primer and tips
 

Más de Mark Kilgard

D11: a high-performance, protocol-optional, transport-optional, window system...
D11: a high-performance, protocol-optional, transport-optional, window system...D11: a high-performance, protocol-optional, transport-optional, window system...
D11: a high-performance, protocol-optional, transport-optional, window system...Mark Kilgard
 
Computers, Graphics, Engineering, Math, and Video Games for High School Students
Computers, Graphics, Engineering, Math, and Video Games for High School StudentsComputers, Graphics, Engineering, Math, and Video Games for High School Students
Computers, Graphics, Engineering, Math, and Video Games for High School StudentsMark Kilgard
 
Virtual Reality Features of NVIDIA GPUs
Virtual Reality Features of NVIDIA GPUsVirtual Reality Features of NVIDIA GPUs
Virtual Reality Features of NVIDIA GPUsMark Kilgard
 
Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pi...
Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pi...Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pi...
Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pi...Mark Kilgard
 
Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline
Accelerating Vector Graphics Rendering using the Graphics Hardware PipelineAccelerating Vector Graphics Rendering using the Graphics Hardware Pipeline
Accelerating Vector Graphics Rendering using the Graphics Hardware PipelineMark Kilgard
 
SIGGRAPH Asia 2012: GPU-accelerated Path Rendering
SIGGRAPH Asia 2012: GPU-accelerated Path RenderingSIGGRAPH Asia 2012: GPU-accelerated Path Rendering
SIGGRAPH Asia 2012: GPU-accelerated Path RenderingMark Kilgard
 
SIGGRAPH Asia 2012 Exhibitor Talk: OpenGL 4.3 and Beyond
SIGGRAPH Asia 2012 Exhibitor Talk: OpenGL 4.3 and BeyondSIGGRAPH Asia 2012 Exhibitor Talk: OpenGL 4.3 and Beyond
SIGGRAPH Asia 2012 Exhibitor Talk: OpenGL 4.3 and BeyondMark Kilgard
 
Programming with NV_path_rendering: An Annex to the SIGGRAPH Asia 2012 paper...
Programming with NV_path_rendering:  An Annex to the SIGGRAPH Asia 2012 paper...Programming with NV_path_rendering:  An Annex to the SIGGRAPH Asia 2012 paper...
Programming with NV_path_rendering: An Annex to the SIGGRAPH Asia 2012 paper...Mark Kilgard
 
GPU accelerated path rendering fastforward
GPU accelerated path rendering fastforwardGPU accelerated path rendering fastforward
GPU accelerated path rendering fastforwardMark Kilgard
 
GPU-accelerated Path Rendering
GPU-accelerated Path RenderingGPU-accelerated Path Rendering
GPU-accelerated Path RenderingMark Kilgard
 
SIGGRAPH 2012: GPU-Accelerated 2D and Web Rendering
SIGGRAPH 2012: GPU-Accelerated 2D and Web RenderingSIGGRAPH 2012: GPU-Accelerated 2D and Web Rendering
SIGGRAPH 2012: GPU-Accelerated 2D and Web RenderingMark Kilgard
 
SIGGRAPH 2012: NVIDIA OpenGL for 2012
SIGGRAPH 2012: NVIDIA OpenGL for 2012SIGGRAPH 2012: NVIDIA OpenGL for 2012
SIGGRAPH 2012: NVIDIA OpenGL for 2012Mark Kilgard
 
GTC 2012: GPU-Accelerated Path Rendering
GTC 2012: GPU-Accelerated Path RenderingGTC 2012: GPU-Accelerated Path Rendering
GTC 2012: GPU-Accelerated Path Rendering Mark Kilgard
 
CS 354 Final Exam Review
CS 354 Final Exam ReviewCS 354 Final Exam Review
CS 354 Final Exam ReviewMark Kilgard
 
CS 354 Surfaces, Programmable Tessellation, and NPR Graphics
CS 354 Surfaces, Programmable Tessellation, and NPR GraphicsCS 354 Surfaces, Programmable Tessellation, and NPR Graphics
CS 354 Surfaces, Programmable Tessellation, and NPR GraphicsMark Kilgard
 
CS 354 Performance Analysis
CS 354 Performance AnalysisCS 354 Performance Analysis
CS 354 Performance AnalysisMark Kilgard
 
CS 354 Acceleration Structures
CS 354 Acceleration StructuresCS 354 Acceleration Structures
CS 354 Acceleration StructuresMark Kilgard
 
CS 354 Global Illumination
CS 354 Global IlluminationCS 354 Global Illumination
CS 354 Global IlluminationMark Kilgard
 
CS 354 Ray Casting & Tracing
CS 354 Ray Casting & TracingCS 354 Ray Casting & Tracing
CS 354 Ray Casting & TracingMark Kilgard
 

Más de Mark Kilgard (20)

D11: a high-performance, protocol-optional, transport-optional, window system...
D11: a high-performance, protocol-optional, transport-optional, window system...D11: a high-performance, protocol-optional, transport-optional, window system...
D11: a high-performance, protocol-optional, transport-optional, window system...
 
Computers, Graphics, Engineering, Math, and Video Games for High School Students
Computers, Graphics, Engineering, Math, and Video Games for High School StudentsComputers, Graphics, Engineering, Math, and Video Games for High School Students
Computers, Graphics, Engineering, Math, and Video Games for High School Students
 
Virtual Reality Features of NVIDIA GPUs
Virtual Reality Features of NVIDIA GPUsVirtual Reality Features of NVIDIA GPUs
Virtual Reality Features of NVIDIA GPUs
 
Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pi...
Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pi...Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pi...
Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pi...
 
Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline
Accelerating Vector Graphics Rendering using the Graphics Hardware PipelineAccelerating Vector Graphics Rendering using the Graphics Hardware Pipeline
Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline
 
SIGGRAPH Asia 2012: GPU-accelerated Path Rendering
SIGGRAPH Asia 2012: GPU-accelerated Path RenderingSIGGRAPH Asia 2012: GPU-accelerated Path Rendering
SIGGRAPH Asia 2012: GPU-accelerated Path Rendering
 
SIGGRAPH Asia 2012 Exhibitor Talk: OpenGL 4.3 and Beyond
SIGGRAPH Asia 2012 Exhibitor Talk: OpenGL 4.3 and BeyondSIGGRAPH Asia 2012 Exhibitor Talk: OpenGL 4.3 and Beyond
SIGGRAPH Asia 2012 Exhibitor Talk: OpenGL 4.3 and Beyond
 
Programming with NV_path_rendering: An Annex to the SIGGRAPH Asia 2012 paper...
Programming with NV_path_rendering:  An Annex to the SIGGRAPH Asia 2012 paper...Programming with NV_path_rendering:  An Annex to the SIGGRAPH Asia 2012 paper...
Programming with NV_path_rendering: An Annex to the SIGGRAPH Asia 2012 paper...
 
GPU accelerated path rendering fastforward
GPU accelerated path rendering fastforwardGPU accelerated path rendering fastforward
GPU accelerated path rendering fastforward
 
GPU-accelerated Path Rendering
GPU-accelerated Path RenderingGPU-accelerated Path Rendering
GPU-accelerated Path Rendering
 
SIGGRAPH 2012: GPU-Accelerated 2D and Web Rendering
SIGGRAPH 2012: GPU-Accelerated 2D and Web RenderingSIGGRAPH 2012: GPU-Accelerated 2D and Web Rendering
SIGGRAPH 2012: GPU-Accelerated 2D and Web Rendering
 
SIGGRAPH 2012: NVIDIA OpenGL for 2012
SIGGRAPH 2012: NVIDIA OpenGL for 2012SIGGRAPH 2012: NVIDIA OpenGL for 2012
SIGGRAPH 2012: NVIDIA OpenGL for 2012
 
GTC 2012: GPU-Accelerated Path Rendering
GTC 2012: GPU-Accelerated Path RenderingGTC 2012: GPU-Accelerated Path Rendering
GTC 2012: GPU-Accelerated Path Rendering
 
CS 354 Final Exam Review
CS 354 Final Exam ReviewCS 354 Final Exam Review
CS 354 Final Exam Review
 
CS 354 Surfaces, Programmable Tessellation, and NPR Graphics
CS 354 Surfaces, Programmable Tessellation, and NPR GraphicsCS 354 Surfaces, Programmable Tessellation, and NPR Graphics
CS 354 Surfaces, Programmable Tessellation, and NPR Graphics
 
CS 354 Performance Analysis
CS 354 Performance AnalysisCS 354 Performance Analysis
CS 354 Performance Analysis
 
CS 354 Acceleration Structures
CS 354 Acceleration StructuresCS 354 Acceleration Structures
CS 354 Acceleration Structures
 
CS 354 Global Illumination
CS 354 Global IlluminationCS 354 Global Illumination
CS 354 Global Illumination
 
CS 354 Ray Casting & Tracing
CS 354 Ray Casting & TracingCS 354 Ray Casting & Tracing
CS 354 Ray Casting & Tracing
 
CS 354 Typography
CS 354 TypographyCS 354 Typography
CS 354 Typography
 

Último

TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Angeliki Cooney
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamUiPathCommunity
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxRemote DBA Services
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024The Digital Insurer
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusZilliz
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistandanishmna97
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Orbitshub
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 

Último (20)

TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 

Migrating from OpenGL to Vulkan

  • 1. Mark Kilgard, January 19, 2016 Migrating from OpenGL to Vulkan
  • 2. 2 About the Speaker Mark Kilgard Principal Graphics Software Engineer in Austin, Texas Long-time OpenGL driver developer at NVIDIA Author and implementer of many OpenGL extensions Collaborated on the development of Cg First commercial GPU shading language Recently working on GPU-accelerated vector graphics (Yes, and wrote GLUT in ages past) Who is this guy?
  • 3. 3 Motivation for Talk What kinds of apps benefit from Vulkan? How to prepare your OpenGL code base to transition to Vulkan How various common OpenGL usage scenarios are re-thought in Vulkan Re-thinking your application structure for Vulkan Coming from OpenGL, Preparing for Vulkan
  • 5. 5 Analogy Fixed-function OpenGL Pre-assembled toy car fun out of the box, not much room for customization
  • 6. 6 Analogy Modern AZDO OpenGL with Programmable Shaders LEGO Kit you build it yourself, comes with plenty of useful, pre-shaped pieces AZDO = Approaching Zero Driver Overhead
  • 7. 7 Analogy Vulkan Pine Wood Derby Kit you build it yourself to race from raw materials power tools used to assemble, adult supervision highly recommended
  • 8. 8 Analogy Different Valid Approaches Fixed-function OpenGL Modern AZDO OpenGL with Programmable Shaders Vulkan
  • 9. 9 Beneficial Vulkan Scenarios Is your graphics work CPU bound? Can your graphics work creation be parallelized? start yes Vulkan friendly yes Has Parallelizable CPU-bound Graphics Work
  • 10. 10 Beneficial Vulkan Scenarios Your graphics platform is fixed You’ll do whatever it takes to squeeze out max perf. start yes Vulkan friendly yes Maximizing a Graphics Platform Budget
  • 11. 11 Beneficial Vulkan Scenarios You put a premium on avoiding hitches You can manage your graphics resource allocations start yes Vulkan friendly yes Managing Predictable Performance, Free of Hitching
  • 12. 12 Unlikely to Benefit 1. Need for compatibility to pre-Vulkan platforms 2. Heavily GPU-bound application 3. Heavily CPU-bound application due to non-graphics work 4. Single-threaded application, unlikely to change 5. App can target middle-ware engine, avoiding direct 3D graphics API dependencies • Consider using an engine targeting Vulkan, instead of dealing with Vulkan yourself Scenarios to Reconsider Coding to Vulkan
  • 13. 13 First Steps Migrating to Vulkan Eliminate fixed-function Source all geometry from vertex buffer objects (VBOs) with vertex arrays Use all programmable GLSL shaders with layout() qualifiers Consider using samplers Do all rendering into framebuffer objects (FBOs) Stay within the non-deprecated subset (e.g. no GL_QUADS, for now…) Think about better batching & classify all your render states Avoid depending on OpenGL context state All pretty sensible advice, even if you stick with OpenGL Modernize Your OpenGL
  • 14. 14 Next Steps Migrating to Vulkan Think about how your application would handle losing the GPU Similar to ARB_robustness Profile your application, understand what portions are CPU and GPU bound Vulkan most benefits apps bottlenecked on graphics work creation and driver validation Is that your app? Adopt common features available in both OpenGL and Vulkan first in OpenGL Proving out tessellation or multi-draw-indirect probably easier first in your stable OpenGL code base Again all pretty sensible advice, even if you stick with OpenGL Modernize Your OpenGL
  • 15. 15 Thinking about Vulkan vs. OpenGL OpenGL, largely understood in terms of Its API, functions for commands and queries And how that API interacts with the OpenGL state machine OpenGL has lots of implicit synchronization Errors handled largely by ignoring command OpenGL API manages various objects But allocation of underlying device resources largely handled by driver + OpenGL Has a Well-established Approach Originally client-server
  • 16. 16 Thinking about Vulkan vs. OpenGL Vulkan constructs and submits work for a graphics device Idealized graphics + compute device Requires application to maintain valid Vulkan usage for proper operation Not expected to behave correctly in face of errors, justified for performance Instead of updating state machine, Vulkan is about establishing working relationships between objects Pre-validates operation of actions Vulkan Plays By Different Rules Explicit API Explicit memory management Explicit synchronization Explicit queuing of work Explicit management of buffer state with render passes Not client-server, explicitly depends on shared resources and memory
  • 17. 17 Truly Transitioning to Vulkan Much more graphics resource responsibility for the application You need to allocate from large device memory chunk You become responsible for proper explicit synchronization Fences, Barriers, Semaphores Barriers are probably the hardest to appreciate Everything has to be structured as pipeline state objects (PSOs) Understand render passes Think how parallel command buffer generation would operate You become responsible for multi-threaded exclusion of your Vulkan objects Vulkan Done Right Rethinks Entire Graphics Rendering
  • 18. 18 Common Graphics Tasks Loading a mipmapped texture Loading a vertex buffer object for rendering Choosing a shader representation and loading shaders Initiating compute work Managing a memory sub-allocator Thinking about render passes Managing Predictable Performance, Free of Hitching
  • 19. 19 Loading a Texture Well traveled path via OpenGL 3.0 glBindTexture(GL_TEXTURE_2D, texture_name); glTexImage2D(GL_TEXTURE_2D, 0, GL_SRGB8, width, height, /*border*/0, GL_UNSIGNED_BYTE, GL_RGBA, pixels); glGenerateMipmap(GL_TEXTURE_2D); Does more than you think it does The OpenGL View
  • 20. 20 Logical Operations to Load a Texture 1. Create host driver objects corresponding to texture/sampler/image/view/layout 2. Copy call’s image to staging memory accessible to host+device 3. (OpenGL might do a format conversion and pixel transfer) 4. Allocates device memory for texture image for texturing 5. Copy image from host+device memory to device memory for texturing 6. Allocate device resources for sampler 7. Generate mipmap levels
  • 21. 21 Various Vulkan Objects “inside” a Texture No such thing as “VkTexture” Instead Texture state in Vulkan = VkDescriptorImageInfo Combines: VkSampler + VkImageView + VkImageLayout Sampling state + Image state + Current image layout Texture binding in Vulkan = part of VkDescriptorSetLayoutBinding Contained with VkDescriptorSetLayout Building Up the OpenGL Texture Object from Vulkan Concepts OpenGL textures are opaque, so lacks an exposed image layout
  • 22. 22 Allocating Image Memory for Texture VkImage VkDevice vkGetImageMemoryRequirements VkMemoryRequirements vkBindImageMemory VkDeviceMemory vkAllocateMemory vkCreateImage With VulkanNaïve approach! vkAllocateMemory is expensive. Demos may do this, but real apps should sub-allocate from large VkDeviceMemory allocations See next slide…
  • 23. 23 Sub-allocating Image Memory for Texture VkImage VkDevice vkGetImageMemoryRequirements VkMemoryRequirements vkBindImageMemory VkDeviceMemory vkAllocateMemory vkCreateImage One large device memory allocation, assigned to multiple images Proper approach! vkAllocateMemory makes a large allocation with and then sub-allocates enough memory for the image So who writes the sub-allocator? You do!
  • 24. 24 Binding Descriptor Sets for a Texture VkDescriptorImageInfoVkSampler VkImageView VkImageLayout VkDescriptorSetLayout VkWriteDescriptorSet vkAllocateDescriptorSets VkPipelineLayout vkCmdBindDescriptorSets VkCommandBuffer vkCreateDescriptorSetLayout vkCreatePipelineLayout vkUpdateDescriptorSets So Pipeline Sees Texture
  • 25. 25 Establishing Sampler Bindings for a Pipeline Object VkDescriptorSetLayoutBinding for a sampler binding vkCreateDescriptorSetLayout VkDescriptorSetLayout vkCreatePipelineLayout VkPipelineLayout vkCreateGraphicsPipelines VkPipeline vkCmdBindPipeline Vulkan Pipelines Need to Know How They Will Bind Samplers VkCommandBuffer
  • 26. 26 Base Level Specification + Mipmap Generation VkCommandBuffer vkCmdBlitImage vkCmdPipelineBarrier vkCmdBlitImage for each upper mipmap level vkCmdPipelineBarrier Vulkan Command Buffer Orchestrates Blit + Downsamples staging image texture base image texture base image level 1 mipmap level i mipmap level i+1 mipmap
  • 27. 27 Binding to a Vertex Array Object (VAO) and Rendering from Vertex Arrays Well traveled path via OpenGL 3.0 glBindVertexArray(vertex_array_object); glDrawElements(GL_TRIANGLES, count, GL_UNSIGNED_INT, indices); Again, does more than you think it does The OpenGL View
  • 28. 28 Allocating Buffer Memory for VBO VkBuffer VkDevice vkGetBufferMemoryRequirements VkMemoryRequirements vkBindBufferMemory VkDeviceMemory vkAllocateMemory VkCreateBuffer With VulkanNaïve approach! vkAllocateMemory is expensive. Demos may do this, but real apps should sub-allocate from large VkDeviceMemory allocations
  • 29. 29 Binding Vertex State To A Pipeline VkVertexInputBindingDescription VkVertexInputAttributeDescription VkPipelineVertexInputStateCreateInfo VkGraphicsPipelineCreateInfo VkGraphicsPipeline vkCreateGraphicsPipelines So Pipeline Sees Vertex Input State VkPipelineShaderStageCreateInfo VkPipelineInputAssemblyStateCreateInfo VkPipelineViewportStateCreateInfo VkPipelineRasterizationStateCreateInfo VkPipelineMultisampleStateCreateInfo VkPipelineDepthStencilStateCreateInfo VkPipelineColorBlendStateCreateInfo VkPipelineDynamicStateCreateInfo
  • 30. 30 Binding Vertex Buffer For Drawing For the vertex input statevkCmdBindPipeline Buffer Binding Is Performed With The Command Queue vkCmdBindVertexBuffers For the vertex data vkCmdBeginRenderPass vkCmdBindDescriptorSets vkCmdDrawIndexed vkCmdEndRenderPass Begin Drawing Draw End Drawing
  • 31. 31 Big Features, Ready for Vulkan Compute shaders Tessellation shaders Geometry shaders Sparse resources (textures and buffers) In OpenGL 4.5 today Vulkan has the same big features, just different API Mostly the same GLSL can be used in either case Prototype in OpenGL now, Enable in Vulkan next
  • 32. 32 Thinking about render passes OpenGL just has commands to draw primitives No explicit notion of a render pass in OpenGL API Vulkan does have render passes, VkRenderPass Includes notion of sub-passes Designed to facilitate tiling architectures Bounds the lifetime of intermediate framebuffer results Allows iterating over subpasses (chunking) within a render pass on a per tile basis In most cases, you won’t need to deal with subpasses How do rendering operations affect the retained framebuffer?
  • 33. 33 Render Pass Describes the list attachments the render pass involves Each attachment can specify How the attachment state is initialized (loaded, cleared, dont-care) How the attach state is stored (store, or dont-care) Don’t-care allows framebuffer intermediates to be discarded E.g. depth buffer not needed after the render pass How the layout of attachment could change Sub-pass dependencies indicate involvement of attachments within a subpass What does a Vulkan Render Pass Provide?
  • 34. 34 Render Passes vkCmdBeginRenderPass vkCmdEndRenderPass vkCmdBeginRenderPass vkCmdNextSubpass vkCmdNextSubpass vkCmdEndRenderPass Monolithic or Could Have Sub-passes Each subpass has its own description and dependencies Simple render pass, no subpasses Complex render pass, with multiple subpasses
  • 35. 35 Vulkan Application Structure Parallel Command Buffer Generation Traditional single-threaded OpenGL app structure update scene draw scene single thread Possible multi-threaded Vulkan app structure collect secondary command buffers distribute update scene work submit command buffer build secondary command buffer work thread build secondary command buffer work thread build secondary command buffer work thread build secondary command buffer work thread
  • 36. 36 Conclusions Vulkan is a radical departure from OpenGL Modernizing your OpenGL code base is definitely good for moving to Vulkan But it will take more work than that! Vulkan’s explicitness makes simple operations like a texture bind quite involved Think about multi-threaded command buffer creation Get Ready for Vulkan