From c7efda9341ba43639fc1665cb4db596451e6ebbf Mon Sep 17 00:00:00 2001 From: Peter Harris Date: Wed, 5 Mar 2025 16:42:00 +0000 Subject: [PATCH 1/2] Intercept vkCmdEndRenderPass2[KHR]() calls Fixes #94 --- .../source/layer_device_functions.hpp | 9 +++++ .../layer_device_functions_render_pass.cpp | 34 +++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/layer_gpu_timeline/source/layer_device_functions.hpp b/layer_gpu_timeline/source/layer_device_functions.hpp index 7b3ba0f..a64e28a 100644 --- a/layer_gpu_timeline/source/layer_device_functions.hpp +++ b/layer_gpu_timeline/source/layer_device_functions.hpp @@ -141,6 +141,15 @@ VKAPI_ATTR void VKAPI_CALL layer_vkCmdBeginRenderingKHR(VkCommandBuffe template<> VKAPI_ATTR void VKAPI_CALL layer_vkCmdEndRenderPass(VkCommandBuffer commandBuffer); +/* See Vulkan API for documentation. */ +template<> +VKAPI_ATTR void VKAPI_CALL layer_vkCmdEndRenderPass2(VkCommandBuffer commandBuffer, + const VkSubpassEndInfo* pSubpassEndInfo); +/* See Vulkan API for documentation. */ +template<> +VKAPI_ATTR void VKAPI_CALL layer_vkCmdEndRenderPass2KHR(VkCommandBuffer commandBuffer, + const VkSubpassEndInfo* pSubpassEndInfo); + /* See Vulkan API for documentation. */ template<> VKAPI_ATTR void VKAPI_CALL layer_vkCmdEndRendering(VkCommandBuffer commandBuffer); diff --git a/layer_gpu_timeline/source/layer_device_functions_render_pass.cpp b/layer_gpu_timeline/source/layer_device_functions_render_pass.cpp index 5595583..e729562 100644 --- a/layer_gpu_timeline/source/layer_device_functions_render_pass.cpp +++ b/layer_gpu_timeline/source/layer_device_functions_render_pass.cpp @@ -312,6 +312,40 @@ VKAPI_ATTR void VKAPI_CALL layer_vkCmdEndRenderPass(VkCommandBuffer co layer->driver.vkCmdEndDebugUtilsLabelEXT(commandBuffer); } +/* See Vulkan API for documentation. */ +template<> +VKAPI_ATTR void VKAPI_CALL layer_vkCmdEndRenderPass2(VkCommandBuffer commandBuffer, + const VkSubpassEndInfo* pSubpassEndInfo) +{ + LAYER_TRACE(__func__); + + // Hold the lock to access layer-wide global store + std::unique_lock lock {g_vulkanLock}; + auto* layer = Device::retrieve(commandBuffer); + + // Release the lock to call into the driver + lock.unlock(); + layer->driver.vkCmdEndRenderPass2(commandBuffer, pSubpassEndInfo); + layer->driver.vkCmdEndDebugUtilsLabelEXT(commandBuffer); +} + +/* See Vulkan API for documentation. */ +template<> +VKAPI_ATTR void VKAPI_CALL layer_vkCmdEndRenderPass2KHR(VkCommandBuffer commandBuffer, + const VkSubpassEndInfo* pSubpassEndInfo) +{ + LAYER_TRACE(__func__); + + // Hold the lock to access layer-wide global store + std::unique_lock lock {g_vulkanLock}; + auto* layer = Device::retrieve(commandBuffer); + + // Release the lock to call into the driver + lock.unlock(); + layer->driver.vkCmdEndRenderPass2KHR(commandBuffer, pSubpassEndInfo); + layer->driver.vkCmdEndDebugUtilsLabelEXT(commandBuffer); +} + /* See Vulkan API for documentation. */ template<> VKAPI_ATTR void VKAPI_CALL layer_vkCmdEndRendering(VkCommandBuffer commandBuffer) From 57eb178fd29dd942b9a235fbcda7980f126f51e2 Mon Sep 17 00:00:00 2001 From: Peter Harris Date: Wed, 5 Mar 2025 16:50:37 +0000 Subject: [PATCH 2/2] Whitespace fix --- layer_gpu_timeline/source/layer_device_functions.hpp | 3 ++- .../source/layer_device_functions_render_pass.cpp | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/layer_gpu_timeline/source/layer_device_functions.hpp b/layer_gpu_timeline/source/layer_device_functions.hpp index a64e28a..4f9c110 100644 --- a/layer_gpu_timeline/source/layer_device_functions.hpp +++ b/layer_gpu_timeline/source/layer_device_functions.hpp @@ -145,7 +145,8 @@ VKAPI_ATTR void VKAPI_CALL layer_vkCmdEndRenderPass(VkCommandBuffer co template<> VKAPI_ATTR void VKAPI_CALL layer_vkCmdEndRenderPass2(VkCommandBuffer commandBuffer, const VkSubpassEndInfo* pSubpassEndInfo); -/* See Vulkan API for documentation. */ + + /* See Vulkan API for documentation. */ template<> VKAPI_ATTR void VKAPI_CALL layer_vkCmdEndRenderPass2KHR(VkCommandBuffer commandBuffer, const VkSubpassEndInfo* pSubpassEndInfo); diff --git a/layer_gpu_timeline/source/layer_device_functions_render_pass.cpp b/layer_gpu_timeline/source/layer_device_functions_render_pass.cpp index e729562..05f9ab4 100644 --- a/layer_gpu_timeline/source/layer_device_functions_render_pass.cpp +++ b/layer_gpu_timeline/source/layer_device_functions_render_pass.cpp @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: MIT * ---------------------------------------------------------------------------- - * Copyright (c) 2024 Arm Limited + * Copyright (c) 2024-2025 Arm Limited * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to