mirror of
https://git.eden-emu.dev/eden-emu/eden
synced 2026-05-24 17:47:05 +02:00
[vk] Conditioning Conditional Rendering #2
This commit is contained in:
parent
76538e02c9
commit
58b43ef0b7
3 changed files with 27 additions and 23 deletions
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue