nvk: Implement VK_EXT/KHR_buffer_device_address

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24326>
This commit is contained in:
Faith Ekstrand 2023-01-30 20:12:02 -06:00 committed by Marge Bot
parent 07f48c925b
commit ed6d5c33c6
4 changed files with 44 additions and 0 deletions

View file

@ -79,3 +79,21 @@ nvk_BindBufferMemory2(VkDevice _device,
}
return VK_SUCCESS;
}
VKAPI_ATTR VkDeviceAddress VKAPI_CALL
nvk_GetBufferDeviceAddress(UNUSED VkDevice device,
const VkBufferDeviceAddressInfo *pInfo)
{
VK_FROM_HANDLE(nvk_buffer, buffer, pInfo->buffer);
return nvk_buffer_address(buffer, 0);
}
VKAPI_ATTR uint64_t VKAPI_CALL
nvk_GetBufferOpaqueCaptureAddress(UNUSED VkDevice device,
const VkBufferDeviceAddressInfo *pInfo)
{
VK_FROM_HANDLE(nvk_buffer, buffer, pInfo->buffer);
return nvk_buffer_address(buffer, 0);
}

View file

@ -301,3 +301,13 @@ nvk_GetMemoryFdKHR(VkDevice _device,
return vk_error(device, VK_ERROR_FEATURE_NOT_PRESENT);
}
}
VKAPI_ATTR uint64_t VKAPI_CALL
nvk_GetDeviceMemoryOpaqueCaptureAddress(
UNUSED VkDevice device,
const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo)
{
VK_FROM_HANDLE(nvk_device_memory, mem, pInfo->memory);
return mem->bo->offset;
}

View file

@ -78,6 +78,9 @@ nvk_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice,
.imagelessFramebuffer = true,
.separateDepthStencilLayouts = true,
.hostQueryReset = true,
.bufferDeviceAddress = true,
.bufferDeviceAddressCaptureReplay = false,
.bufferDeviceAddressMultiDevice = false,
};
VkPhysicalDeviceVulkan13Features core_1_3 = {
@ -109,6 +112,13 @@ nvk_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice,
f->borderColorSwizzleFromImage = false;
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT: {
VkPhysicalDeviceBufferDeviceAddressFeaturesEXT *f = (void *)ext;
f->bufferDeviceAddress = true;
f->bufferDeviceAddressCaptureReplay = false;
f->bufferDeviceAddressMultiDevice = false;
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT: {
VkPhysicalDeviceCustomBorderColorFeaturesEXT *f = (void *)ext;
f->customBorderColors = true;
@ -349,6 +359,7 @@ nvk_get_device_extensions(const struct nvk_physical_device *device,
struct vk_device_extension_table *ext)
{
*ext = (struct vk_device_extension_table) {
.KHR_buffer_device_address = true,
.KHR_copy_commands2 = true,
.KHR_create_renderpass2 = true,
.KHR_dedicated_allocation = true,
@ -369,6 +380,7 @@ nvk_get_device_extensions(const struct nvk_physical_device *device,
#endif
.KHR_variable_pointers = true,
.EXT_border_color_swizzle = true,
.EXT_buffer_device_address = true,
.EXT_custom_border_color = true,
.EXT_extended_dynamic_state = true,
.EXT_extended_dynamic_state2 = true,

View file

@ -61,8 +61,10 @@ nvk_physical_device_spirv_options(const struct nvk_physical_device *pdevice,
return (struct spirv_to_nir_options) {
.caps = {
.image_write_without_format = true,
.physical_storage_buffer_address = true,
},
.ssbo_addr_format = nvk_buffer_addr_format(rs->storage_buffers),
.phys_ssbo_addr_format = nir_address_format_64bit_global,
.ubo_addr_format = nvk_buffer_addr_format(rs->uniform_buffers),
.shared_addr_format = nir_address_format_32bit_offset,
};
@ -237,6 +239,8 @@ nvk_lower_nir(struct nvk_device *device, nir_shader *nir,
nir_address_format_32bit_offset);
NIR_PASS(_, nir, nvk_nir_lower_descriptors, rs, layout);
NIR_PASS(_, nir, nir_lower_explicit_io, nir_var_mem_global,
nir_address_format_64bit_global);
NIR_PASS(_, nir, nir_lower_explicit_io, nir_var_mem_ssbo,
nvk_buffer_addr_format(rs->storage_buffers));
NIR_PASS(_, nir, nir_lower_explicit_io, nir_var_mem_ubo,