{"id":1144,"date":"2022-05-23T12:46:41","date_gmt":"2022-05-23T10:46:41","guid":{"rendered":"https:\/\/blogs.igalia.com\/itoral\/?p=1144"},"modified":"2022-05-23T12:46:41","modified_gmt":"2022-05-23T10:46:41","slug":"vulkan-1-2-getting-closer","status":"publish","type":"post","link":"https:\/\/blogs.igalia.com\/itoral\/2022\/05\/23\/vulkan-1-2-getting-closer\/","title":{"rendered":"Vulkan 1.2 getting closer"},"content":{"rendered":"<p>Lately I have been exposing a bit more functionality in V3DV and was wondering how far we are from Vulkan 1.2. Turns out that a lot of the new Vulkan 1.2 features are actually optional and what we have right now (missing a few trivial patches to expose a few things) seems to be sufficient for a minimal implementation.<\/p>\n<p>We actually did a test run with CTS enabling Vulkan 1.2 to verify this and it went surprisingly well, with just a few test failures that I am currently looking into, so I think we should be able to submit conformance soon.<\/p>\n<p>For those who may be interested, here is a list of what we are not supporting (all of these are optional features in Vulkan 1.2):<\/p>\n<p><b>VK_EXT_descriptor_indexing<\/b><\/p>\n<p>I think we should be able to support this in the future.<\/p>\n<p><b>VK_KHR_shader_float16_int8<\/b><\/p>\n<p>This we can support in theory, since the hardware has support for half-float, however, the way this is designed in hardware comes with significant caveats that I think would make it really difficult to take advantage of it in practice. It would also require significant work, so it is not something we are planning at present.<\/p>\n<p><b>VK_KHR_buffer_device_address<\/b><\/p>\n<p>We can&#8217;t implement this without hacks because the Vulkan spec explicitly defined these addresses to be 64-bit values and the V3D GPU only deals with 32-bit addresses and is not capable of doing any kind of native 64-bit operation. At first I thought we could just lower these to 32-bit (since we know they will be 32-bit), but because the spec makes these explicit 64-bit values, it allows shaders to cast a device address from\/to uvec2, which generates 64-bit bitcast instructions and those require both the destination and source to be 64-bit values.<\/p>\n<p><b>VK_EXT_sampler_filter_minmax<br \/>\nVK_KHR_draw_indirect_count<br \/>\nVK_EXT_scalar_block_layout<br \/>\nVK_EXT_shader_viewport_index_layer<br \/>\nVK_KHR_shader_atomic_int64<\/b><\/p>\n<p>These lack required hardware support, so we don&#8217;t expect to implement them.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lately I have been exposing a bit more functionality in V3DV and was wondering how far we are from Vulkan 1.2. Turns out that a lot of the new Vulkan 1.2 features are actually optional and what we have right now (missing a few trivial patches to expose a few things) seems to be sufficient &hellip; <a href=\"https:\/\/blogs.igalia.com\/itoral\/2022\/05\/23\/vulkan-1-2-getting-closer\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Vulkan 1.2 getting closer&#8221;<\/span><\/a><\/p>\n","protected":false},"author":16,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[],"class_list":["post-1144","post","type-post","status-publish","format-standard","hentry","category-graphics"],"_links":{"self":[{"href":"https:\/\/blogs.igalia.com\/itoral\/wp-json\/wp\/v2\/posts\/1144","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.igalia.com\/itoral\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.igalia.com\/itoral\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.igalia.com\/itoral\/wp-json\/wp\/v2\/users\/16"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.igalia.com\/itoral\/wp-json\/wp\/v2\/comments?post=1144"}],"version-history":[{"count":6,"href":"https:\/\/blogs.igalia.com\/itoral\/wp-json\/wp\/v2\/posts\/1144\/revisions"}],"predecessor-version":[{"id":1150,"href":"https:\/\/blogs.igalia.com\/itoral\/wp-json\/wp\/v2\/posts\/1144\/revisions\/1150"}],"wp:attachment":[{"href":"https:\/\/blogs.igalia.com\/itoral\/wp-json\/wp\/v2\/media?parent=1144"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.igalia.com\/itoral\/wp-json\/wp\/v2\/categories?post=1144"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.igalia.com\/itoral\/wp-json\/wp\/v2\/tags?post=1144"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}