radv: Implement VK_EXT_buffer_device_address.
authorBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Thu, 24 Jan 2019 01:06:27 +0000 (02:06 +0100)
committerBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Wed, 6 Feb 2019 21:37:38 +0000 (22:37 +0100)
v2: Also update the release notes.

Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
docs/relnotes/19.1.0.html
src/amd/vulkan/radv_device.c
src/amd/vulkan/radv_extensions.py
src/amd/vulkan/radv_shader.c

index e6ea7c01fb2df163fad321aeba7169dc5089a5f7..69f8abbf17ea64b552a432de40e1de4d685b50dc 100644 (file)
@@ -40,7 +40,7 @@ TBD.
 
 <ul>
 <li>GL_EXT_texture_compression_s3tc_srgb on Gallium drivers and i965 (ES extension).</li>
-<li>VK_EXT_buffer_device_address on Intel.</li>
+<li>VK_EXT_buffer_device_address on Intel and RADV.</li>
 </ul>
 
 <h2>Bug fixes</h2>
index 5202d83a418f5724fee74d95a59c4ae7b160f05e..0fef92773e19e302e5e756019a6ca7883b0333b1 100644 (file)
@@ -869,6 +869,14 @@ void radv_GetPhysicalDeviceFeatures2(
                        features->memoryPriority = VK_TRUE;
                        break;
                }
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_ADDRESS_FEATURES_EXT: {
+                       VkPhysicalDeviceBufferAddressFeaturesEXT *features =
+                               (VkPhysicalDeviceBufferAddressFeaturesEXT *)ext;
+                       features->bufferDeviceAddress = true;
+                       features->bufferDeviceAddressCaptureReplay = false;
+                       features->bufferDeviceAddressMultiDevice = false;
+                       break;
+               }
                default:
                        break;
                }
@@ -1694,7 +1702,8 @@ VkResult radv_CreateDevice(
         * from the descriptor set anymore, so we have to use a global BO list.
         */
        device->use_global_bo_list =
-               device->enabled_extensions.EXT_descriptor_indexing;
+               device->enabled_extensions.EXT_descriptor_indexing ||
+               device->enabled_extensions.EXT_buffer_device_address;
 
        mtx_init(&device->shader_slab_mutex, mtx_plain);
        list_inithead(&device->shader_slabs);
@@ -4032,6 +4041,15 @@ void radv_DestroyBuffer(
        vk_free2(&device->alloc, pAllocator, buffer);
 }
 
+VkDeviceAddress radv_GetBufferDeviceAddressEXT(
+       VkDevice                                    device,
+       const VkBufferDeviceAddressInfoEXT*         pInfo)
+{
+       RADV_FROM_HANDLE(radv_buffer, buffer, pInfo->buffer);
+       return radv_buffer_get_va(buffer->bo) + buffer->offset;
+}
+
+
 static inline unsigned
 si_tile_mode_index(const struct radv_image *image, unsigned level, bool stencil)
 {
index 1bf56943f258bca92b8e71b44218156ba232bf40..f218598f1237be405860f8ad4602262bf290384f 100644 (file)
@@ -93,6 +93,7 @@ EXTENSIONS = [
     Extension('VK_KHR_display',                          23, 'VK_USE_PLATFORM_DISPLAY_KHR'),
     Extension('VK_EXT_direct_mode_display',               1, 'VK_USE_PLATFORM_DISPLAY_KHR'),
     Extension('VK_EXT_acquire_xlib_display',              1, 'VK_USE_PLATFORM_XLIB_XRANDR_EXT'),
+    Extension('VK_EXT_buffer_device_address',             1, True),
     Extension('VK_EXT_calibrated_timestamps',             1, True),
     Extension('VK_EXT_conditional_rendering',             1, True),
     Extension('VK_EXT_conservative_rasterization',        1, 'device->rad_info.chip_class >= GFX9'),
index 9a05b3c24340ca7b8b01db44a2f08a56e64416e9..1dcb060624611f6e0c354cf0cf06b86cf00855d1 100644 (file)
@@ -232,6 +232,7 @@ radv_shader_compile_to_nir(struct radv_device *device,
                                .int16 = true,
                                .int64 = true,
                                .multiview = true,
+                               .physical_storage_buffer_address = true,
                                .runtime_descriptor_array = true,
                                .shader_viewport_index_layer = true,
                                .stencil_export = true,
@@ -250,6 +251,7 @@ radv_shader_compile_to_nir(struct radv_device *device,
                        },
                        .ubo_ptr_type = glsl_vector_type(GLSL_TYPE_UINT, 2),
                        .ssbo_ptr_type = glsl_vector_type(GLSL_TYPE_UINT, 2),
+                       .phys_ssbo_ptr_type = glsl_vector_type(GLSL_TYPE_UINT64, 1),
                        .push_const_ptr_type = glsl_uint_type(),
                        .shared_ptr_type = glsl_uint_type(),
                };