diff --git a/docs/features.txt b/docs/features.txt index cf27517dc8d..cbeffba6b89 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -682,7 +682,7 @@ Khronos extensions that are not part of any Vulkan version: VK_NV_compute_shader_derivatives DONE (anv, hasvk, nvk, radv, vn) VK_EXT_acquire_drm_display DONE (anv, hk, nvk, radv, tu, v3dv, vn) VK_VALVE_mutable_descriptor_type DONE (anv, hasvk, hk, nvk, radv, tu, vn) - VK_AMD_buffer_marker DONE (anv, radv, tu) + VK_AMD_buffer_marker DONE (anv, nvk, radv, tu) VK_AMD_device_coherent_memory DONE (radv) VK_AMD_draw_indirect_count DONE (radv) VK_AMD_gcn_shader DONE (radv) diff --git a/docs/relnotes/new_features.txt b/docs/relnotes/new_features.txt index 2537485f720..87b9f701fb4 100644 --- a/docs/relnotes/new_features.txt +++ b/docs/relnotes/new_features.txt @@ -18,3 +18,4 @@ GL_NV_shader_atomic_int64 on radeonsi and Panfrost V9+ VK_KHR_maintenance7 on panvk/v10+ VK_KHR_maintenance8 on panvk/v10+ VK_KHR_maintenance9 on panvk +VK_AMD_buffer_marker on NVK diff --git a/src/nouveau/vulkan/nvk_cmd_buffer.c b/src/nouveau/vulkan/nvk_cmd_buffer.c index 8cb78d96ad8..76a03dd2a39 100644 --- a/src/nouveau/vulkan/nvk_cmd_buffer.c +++ b/src/nouveau/vulkan/nvk_cmd_buffer.c @@ -10,6 +10,7 @@ #include "nvk_device.h" #include "nvk_device_memory.h" #include "nvk_entrypoints.h" +#include "nvk_event.h" #include "nvk_mme.h" #include "nvk_physical_device.h" #include "nvk_shader.h" @@ -21,6 +22,7 @@ #include "clb097.h" #include "clcb97.h" #include "nv_push_cl906f.h" +#include "nv_push_cl9097.h" #include "nv_push_cl90b5.h" #include "nv_push_cla097.h" #include "nv_push_cla0c0.h" @@ -1257,3 +1259,25 @@ nvk_CmdPushDescriptorSetWithTemplate2KHR( VK_SHADER_STAGE_COMPUTE_BIT, set, set + 1); } + +VKAPI_ATTR void VKAPI_CALL +nvk_CmdWriteBufferMarker2AMD(VkCommandBuffer commandBuffer, + VkPipelineStageFlags2 stage, + VkBuffer _buffer, + VkDeviceSize offset, + uint32_t marker) +{ + VK_FROM_HANDLE(nvk_cmd_buffer, cmd, commandBuffer); + VK_FROM_HANDLE(nvk_buffer, buffer, _buffer); + const uint64_t marker_addr = vk_buffer_address(&buffer->vk, offset); + struct nv_push *p = nvk_cmd_buffer_push(cmd, 5); + + P_MTHD(p, NV9097, SET_REPORT_SEMAPHORE_A); + P_NV9097_SET_REPORT_SEMAPHORE_A(p, marker_addr >> 32); + P_NV9097_SET_REPORT_SEMAPHORE_B(p, marker_addr); + P_NV9097_SET_REPORT_SEMAPHORE_C(p, marker); + P_NV9097_SET_REPORT_SEMAPHORE_D(p, { + .pipeline_location = vk_stage_flags_to_nv9097_pipeline_location(stage), + .structure_size = STRUCTURE_SIZE_ONE_WORD, + }); +} \ No newline at end of file diff --git a/src/nouveau/vulkan/nvk_physical_device.c b/src/nouveau/vulkan/nvk_physical_device.c index c9ef58a7d18..15bf22498f0 100644 --- a/src/nouveau/vulkan/nvk_physical_device.c +++ b/src/nouveau/vulkan/nvk_physical_device.c @@ -280,6 +280,7 @@ nvk_get_device_extensions(const struct nvk_instance *instance, .EXT_ycbcr_2plane_444_formats = true, .EXT_ycbcr_image_arrays = true, .EXT_zero_initialize_device_memory = true, + .AMD_buffer_marker = true, #if DETECT_OS_ANDROID .ANDROID_native_buffer = vk_android_get_ugralloc() != NULL, #endif