diff --git a/src/video_core/renderer_vulkan/vk_instance.cpp b/src/video_core/renderer_vulkan/vk_instance.cpp index c071cc2f8..56cafb9d0 100644 --- a/src/video_core/renderer_vulkan/vk_instance.cpp +++ b/src/video_core/renderer_vulkan/vk_instance.cpp @@ -109,16 +109,13 @@ std::string Instance::GetDriverVersionName() { bool Instance::CreateDevice() { const vk::StructureChain feature_chain = physical_device.getFeatures2< - vk::PhysicalDeviceFeatures2, vk::PhysicalDevicePortabilitySubsetFeaturesKHR, - vk::PhysicalDeviceExtendedDynamicStateFeaturesEXT, + vk::PhysicalDeviceFeatures2, vk::PhysicalDeviceExtendedDynamicStateFeaturesEXT, vk::PhysicalDeviceExtendedDynamicState2FeaturesEXT, vk::PhysicalDeviceExtendedDynamicState3FeaturesEXT, - vk::PhysicalDeviceTimelineSemaphoreFeaturesKHR, - vk::PhysicalDeviceCustomBorderColorFeaturesEXT, vk::PhysicalDeviceIndexTypeUint8FeaturesEXT, - vk::PhysicalDeviceFragmentShaderInterlockFeaturesEXT, - vk::PhysicalDevicePipelineCreationCacheControlFeaturesEXT, - vk::PhysicalDeviceColorWriteEnableFeaturesEXT, - vk::PhysicalDeviceFragmentShaderBarycentricFeaturesKHR>(); + vk::PhysicalDeviceCustomBorderColorFeaturesEXT, + vk::PhysicalDeviceColorWriteEnableFeaturesEXT, vk::PhysicalDeviceVulkan12Features, + vk::PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR, + vk::PhysicalDeviceDepthClipControlFeaturesEXT>(); const vk::StructureChain properties_chain = physical_device.getProperties2(); vk::StructureChain device_chain = { vk::DeviceCreateInfo{ .queueCreateInfoCount = 1u, @@ -200,27 +199,28 @@ bool Instance::CreateDevice() { vk::PhysicalDeviceFeatures2{ .features{ .robustBufferAccess = features.robustBufferAccess, - .independentBlend = true, + .independentBlend = features.independentBlend, .geometryShader = features.geometryShader, .logicOp = features.logicOp, - .multiViewport = true, + .multiViewport = features.multiViewport, .samplerAnisotropy = features.samplerAnisotropy, .fragmentStoresAndAtomics = features.fragmentStoresAndAtomics, - .shaderImageGatherExtended = true, - .shaderStorageImageMultisample = true, + .shaderImageGatherExtended = features.shaderImageGatherExtended, + .shaderStorageImageExtendedFormats = features.shaderStorageImageExtendedFormats, + .shaderStorageImageMultisample = features.shaderStorageImageMultisample, .shaderClipDistance = features.shaderClipDistance, - .shaderInt16 = true, + .shaderInt16 = features.shaderInt16, }, }, vk::PhysicalDeviceVulkan11Features{ .shaderDrawParameters = true, }, vk::PhysicalDeviceVulkan12Features{ - .shaderFloat16 = true, - .scalarBlockLayout = true, - .uniformBufferStandardLayout = true, - .hostQueryReset = true, - .timelineSemaphore = true, + .shaderFloat16 = vk12_features.shaderFloat16, + .scalarBlockLayout = vk12_features.scalarBlockLayout, + .uniformBufferStandardLayout = vk12_features.uniformBufferStandardLayout, + .hostQueryReset = vk12_features.hostQueryReset, + .timelineSemaphore = vk12_features.timelineSemaphore, }, vk::PhysicalDeviceVulkan13Features{ .shaderDemoteToHelperInvocation = true, diff --git a/src/video_core/renderer_vulkan/vk_instance.h b/src/video_core/renderer_vulkan/vk_instance.h index ad6196ab8..cc2660d5d 100644 --- a/src/video_core/renderer_vulkan/vk_instance.h +++ b/src/video_core/renderer_vulkan/vk_instance.h @@ -231,6 +231,7 @@ private: bool fragment_shader_barycentric{}; bool shader_stencil_export{}; bool external_memory_host{}; + bool workgroup_memory_explicit_layout{}; bool color_write_en{}; u64 min_imported_host_pointer_alignment{}; bool tooling_info{};