Mesa (main): turnip: implement VK_KHR_buffer_device_address
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Nov 23 19:10:17 UTC 2021
Module: Mesa
Branch: main
Commit: d5757c965a9c77e8edcecfdc55ce41b33bc20d98
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=d5757c965a9c77e8edcecfdc55ce41b33bc20d98
Author: Danylo Piliaiev <dpiliaiev at igalia.com>
Date: Mon Jul 26 13:55:39 2021 +0300
turnip: implement VK_KHR_buffer_device_address
We don't advertise bufferDeviceAddressCaptureReplay capability and
neither does blob, because at the moment there is no way to allocate
bo with predefined iova.
There is no support of any arithmetic with addresses since shaderInt64
is not enabled. However, we could enable int64 support whenever we want.
Signed-off-by: Danylo Piliaiev <dpiliaiev at igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8717>
---
docs/features.txt | 2 +-
src/freedreno/vulkan/tu_device.c | 8 +++++---
src/freedreno/vulkan/tu_shader.c | 5 +++++
3 files changed, 11 insertions(+), 4 deletions(-)
diff --git a/docs/features.txt b/docs/features.txt
index 1515e3bf0c1..d7d4038961b 100644
--- a/docs/features.txt
+++ b/docs/features.txt
@@ -446,7 +446,7 @@ Vulkan 1.1 -- all DONE: anv, lvp, radv, tu, vn
Vulkan 1.2 -- all DONE: anv, vn
VK_KHR_8bit_storage DONE (anv/gen8+, lvp, radv, vn)
- VK_KHR_buffer_device_address DONE (anv/gen8+, lvp, radv, vn)
+ VK_KHR_buffer_device_address DONE (anv/gen8+, lvp, radv, tu, vn)
VK_KHR_create_renderpass2 DONE (anv, lvp, radv, tu, vn)
VK_KHR_depth_stencil_resolve DONE (anv, lvp, radv, tu, vn)
VK_KHR_draw_indirect_count DONE (anv, lvp, radv, tu, vn)
diff --git a/src/freedreno/vulkan/tu_device.c b/src/freedreno/vulkan/tu_device.c
index d51299f9cb2..b0878a54474 100644
--- a/src/freedreno/vulkan/tu_device.c
+++ b/src/freedreno/vulkan/tu_device.c
@@ -156,6 +156,7 @@ get_device_extensions(const struct tu_physical_device *device,
.KHR_vulkan_memory_model = true,
.KHR_driver_properties = true,
.KHR_separate_depth_stencil_layouts = true,
+ .KHR_buffer_device_address = true,
#ifndef TU_USE_KGSL
.KHR_timeline_semaphore = true,
#endif
@@ -560,7 +561,7 @@ tu_get_physical_device_features_1_2(struct tu_physical_device *pdevice,
features->separateDepthStencilLayouts = true;
features->hostQueryReset = true;
features->timelineSemaphore = true;
- features->bufferDeviceAddress = false;
+ features->bufferDeviceAddress = true;
features->bufferDeviceAddressCaptureReplay = false;
features->bufferDeviceAddressMultiDevice = false;
features->vulkanMemoryModel = true;
@@ -2574,8 +2575,9 @@ VkDeviceAddress
tu_GetBufferDeviceAddress(VkDevice _device,
const VkBufferDeviceAddressInfoKHR* pInfo)
{
- tu_stub();
- return 0;
+ TU_FROM_HANDLE(tu_buffer, buffer, pInfo->buffer);
+
+ return tu_buffer_iova(buffer);
}
uint64_t tu_GetBufferOpaqueCaptureAddress(
diff --git a/src/freedreno/vulkan/tu_shader.c b/src/freedreno/vulkan/tu_shader.c
index a0baf0921b6..ea5838a518f 100644
--- a/src/freedreno/vulkan/tu_shader.c
+++ b/src/freedreno/vulkan/tu_shader.c
@@ -81,6 +81,7 @@ tu_spirv_to_nir(struct tu_device *dev,
.subgroup_basic = true,
.subgroup_ballot = true,
.subgroup_vote = true,
+ .physical_storage_buffer_address = true,
},
};
@@ -749,6 +750,10 @@ tu_shader_create(struct tu_device *dev,
nir_var_mem_ubo | nir_var_mem_ssbo,
nir_address_format_vec2_index_32bit_offset);
+ NIR_PASS_V(nir, nir_lower_explicit_io,
+ nir_var_mem_global,
+ nir_address_format_64bit_global);
+
if (nir->info.stage == MESA_SHADER_COMPUTE) {
NIR_PASS_V(nir, nir_lower_vars_to_explicit_types,
nir_var_mem_shared, shared_type_info);
More information about the mesa-commit
mailing list