{"id":766,"date":"2023-01-16T16:47:54","date_gmt":"2023-01-16T15:47:54","guid":{"rendered":"http:\/\/blogs.igalia.com\/apinheiro\/?p=766"},"modified":"2023-01-16T16:47:54","modified_gmt":"2023-01-16T15:47:54","slug":"v3dv-status-update-2023-01","status":"publish","type":"post","link":"https:\/\/blogs.igalia.com\/apinheiro\/2023\/01\/v3dv-status-update-2023-01\/","title":{"rendered":"v3dv status update 2023-01"},"content":{"rendered":"<p>We haven\u2019t posted updates to the work done on the V3DV driver since<br \/>\nwe announced the driver becoming <a href=\"https:\/\/www.raspberrypi.com\/news\/vulkan-update-version-1-2-conformance-for-raspberry-pi-4\/\">Vulkan 1.2 Conformant<\/a><\/p>\n<p>But after reaching that milestone, we\u2019ve been very busy working on more improvements, so let\u2019s summarize the work done since then.<\/p>\n<h1>Moved more functionality to the GPU<\/h1>\n<p>Our implementation for Events and Occlusion Queries were both mostly CPU based. We have refactored both features with a new GPU-side implementation based on the use of compute shaders.<\/p>\n<p>In addition to be more &#8220;the Vulkan way&#8221;, has additional benefits. For example, for the case of the events, we no longer need to stall on the CPU when we need to handle GPU-side event commnds, and allowed to re-enable sync_fd import\/export.<\/p>\n<h1>VK_KHR_sampler_ycbcr_conversion<\/h1>\n<p>We have just landed a real implementation for this extension, based on the work of <a href=\"https:\/\/github.com\/Ella-0\">Ella Stanforth<\/a> as part of her <a href=\"https:\/\/www.igalia.com\/coding-experience\/\">Igalia Coding Experience<\/a> with us. This was a really complex work, as this feature added support for multi-plane formats, and needed to modify various parts of the driver. A big kudos to Ella for getting this tricky feature going. Also thanks to Jason Ekstrand, as he worked on a common Mesa framework for ycbcr support.<\/p>\n<h1>Support for new extensions<\/h1>\n<p>Since 1.2 got announced the following extension got exposed:<\/p>\n<ul>\n<li>VK_EXT_texel_buffer_alignment<\/li>\n<li>VK_KHR_maintenance4<\/li>\n<li>VK_KHR_zero_initialize_workgroup_memory<\/li>\n<li>VK_KHR_synchronization2<\/li>\n<li>VK_KHR_workgroup_memory_explicit_layout<\/li>\n<li>VK_EXT_tooling_info (0 tools exposed though)<\/li>\n<li>VK_EXT_border_color_swizzle<\/li>\n<li>VK_EXT_shader_module_identifier<\/li>\n<li>VK_EXT_depth_clip_control<\/li>\n<li>VK_EXT_attachment_feeback_loop_layout<\/li>\n<li>VK_EXT_memory_budget<\/li>\n<li>VK_EXT_primitive_topology_list_restart<\/li>\n<li>VK_EXT_load_store_op_none<\/li>\n<li>VK_EXT_image_robustness<\/li>\n<li>VK_EXT_pipeline_robustness<\/li>\n<li>VK_KHR_shader_integer_dot_product<\/li>\n<\/ul>\n<h1>Some miscellanea<\/h1>\n<p>In addition to those, we also worked on the following:<\/p>\n<ul>\n<li>\n<p>Implemented heuristic to decide to enable double-buffer mode, that could help to improve performance on some cases. It still needs to be enabled through the V3D_DEBUG environment variable.<\/p>\n<\/li>\n<li>\n<p>Getting v3dv and v3d using the same shader optimization method,  that would allow to reuse more code between the OpenGL and Vulkan driver.<\/p>\n<\/li>\n<li>\n<p>Getting the driver working with the fossilize-db tools<\/p>\n<\/li>\n<li>\n<p>Bugfixing, mostly related to bugs identified through new Khronos CTS releases<\/p>\n<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>We haven\u2019t posted updates to the work done on the V3DV driver since we announced the driver becoming Vulkan 1.2 Conformant But after reaching that milestone, we\u2019ve been very busy working on more improvements, so let\u2019s summarize the work done since then. Moved more functionality to the GPU Our implementation for Events and Occlusion Queries &hellip; <a href=\"https:\/\/blogs.igalia.com\/apinheiro\/2023\/01\/v3dv-status-update-2023-01\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;v3dv status update 2023-01&#8221;<\/span><\/a><\/p>\n","protected":false},"author":6,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13,23,22],"tags":[],"class_list":["post-766","post","type-post","status-publish","format-standard","hentry","category-igalia","category-raspberry-pi","category-vulkan"],"_links":{"self":[{"href":"https:\/\/blogs.igalia.com\/apinheiro\/wp-json\/wp\/v2\/posts\/766","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.igalia.com\/apinheiro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.igalia.com\/apinheiro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.igalia.com\/apinheiro\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.igalia.com\/apinheiro\/wp-json\/wp\/v2\/comments?post=766"}],"version-history":[{"count":3,"href":"https:\/\/blogs.igalia.com\/apinheiro\/wp-json\/wp\/v2\/posts\/766\/revisions"}],"predecessor-version":[{"id":769,"href":"https:\/\/blogs.igalia.com\/apinheiro\/wp-json\/wp\/v2\/posts\/766\/revisions\/769"}],"wp:attachment":[{"href":"https:\/\/blogs.igalia.com\/apinheiro\/wp-json\/wp\/v2\/media?parent=766"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.igalia.com\/apinheiro\/wp-json\/wp\/v2\/categories?post=766"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.igalia.com\/apinheiro\/wp-json\/wp\/v2\/tags?post=766"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}