From 27698b0c932568ca02eb8c4eca6fc80911e6c02a Mon Sep 17 00:00:00 2001 From: GPUCode Date: Wed, 18 Jan 2023 18:14:17 +0200 Subject: [PATCH] vk_instance: Manually enable features * We need these features so better force enable them and have the driver crash if they're unavailable. --- .../renderer_vulkan/vk_instance.cpp | 21 ++++++++++++++----- .../renderer_vulkan/vk_renderpass_cache.cpp | 18 ++++++++-------- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/src/video_core/renderer_vulkan/vk_instance.cpp b/src/video_core/renderer_vulkan/vk_instance.cpp index 8e7e83f3b..89e021968 100644 --- a/src/video_core/renderer_vulkan/vk_instance.cpp +++ b/src/video_core/renderer_vulkan/vk_instance.cpp @@ -515,11 +515,22 @@ bool Instance::CreateDevice() { }, }, feature_chain.get(), - feature_chain.get(), - feature_chain.get(), - feature_chain.get(), - feature_chain.get(), - feature_chain.get(), + vk::PhysicalDeviceTimelineSemaphoreFeaturesKHR{ + .timelineSemaphore = true, + }, + vk::PhysicalDeviceExtendedDynamicStateFeaturesEXT{ + .extendedDynamicState = true, + }, + vk::PhysicalDeviceCustomBorderColorFeaturesEXT{ + .customBorderColors = true, + .customBorderColorWithoutFormat = true, + }, + vk::PhysicalDeviceIndexTypeUint8FeaturesEXT{ + .indexTypeUint8 = true, + }, + vk::PhysicalDevicePipelineCreationCacheControlFeaturesEXT{ + .pipelineCreationCacheControl = true, + }, }; if (portability_subset) { diff --git a/src/video_core/renderer_vulkan/vk_renderpass_cache.cpp b/src/video_core/renderer_vulkan/vk_renderpass_cache.cpp index 73d786480..8af0f5cfd 100644 --- a/src/video_core/renderer_vulkan/vk_renderpass_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_renderpass_cache.cpp @@ -93,16 +93,16 @@ void RenderpassCache::EnterRenderpass(const RenderpassState& state) { } scheduler.Record([state](vk::CommandBuffer cmdbuf) { - const vk::RenderPassBeginInfo renderpass_begin_info = { - .renderPass = state.renderpass, - .framebuffer = state.framebuffer, - .renderArea = state.render_area, - .clearValueCount = 1, - .pClearValues = &state.clear, - }; + const vk::RenderPassBeginInfo renderpass_begin_info = { + .renderPass = state.renderpass, + .framebuffer = state.framebuffer, + .renderArea = state.render_area, + .clearValueCount = 1, + .pClearValues = &state.clear, + }; - cmdbuf.beginRenderPass(renderpass_begin_info, vk::SubpassContents::eInline); - }); + cmdbuf.beginRenderPass(renderpass_begin_info, vk::SubpassContents::eInline); + }); if (is_dirty) { scheduler.MarkStateNonDirty(StateFlags::Renderpass);