[vk] Conditioning Conditional Rendering #2

This commit is contained in:
CamilleLaVey 2025-11-27 13:15:09 -04:00 committed by Caio Oliveira
parent 76538e02c9
commit 58b43ef0b7
3 changed files with 27 additions and 23 deletions

View file

@ -1202,21 +1202,24 @@ struct QueryCacheRuntimeImpl {
hcr_setup.pNext = nullptr; hcr_setup.pNext = nullptr;
hcr_setup.flags = 0; hcr_setup.flags = 0;
conditional_resolve_pass = std::make_unique<ConditionalRenderingResolvePass>( if (device.IsExtConditionalRendering()) {
device, scheduler, descriptor_pool, compute_pass_descriptor_queue); conditional_resolve_pass = std::make_unique<ConditionalRenderingResolvePass>(
device, scheduler, descriptor_pool, compute_pass_descriptor_queue);
const VkBufferCreateInfo buffer_ci = { const VkBufferCreateInfo buffer_ci = {
.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, .sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,
.pNext = nullptr, .pNext = nullptr,
.flags = 0, .flags = 0,
.size = sizeof(u32), .size = sizeof(u32),
.usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | .usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT, VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT,
.sharingMode = VK_SHARING_MODE_EXCLUSIVE, .sharingMode = VK_SHARING_MODE_EXCLUSIVE,
.queueFamilyIndexCount = 0, .queueFamilyIndexCount = 0,
.pQueueFamilyIndices = nullptr, .pQueueFamilyIndices = nullptr,
}; };
hcr_resolve_buffer = memory_allocator.CreateBuffer(buffer_ci, MemoryUsage::DeviceLocal); hcr_resolve_buffer =
memory_allocator.CreateBuffer(buffer_ci, MemoryUsage::DeviceLocal);
}
} }
VideoCore::RasterizerInterface* rasterizer; VideoCore::RasterizerInterface* rasterizer;

View file

@ -379,10 +379,10 @@ void Device::RemoveExtension(bool& extension, const std::string& extension_name)
loaded_extensions.erase(extension_name); loaded_extensions.erase(extension_name);
} }
void Device::RemoveExtensionIfUnsuitable(bool is_suitable, const std::string& extension_name) { void Device::RemoveExtensionIfUnsuitable(bool& extension, const std::string& extension_name) {
if (loaded_extensions.contains(extension_name) && !is_suitable) { if (loaded_extensions.contains(extension_name) && !extension) {
LOG_WARNING(Render_Vulkan, "Removing unsuitable extension {}", extension_name); LOG_WARNING(Render_Vulkan, "Removing unsuitable extension {}", extension_name);
this->RemoveExtension(is_suitable, extension_name); this->RemoveExtension(extension, extension_name);
} }
} }
@ -403,11 +403,12 @@ void Device::RemoveExtensionFeature(bool& extension, Feature& feature,
} }
template <typename Feature> template <typename Feature>
void Device::RemoveExtensionFeatureIfUnsuitable(bool is_suitable, Feature& feature, void Device::RemoveExtensionFeatureIfUnsuitable(bool& extension, Feature& feature,
const std::string& extension_name) { const std::string& extension_name) {
if (loaded_extensions.contains(extension_name) && !is_suitable) { if (loaded_extensions.contains(extension_name) && !extension) {
LOG_WARNING(Render_Vulkan, "Removing features for unsuitable extension {}", extension_name); LOG_WARNING(Render_Vulkan,
this->RemoveExtensionFeature(is_suitable, feature, extension_name); "Removing features for unsuitable extension {}", extension_name);
this->RemoveExtensionFeature(extension, feature, extension_name);
} }
} }

View file

@ -963,13 +963,13 @@ private:
void RemoveUnsuitableExtensions(); void RemoveUnsuitableExtensions();
void RemoveExtension(bool& extension, const std::string& extension_name); 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 <typename Feature> template <typename Feature>
void RemoveExtensionFeature(bool& extension, Feature& feature, void RemoveExtensionFeature(bool& extension, Feature& feature,
const std::string& extension_name); const std::string& extension_name);
template <typename Feature> template <typename Feature>
void RemoveExtensionFeatureIfUnsuitable(bool is_suitable, Feature& feature, void RemoveExtensionFeatureIfUnsuitable(bool& extension, Feature& feature,
const std::string& extension_name); const std::string& extension_name);
/// Sets up queue families. /// Sets up queue families.