diff options
| author | 2023-08-04 03:32:30 +0200 | |
|---|---|---|
| committer | 2023-09-23 23:05:29 +0200 | |
| commit | f1a2e367113518b277f34ffbb04499882c3b6051 (patch) | |
| tree | 0920a98bd359b9207130d01f6df4ae5135ec805c /src/video_core/vulkan_common | |
| parent | Query Cache: Setup Base rework (diff) | |
| download | yuzu-f1a2e367113518b277f34ffbb04499882c3b6051.tar.gz yuzu-f1a2e367113518b277f34ffbb04499882c3b6051.tar.xz yuzu-f1a2e367113518b277f34ffbb04499882c3b6051.zip | |
Query Cachge: Fully rework Vulkan's query cache
Diffstat (limited to 'src/video_core/vulkan_common')
| -rw-r--r-- | src/video_core/vulkan_common/vulkan_device.h | 6 | ||||
| -rw-r--r-- | src/video_core/vulkan_common/vulkan_wrapper.cpp | 3 | ||||
| -rw-r--r-- | src/video_core/vulkan_common/vulkan_wrapper.h | 19 |
3 files changed, 28 insertions, 0 deletions
diff --git a/src/video_core/vulkan_common/vulkan_device.h b/src/video_core/vulkan_common/vulkan_device.h index 6c7fa34e5..16f0425be 100644 --- a/src/video_core/vulkan_common/vulkan_device.h +++ b/src/video_core/vulkan_common/vulkan_device.h | |||
| @@ -61,6 +61,7 @@ VK_DEFINE_HANDLE(VmaAllocator) | |||
| 61 | 61 | ||
| 62 | // Define miscellaneous extensions which may be used by the implementation here. | 62 | // Define miscellaneous extensions which may be used by the implementation here. |
| 63 | #define FOR_EACH_VK_EXTENSION(EXTENSION) \ | 63 | #define FOR_EACH_VK_EXTENSION(EXTENSION) \ |
| 64 | EXTENSION(EXT, CONDITIONAL_RENDERING, conditional_rendering) \ | ||
| 64 | EXTENSION(EXT, CONSERVATIVE_RASTERIZATION, conservative_rasterization) \ | 65 | EXTENSION(EXT, CONSERVATIVE_RASTERIZATION, conservative_rasterization) \ |
| 65 | EXTENSION(EXT, DEPTH_RANGE_UNRESTRICTED, depth_range_unrestricted) \ | 66 | EXTENSION(EXT, DEPTH_RANGE_UNRESTRICTED, depth_range_unrestricted) \ |
| 66 | EXTENSION(EXT, MEMORY_BUDGET, memory_budget) \ | 67 | EXTENSION(EXT, MEMORY_BUDGET, memory_budget) \ |
| @@ -93,6 +94,7 @@ VK_DEFINE_HANDLE(VmaAllocator) | |||
| 93 | 94 | ||
| 94 | // Define extensions where the absence of the extension may result in a degraded experience. | 95 | // Define extensions where the absence of the extension may result in a degraded experience. |
| 95 | #define FOR_EACH_VK_RECOMMENDED_EXTENSION(EXTENSION_NAME) \ | 96 | #define FOR_EACH_VK_RECOMMENDED_EXTENSION(EXTENSION_NAME) \ |
| 97 | EXTENSION_NAME(VK_EXT_CONDITIONAL_RENDERING_EXTENSION_NAME) \ | ||
| 96 | EXTENSION_NAME(VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME) \ | 98 | EXTENSION_NAME(VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME) \ |
| 97 | EXTENSION_NAME(VK_EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME) \ | 99 | EXTENSION_NAME(VK_EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME) \ |
| 98 | EXTENSION_NAME(VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME) \ | 100 | EXTENSION_NAME(VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME) \ |
| @@ -536,6 +538,10 @@ public: | |||
| 536 | return extensions.shader_atomic_int64; | 538 | return extensions.shader_atomic_int64; |
| 537 | } | 539 | } |
| 538 | 540 | ||
| 541 | bool IsExtConditionalRendering() const { | ||
| 542 | return extensions.conditional_rendering; | ||
| 543 | } | ||
| 544 | |||
| 539 | bool HasTimelineSemaphore() const; | 545 | bool HasTimelineSemaphore() const; |
| 540 | 546 | ||
| 541 | /// Returns the minimum supported version of SPIR-V. | 547 | /// Returns the minimum supported version of SPIR-V. |
diff --git a/src/video_core/vulkan_common/vulkan_wrapper.cpp b/src/video_core/vulkan_common/vulkan_wrapper.cpp index c3f388d89..5a08a92e1 100644 --- a/src/video_core/vulkan_common/vulkan_wrapper.cpp +++ b/src/video_core/vulkan_common/vulkan_wrapper.cpp | |||
| @@ -75,6 +75,7 @@ void Load(VkDevice device, DeviceDispatch& dld) noexcept { | |||
| 75 | X(vkBeginCommandBuffer); | 75 | X(vkBeginCommandBuffer); |
| 76 | X(vkBindBufferMemory); | 76 | X(vkBindBufferMemory); |
| 77 | X(vkBindImageMemory); | 77 | X(vkBindImageMemory); |
| 78 | X(vkCmdBeginConditionalRenderingEXT); | ||
| 78 | X(vkCmdBeginQuery); | 79 | X(vkCmdBeginQuery); |
| 79 | X(vkCmdBeginRenderPass); | 80 | X(vkCmdBeginRenderPass); |
| 80 | X(vkCmdBeginTransformFeedbackEXT); | 81 | X(vkCmdBeginTransformFeedbackEXT); |
| @@ -91,6 +92,7 @@ void Load(VkDevice device, DeviceDispatch& dld) noexcept { | |||
| 91 | X(vkCmdCopyBufferToImage); | 92 | X(vkCmdCopyBufferToImage); |
| 92 | X(vkCmdCopyImage); | 93 | X(vkCmdCopyImage); |
| 93 | X(vkCmdCopyImageToBuffer); | 94 | X(vkCmdCopyImageToBuffer); |
| 95 | X(vkCmdCopyQueryPoolResults); | ||
| 94 | X(vkCmdDispatch); | 96 | X(vkCmdDispatch); |
| 95 | X(vkCmdDispatchIndirect); | 97 | X(vkCmdDispatchIndirect); |
| 96 | X(vkCmdDraw); | 98 | X(vkCmdDraw); |
| @@ -99,6 +101,7 @@ void Load(VkDevice device, DeviceDispatch& dld) noexcept { | |||
| 99 | X(vkCmdDrawIndexedIndirect); | 101 | X(vkCmdDrawIndexedIndirect); |
| 100 | X(vkCmdDrawIndirectCount); | 102 | X(vkCmdDrawIndirectCount); |
| 101 | X(vkCmdDrawIndexedIndirectCount); | 103 | X(vkCmdDrawIndexedIndirectCount); |
| 104 | X(vkCmdEndConditionalRenderingEXT); | ||
| 102 | X(vkCmdEndQuery); | 105 | X(vkCmdEndQuery); |
| 103 | X(vkCmdEndRenderPass); | 106 | X(vkCmdEndRenderPass); |
| 104 | X(vkCmdEndTransformFeedbackEXT); | 107 | X(vkCmdEndTransformFeedbackEXT); |
diff --git a/src/video_core/vulkan_common/vulkan_wrapper.h b/src/video_core/vulkan_common/vulkan_wrapper.h index 049fa8038..27d94a7d5 100644 --- a/src/video_core/vulkan_common/vulkan_wrapper.h +++ b/src/video_core/vulkan_common/vulkan_wrapper.h | |||
| @@ -185,6 +185,7 @@ struct DeviceDispatch : InstanceDispatch { | |||
| 185 | PFN_vkBeginCommandBuffer vkBeginCommandBuffer{}; | 185 | PFN_vkBeginCommandBuffer vkBeginCommandBuffer{}; |
| 186 | PFN_vkBindBufferMemory vkBindBufferMemory{}; | 186 | PFN_vkBindBufferMemory vkBindBufferMemory{}; |
| 187 | PFN_vkBindImageMemory vkBindImageMemory{}; | 187 | PFN_vkBindImageMemory vkBindImageMemory{}; |
| 188 | PFN_vkCmdBeginConditionalRenderingEXT vkCmdBeginConditionalRenderingEXT{}; | ||
| 188 | PFN_vkCmdBeginDebugUtilsLabelEXT vkCmdBeginDebugUtilsLabelEXT{}; | 189 | PFN_vkCmdBeginDebugUtilsLabelEXT vkCmdBeginDebugUtilsLabelEXT{}; |
| 189 | PFN_vkCmdBeginQuery vkCmdBeginQuery{}; | 190 | PFN_vkCmdBeginQuery vkCmdBeginQuery{}; |
| 190 | PFN_vkCmdBeginRenderPass vkCmdBeginRenderPass{}; | 191 | PFN_vkCmdBeginRenderPass vkCmdBeginRenderPass{}; |
| @@ -202,6 +203,7 @@ struct DeviceDispatch : InstanceDispatch { | |||
| 202 | PFN_vkCmdCopyBufferToImage vkCmdCopyBufferToImage{}; | 203 | PFN_vkCmdCopyBufferToImage vkCmdCopyBufferToImage{}; |
| 203 | PFN_vkCmdCopyImage vkCmdCopyImage{}; | 204 | PFN_vkCmdCopyImage vkCmdCopyImage{}; |
| 204 | PFN_vkCmdCopyImageToBuffer vkCmdCopyImageToBuffer{}; | 205 | PFN_vkCmdCopyImageToBuffer vkCmdCopyImageToBuffer{}; |
| 206 | PFN_vkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResults{}; | ||
| 205 | PFN_vkCmdDispatch vkCmdDispatch{}; | 207 | PFN_vkCmdDispatch vkCmdDispatch{}; |
| 206 | PFN_vkCmdDispatchIndirect vkCmdDispatchIndirect{}; | 208 | PFN_vkCmdDispatchIndirect vkCmdDispatchIndirect{}; |
| 207 | PFN_vkCmdDraw vkCmdDraw{}; | 209 | PFN_vkCmdDraw vkCmdDraw{}; |
| @@ -210,6 +212,7 @@ struct DeviceDispatch : InstanceDispatch { | |||
| 210 | PFN_vkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirect{}; | 212 | PFN_vkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirect{}; |
| 211 | PFN_vkCmdDrawIndirectCount vkCmdDrawIndirectCount{}; | 213 | PFN_vkCmdDrawIndirectCount vkCmdDrawIndirectCount{}; |
| 212 | PFN_vkCmdDrawIndexedIndirectCount vkCmdDrawIndexedIndirectCount{}; | 214 | PFN_vkCmdDrawIndexedIndirectCount vkCmdDrawIndexedIndirectCount{}; |
| 215 | PFN_vkCmdEndConditionalRenderingEXT vkCmdEndConditionalRenderingEXT{}; | ||
| 213 | PFN_vkCmdEndDebugUtilsLabelEXT vkCmdEndDebugUtilsLabelEXT{}; | 216 | PFN_vkCmdEndDebugUtilsLabelEXT vkCmdEndDebugUtilsLabelEXT{}; |
| 214 | PFN_vkCmdEndQuery vkCmdEndQuery{}; | 217 | PFN_vkCmdEndQuery vkCmdEndQuery{}; |
| 215 | PFN_vkCmdEndRenderPass vkCmdEndRenderPass{}; | 218 | PFN_vkCmdEndRenderPass vkCmdEndRenderPass{}; |
| @@ -1270,6 +1273,13 @@ public: | |||
| 1270 | regions.data()); | 1273 | regions.data()); |
| 1271 | } | 1274 | } |
| 1272 | 1275 | ||
| 1276 | void CopyQueryPoolResults(VkQueryPool query_pool, u32 first_query, u32 query_count, | ||
| 1277 | VkBuffer dst_buffer, VkDeviceSize dst_offset, VkDeviceSize stride, | ||
| 1278 | VkQueryResultFlags flags) const noexcept { | ||
| 1279 | dld->vkCmdCopyQueryPoolResults(handle, query_pool, first_query, query_count, dst_buffer, | ||
| 1280 | dst_offset, stride, flags); | ||
| 1281 | } | ||
| 1282 | |||
| 1273 | void FillBuffer(VkBuffer dst_buffer, VkDeviceSize dst_offset, VkDeviceSize size, | 1283 | void FillBuffer(VkBuffer dst_buffer, VkDeviceSize dst_offset, VkDeviceSize size, |
| 1274 | u32 data) const noexcept { | 1284 | u32 data) const noexcept { |
| 1275 | dld->vkCmdFillBuffer(handle, dst_buffer, dst_offset, size, data); | 1285 | dld->vkCmdFillBuffer(handle, dst_buffer, dst_offset, size, data); |
| @@ -1448,6 +1458,15 @@ public: | |||
| 1448 | counter_buffers, counter_buffer_offsets); | 1458 | counter_buffers, counter_buffer_offsets); |
| 1449 | } | 1459 | } |
| 1450 | 1460 | ||
| 1461 | void BeginConditionalRenderingEXT( | ||
| 1462 | const VkConditionalRenderingBeginInfoEXT& info) const noexcept { | ||
| 1463 | dld->vkCmdBeginConditionalRenderingEXT(handle, &info); | ||
| 1464 | } | ||
| 1465 | |||
| 1466 | void EndConditionalRenderingEXT() const noexcept { | ||
| 1467 | dld->vkCmdEndConditionalRenderingEXT(handle); | ||
| 1468 | } | ||
| 1469 | |||
| 1451 | void BeginDebugUtilsLabelEXT(const char* label, std::span<float, 4> color) const noexcept { | 1470 | void BeginDebugUtilsLabelEXT(const char* label, std::span<float, 4> color) const noexcept { |
| 1452 | const VkDebugUtilsLabelEXT label_info{ | 1471 | const VkDebugUtilsLabelEXT label_info{ |
| 1453 | .sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT, | 1472 | .sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT, |