mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-21 22:20:14 +01:00
nvk: Implement VK_EXT/KHR_buffer_device_address
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24326>
This commit is contained in:
parent
07f48c925b
commit
ed6d5c33c6
4 changed files with 44 additions and 0 deletions
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue