From 5227398a6cb9b05d21e69d580a84e27df1472a7e Mon Sep 17 00:00:00 2001 From: Yiwei Zhang Date: Mon, 24 Mar 2025 17:27:29 -0700 Subject: [PATCH] venus: support VK_EXT_buffer_device_address Need a separate feature struct as the capture/replay bit means different things. Part-of: --- docs/features.txt | 2 +- src/virtio/vulkan/vn_buffer.c | 5 +++++ src/virtio/vulkan/vn_physical_device.c | 3 +++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/features.txt b/docs/features.txt index c177e50ae8d..82d3bd3aef1 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -580,7 +580,7 @@ Khronos extensions that are not part of any Vulkan version: VK_EXT_attachment_feedback_loop_layout DONE (anv, lvp, nvk, radv, tu, v3dv, vn) VK_EXT_blend_operation_advanced DONE (vn) VK_EXT_border_color_swizzle DONE (anv, hasvk, lvp, nvk, panvk, radv/gfx10+, tu, v3dv, vn) - VK_EXT_buffer_device_address DONE (anv, hasvk, nvk, panvk, radv) + VK_EXT_buffer_device_address DONE (anv, hasvk, nvk, panvk, radv, vn) VK_EXT_calibrated_timestamps DONE (anv, hasvk, nvk, lvp, radv, vn, tu/a750+) VK_EXT_color_write_enable DONE (anv, hasvk, lvp, nvk, radv, tu, v3dv, vn) VK_EXT_conditional_rendering DONE (anv, hasvk, lvp, nvk, radv, tu, vn) diff --git a/src/virtio/vulkan/vn_buffer.c b/src/virtio/vulkan/vn_buffer.c index ba16c6d7c9a..d04be4adf95 100644 --- a/src/virtio/vulkan/vn_buffer.c +++ b/src/virtio/vulkan/vn_buffer.c @@ -317,6 +317,7 @@ struct vn_buffer_create_info { VkBufferCreateInfo create; VkExternalMemoryBufferCreateInfo external; VkBufferOpaqueCaptureAddressCreateInfo capture; + VkBufferDeviceAddressCreateInfoEXT address; }; static const VkBufferCreateInfo * @@ -340,6 +341,10 @@ vn_buffer_fix_create_info( memcpy(&local_info->capture, src, sizeof(local_info->capture)); next = &local_info->capture; break; + case VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT: + memcpy(&local_info->address, src, sizeof(local_info->address)); + next = &local_info->address; + break; default: break; } diff --git a/src/virtio/vulkan/vn_physical_device.c b/src/virtio/vulkan/vn_physical_device.c index 007d5797f7d..5edd8f825d4 100644 --- a/src/virtio/vulkan/vn_physical_device.c +++ b/src/virtio/vulkan/vn_physical_device.c @@ -200,6 +200,7 @@ vn_physical_device_init_features(struct vn_physical_device *physical_dev) VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT blend_operation_advanced; VkPhysicalDeviceBorderColorSwizzleFeaturesEXT border_color_swizzle; + VkPhysicalDeviceBufferDeviceAddressFeaturesEXT buffer_device_address_ext; VkPhysicalDeviceColorWriteEnableFeaturesEXT color_write_enable; VkPhysicalDeviceConditionalRenderingFeaturesEXT conditional_rendering; VkPhysicalDeviceCustomBorderColorFeaturesEXT custom_border_color; @@ -352,6 +353,7 @@ vn_physical_device_init_features(struct vn_physical_device *physical_dev) VN_ADD_PNEXT_EXT(feats2, ATTACHMENT_FEEDBACK_LOOP_LAYOUT_FEATURES_EXT, local_feats.attachment_feedback_loop_layout, exts->EXT_attachment_feedback_loop_layout); VN_ADD_PNEXT_EXT(feats2, BLEND_OPERATION_ADVANCED_FEATURES_EXT, local_feats.blend_operation_advanced, exts->EXT_blend_operation_advanced); VN_ADD_PNEXT_EXT(feats2, BORDER_COLOR_SWIZZLE_FEATURES_EXT, local_feats.border_color_swizzle, exts->EXT_border_color_swizzle); + VN_ADD_PNEXT_EXT(feats2, BUFFER_DEVICE_ADDRESS_FEATURES_EXT, local_feats.buffer_device_address_ext, exts->EXT_buffer_device_address); VN_ADD_PNEXT_EXT(feats2, COLOR_WRITE_ENABLE_FEATURES_EXT, local_feats.color_write_enable, exts->EXT_color_write_enable); VN_ADD_PNEXT_EXT(feats2, CONDITIONAL_RENDERING_FEATURES_EXT, local_feats.conditional_rendering, exts->EXT_conditional_rendering); VN_ADD_PNEXT_EXT(feats2, CUSTOM_BORDER_COLOR_FEATURES_EXT, local_feats.custom_border_color, exts->EXT_custom_border_color); @@ -1340,6 +1342,7 @@ vn_physical_device_get_passthrough_extensions( .EXT_attachment_feedback_loop_layout = true, .EXT_blend_operation_advanced = true, .EXT_border_color_swizzle = true, + .EXT_buffer_device_address = true, .EXT_calibrated_timestamps = true, .EXT_color_write_enable = true, .EXT_conditional_rendering = true,