Gstreamer Vulkan
Total Page:16
File Type:pdf, Size:1020Kb
GStreamer Vulkan Matthew Waters (ystreet00) GStreamer Conference 2019 1st November 2019 Who Am I ● Australian ● Centricular ● Multimedia ● Graphics – OpenGL, Vulkan ● WebRTC 2 History 3 Why Vulkan/Metal/Direct3D 12? https://www.karlrupp.net/2018/02/42-years-of-microprocessor-trend-data/ - CC BY 4.0 4 Why Vulkan/Metal/Direct3D 12? ● Multi-core processing ● Lower GPU driver overhead ● Closer to current state of GPU hardware ● API ‘reset’ 5 Hello Triangle https://twitter.com/Sol_HSA/status/1181459830361509888 6 https://twitter.com/McNopper/status/1179774428357505024 7 Why Vulkan? ● Open cross-platform low-level 3D API ● X11, Wayland, Android, Windows, Embedded Linux ● MacOS/iOS with MoltenVK – OpenGL deprecated on MacOS/iOS ● Extensible ● Lots of control 8 Vulkan Overview Instance Physical Device Device Descriptor Pool Semaphore Sampler Memory Queue Buffer Fence Heap Render Pass Framebuffer Shader Image Pipeline Command Command Descriptor Pool Buffer(s) Set 9 Vulkan Extensions ● Chosen by application at instance/device creation – Explicitly opt-in ● Rendering output is an extension – VK_KHR_SURFACE + platform-specific extension 10 Vulkan Command Buffers Instance Physical Device Device Queue Command Pool Command Buffer Render Pass Bind Index/ Set Viewport/ Bind Render BindPipeline Draw Begin Vertex Buffer Scissor... Descriptor Set Pass End Render Pass State Descriptor Shaders Set Framebuffer Buffer Render Pass etc... Descriptor Image View Pool Image Memory Heap Sampler 11 Vulkan Synchronisation ● Semaphores – device→device inter-queue or coarse same- queue Command Command Command Buffer Buffer Buffer ● Barriers and Events – barrier device→device (fine-grained) event event ● Fences – host→device Semaphores Queue Queue ● Timeline semaphores – future development Fences Host Device 12 Vulkan Memory Allocation ● Vulkan-user controls memory allocation ● Some devices/drivers have small (4k) allocation count Image limits Memory ● MoltenVK prefers dedicated due to Metal API ● Aliasing is possible Image Image Image Memory 13 Vulkan Memory ● VkImage/VkBuffer is memory + layout description ● VkImageView is image + 'how to interpret' ● Images can have optimal or linear tiling ● Images can have stage-specific layouts (present, transfer, color attachment) ● Image/buffer requirements retrieved with vkGet*MemoryRequirements() ● VkDeviceMemory bound to image/buffer/etc with vkBind*Memory() 14 Shaders ● Core Vulkan only accepts SPIR-V shaders ● Reduces driver variations in shader parsing ● GLSL/HLSL→SPIR-V compiler exist 15 GStreamer Vulkan Library ● Very similar to GStreamer OpenGL – GstVulkanDisplay ~= GstGLDisplay – GstVulkanWindow ~= GstGLWindow – GstVulkanDevice + GstVulkanQueue ~= GstGLContext – GstVulkanInstance/GstVulkanPhysicalDevice has no analogue – GstVulkanImageMemory ~= GstGLMemory – GstVulkanBufferMemory ~= GstGLBuffer – GstVulkanBufferPool ~= GstGLBufferPool 16 GStreamer Vulkan Library 2 ● GstVulkanCommandPool – Parent of GstVulkanCommandBuffer ● GstVulkanFence ● GstVulkanTrash ● GstVulkanSwapper – Renders to a VkSurface 17 Sharing Vulkan resources ● GstVulkanDevice/Instance ● GstVulkanImage/BufferMemory ● Synchronisation information – Fence – Event – Semaphore ● “external” 18 GStreamer Vulkan Elements ● vulkanupload – upload data to Vulkan memory ● vulkancolorconvert – convert between colour spaces ● vulkanviewconvert – convert between stereo view modes ● vulkanimageidentity – image copying ● vulkansink – output to screen 19 GStreamer Vulkan Issues ● VkMemory download – VkImage layout transition requirements and barriers ● Descriptor sets ● RGB→YUV shader requires separate downsampling pass – Imageless framebuffers? 20 GStreamer Vulkan Future ● Command buffer reuse ● Primary/secondary command buffers ● Render subpasses ● Reusing memory within frame ● dma-buf ● Application integration example ● Compute ● Vulkan encoders/decoders – hopefully Q1 2020 21 Thanks! ● ystreet00 in #gstreamer on freenode ● @ystreet00 on twitter https://www.karlrupp.net/2018/02/42-years-of-microprocessor-trend-data/ - CC BY 4.0 https://twitter.com/Sol_HSA/status/1181459830361509888 https://www.khronos.org/legal/trademarks/ - Vulkan and the Vulkan logo are registered trademarks of the Khronos Group Inc. Metal is a trademark of Apple Inc., registered in the U.S. and other countries. DirectX is a trademark of Microsoft Inc., registered in the U.S. and other countries. All other trademarks are properties of their respective owners 22.