mirror of
https://github.com/yuzu-emu/yuzu-android.git
synced 2025-06-17 01:58:19 -05:00
Query Cachge: Fully rework Vulkan's query cache
This commit is contained in:
@ -61,6 +61,7 @@ VK_DEFINE_HANDLE(VmaAllocator)
|
||||
|
||||
// Define miscellaneous extensions which may be used by the implementation here.
|
||||
#define FOR_EACH_VK_EXTENSION(EXTENSION) \
|
||||
EXTENSION(EXT, CONDITIONAL_RENDERING, conditional_rendering) \
|
||||
EXTENSION(EXT, CONSERVATIVE_RASTERIZATION, conservative_rasterization) \
|
||||
EXTENSION(EXT, DEPTH_RANGE_UNRESTRICTED, depth_range_unrestricted) \
|
||||
EXTENSION(EXT, MEMORY_BUDGET, memory_budget) \
|
||||
@ -93,6 +94,7 @@ VK_DEFINE_HANDLE(VmaAllocator)
|
||||
|
||||
// Define extensions where the absence of the extension may result in a degraded experience.
|
||||
#define FOR_EACH_VK_RECOMMENDED_EXTENSION(EXTENSION_NAME) \
|
||||
EXTENSION_NAME(VK_EXT_CONDITIONAL_RENDERING_EXTENSION_NAME) \
|
||||
EXTENSION_NAME(VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME) \
|
||||
EXTENSION_NAME(VK_EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME) \
|
||||
EXTENSION_NAME(VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME) \
|
||||
@ -536,6 +538,10 @@ public:
|
||||
return extensions.shader_atomic_int64;
|
||||
}
|
||||
|
||||
bool IsExtConditionalRendering() const {
|
||||
return extensions.conditional_rendering;
|
||||
}
|
||||
|
||||
bool HasTimelineSemaphore() const;
|
||||
|
||||
/// Returns the minimum supported version of SPIR-V.
|
||||
|
@ -75,6 +75,7 @@ void Load(VkDevice device, DeviceDispatch& dld) noexcept {
|
||||
X(vkBeginCommandBuffer);
|
||||
X(vkBindBufferMemory);
|
||||
X(vkBindImageMemory);
|
||||
X(vkCmdBeginConditionalRenderingEXT);
|
||||
X(vkCmdBeginQuery);
|
||||
X(vkCmdBeginRenderPass);
|
||||
X(vkCmdBeginTransformFeedbackEXT);
|
||||
@ -91,6 +92,7 @@ void Load(VkDevice device, DeviceDispatch& dld) noexcept {
|
||||
X(vkCmdCopyBufferToImage);
|
||||
X(vkCmdCopyImage);
|
||||
X(vkCmdCopyImageToBuffer);
|
||||
X(vkCmdCopyQueryPoolResults);
|
||||
X(vkCmdDispatch);
|
||||
X(vkCmdDispatchIndirect);
|
||||
X(vkCmdDraw);
|
||||
@ -99,6 +101,7 @@ void Load(VkDevice device, DeviceDispatch& dld) noexcept {
|
||||
X(vkCmdDrawIndexedIndirect);
|
||||
X(vkCmdDrawIndirectCount);
|
||||
X(vkCmdDrawIndexedIndirectCount);
|
||||
X(vkCmdEndConditionalRenderingEXT);
|
||||
X(vkCmdEndQuery);
|
||||
X(vkCmdEndRenderPass);
|
||||
X(vkCmdEndTransformFeedbackEXT);
|
||||
|
@ -185,6 +185,7 @@ struct DeviceDispatch : InstanceDispatch {
|
||||
PFN_vkBeginCommandBuffer vkBeginCommandBuffer{};
|
||||
PFN_vkBindBufferMemory vkBindBufferMemory{};
|
||||
PFN_vkBindImageMemory vkBindImageMemory{};
|
||||
PFN_vkCmdBeginConditionalRenderingEXT vkCmdBeginConditionalRenderingEXT{};
|
||||
PFN_vkCmdBeginDebugUtilsLabelEXT vkCmdBeginDebugUtilsLabelEXT{};
|
||||
PFN_vkCmdBeginQuery vkCmdBeginQuery{};
|
||||
PFN_vkCmdBeginRenderPass vkCmdBeginRenderPass{};
|
||||
@ -202,6 +203,7 @@ struct DeviceDispatch : InstanceDispatch {
|
||||
PFN_vkCmdCopyBufferToImage vkCmdCopyBufferToImage{};
|
||||
PFN_vkCmdCopyImage vkCmdCopyImage{};
|
||||
PFN_vkCmdCopyImageToBuffer vkCmdCopyImageToBuffer{};
|
||||
PFN_vkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResults{};
|
||||
PFN_vkCmdDispatch vkCmdDispatch{};
|
||||
PFN_vkCmdDispatchIndirect vkCmdDispatchIndirect{};
|
||||
PFN_vkCmdDraw vkCmdDraw{};
|
||||
@ -210,6 +212,7 @@ struct DeviceDispatch : InstanceDispatch {
|
||||
PFN_vkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirect{};
|
||||
PFN_vkCmdDrawIndirectCount vkCmdDrawIndirectCount{};
|
||||
PFN_vkCmdDrawIndexedIndirectCount vkCmdDrawIndexedIndirectCount{};
|
||||
PFN_vkCmdEndConditionalRenderingEXT vkCmdEndConditionalRenderingEXT{};
|
||||
PFN_vkCmdEndDebugUtilsLabelEXT vkCmdEndDebugUtilsLabelEXT{};
|
||||
PFN_vkCmdEndQuery vkCmdEndQuery{};
|
||||
PFN_vkCmdEndRenderPass vkCmdEndRenderPass{};
|
||||
@ -1270,6 +1273,13 @@ public:
|
||||
regions.data());
|
||||
}
|
||||
|
||||
void CopyQueryPoolResults(VkQueryPool query_pool, u32 first_query, u32 query_count,
|
||||
VkBuffer dst_buffer, VkDeviceSize dst_offset, VkDeviceSize stride,
|
||||
VkQueryResultFlags flags) const noexcept {
|
||||
dld->vkCmdCopyQueryPoolResults(handle, query_pool, first_query, query_count, dst_buffer,
|
||||
dst_offset, stride, flags);
|
||||
}
|
||||
|
||||
void FillBuffer(VkBuffer dst_buffer, VkDeviceSize dst_offset, VkDeviceSize size,
|
||||
u32 data) const noexcept {
|
||||
dld->vkCmdFillBuffer(handle, dst_buffer, dst_offset, size, data);
|
||||
@ -1448,6 +1458,15 @@ public:
|
||||
counter_buffers, counter_buffer_offsets);
|
||||
}
|
||||
|
||||
void BeginConditionalRenderingEXT(
|
||||
const VkConditionalRenderingBeginInfoEXT& info) const noexcept {
|
||||
dld->vkCmdBeginConditionalRenderingEXT(handle, &info);
|
||||
}
|
||||
|
||||
void EndConditionalRenderingEXT() const noexcept {
|
||||
dld->vkCmdEndConditionalRenderingEXT(handle);
|
||||
}
|
||||
|
||||
void BeginDebugUtilsLabelEXT(const char* label, std::span<float, 4> color) const noexcept {
|
||||
const VkDebugUtilsLabelEXT label_info{
|
||||
.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT,
|
||||
|
Reference in New Issue
Block a user