diff --git a/src/video_core/renderer_vulkan/vk_query_cache.cpp b/src/video_core/renderer_vulkan/vk_query_cache.cpp index 2b47ea7dd7..4997747ef3 100644 --- a/src/video_core/renderer_vulkan/vk_query_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_query_cache.cpp @@ -1200,21 +1200,24 @@ struct QueryCacheRuntimeImpl { hcr_setup.pNext = nullptr; hcr_setup.flags = 0; - conditional_resolve_pass = std::make_unique( - device, scheduler, descriptor_pool, compute_pass_descriptor_queue); - - const VkBufferCreateInfo buffer_ci = { - .sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, - .pNext = nullptr, - .flags = 0, - .size = sizeof(u32), - .usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | - VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT, - .sharingMode = VK_SHARING_MODE_EXCLUSIVE, - .queueFamilyIndexCount = 0, - .pQueueFamilyIndices = nullptr, - }; - hcr_resolve_buffer = memory_allocator.CreateBuffer(buffer_ci, MemoryUsage::DeviceLocal); + if (device.IsExtConditionalRendering()) { + conditional_resolve_pass = std::make_unique( + device, scheduler, descriptor_pool, compute_pass_descriptor_queue); + + const VkBufferCreateInfo buffer_ci = { + .sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, + .pNext = nullptr, + .flags = 0, + .size = sizeof(u32), + .usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | + VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT, + .sharingMode = VK_SHARING_MODE_EXCLUSIVE, + .queueFamilyIndexCount = 0, + .pQueueFamilyIndices = nullptr, + }; + hcr_resolve_buffer = + memory_allocator.CreateBuffer(buffer_ci, MemoryUsage::DeviceLocal); + } } VideoCore::RasterizerInterface* rasterizer; diff --git a/src/video_core/vulkan_common/vulkan_device.cpp b/src/video_core/vulkan_common/vulkan_device.cpp index dee5d50eac..1352808d91 100644 --- a/src/video_core/vulkan_common/vulkan_device.cpp +++ b/src/video_core/vulkan_common/vulkan_device.cpp @@ -377,10 +377,10 @@ void Device::RemoveExtension(bool& extension, const std::string& extension_name) loaded_extensions.erase(extension_name); } -void Device::RemoveExtensionIfUnsuitable(bool is_suitable, const std::string& extension_name) { - if (loaded_extensions.contains(extension_name) && !is_suitable) { +void Device::RemoveExtensionIfUnsuitable(bool& extension, const std::string& extension_name) { + if (loaded_extensions.contains(extension_name) && !extension) { LOG_WARNING(Render_Vulkan, "Removing unsuitable extension {}", extension_name); - this->RemoveExtension(is_suitable, extension_name); + this->RemoveExtension(extension, extension_name); } } @@ -401,11 +401,12 @@ void Device::RemoveExtensionFeature(bool& extension, Feature& feature, } template -void Device::RemoveExtensionFeatureIfUnsuitable(bool is_suitable, Feature& feature, +void Device::RemoveExtensionFeatureIfUnsuitable(bool& extension, Feature& feature, const std::string& extension_name) { - if (loaded_extensions.contains(extension_name) && !is_suitable) { - LOG_WARNING(Render_Vulkan, "Removing features for unsuitable extension {}", extension_name); - this->RemoveExtensionFeature(is_suitable, feature, extension_name); + if (loaded_extensions.contains(extension_name) && !extension) { + LOG_WARNING(Render_Vulkan, + "Removing features for unsuitable extension {}", extension_name); + this->RemoveExtensionFeature(extension, feature, extension_name); } } diff --git a/src/video_core/vulkan_common/vulkan_device.h b/src/video_core/vulkan_common/vulkan_device.h index b4c98fbc8e..621a2b607d 100644 --- a/src/video_core/vulkan_common/vulkan_device.h +++ b/src/video_core/vulkan_common/vulkan_device.h @@ -963,13 +963,13 @@ private: void RemoveUnsuitableExtensions(); void RemoveExtension(bool& extension, const std::string& extension_name); - void RemoveExtensionIfUnsuitable(bool is_suitable, const std::string& extension_name); + void RemoveExtensionIfUnsuitable(bool& extension, const std::string& extension_name); template void RemoveExtensionFeature(bool& extension, Feature& feature, const std::string& extension_name); template - void RemoveExtensionFeatureIfUnsuitable(bool is_suitable, Feature& feature, + void RemoveExtensionFeatureIfUnsuitable(bool& extension, Feature& feature, const std::string& extension_name); /// Sets up queue families.