diff --git a/app/src/main/cpp/skyline/gpu.cpp b/app/src/main/cpp/skyline/gpu.cpp index b5729066..69e4c6a8 100644 --- a/app/src/main/cpp/skyline/gpu.cpp +++ b/app/src/main/cpp/skyline/gpu.cpp @@ -123,7 +123,7 @@ namespace skyline::gpu { const vk::raii::PhysicalDevice &physicalDevice, decltype(vk::DeviceQueueCreateInfo::queueCount) &vkQueueFamilyIndex, QuirkManager &quirks) { - auto deviceFeatures2{physicalDevice.getFeatures2()}; + auto deviceFeatures2{physicalDevice.getFeatures2()}; decltype(deviceFeatures2) enabledFeatures2{}; // We only want to enable features we required due to potential overhead from unused features #define FEAT_REQ(structName, feature) \ diff --git a/app/src/main/cpp/skyline/gpu/quirk_manager.cpp b/app/src/main/cpp/skyline/gpu/quirk_manager.cpp index 8ff20248..62a6d8a5 100644 --- a/app/src/main/cpp/skyline/gpu/quirk_manager.cpp +++ b/app/src/main/cpp/skyline/gpu/quirk_manager.cpp @@ -7,6 +7,7 @@ namespace skyline::gpu { QuirkManager::QuirkManager(const DeviceFeatures2 &deviceFeatures2, DeviceFeatures2 &enabledFeatures2, const std::vector &deviceExtensions, std::vector> &enabledExtensions, const DeviceProperties2 &deviceProperties2) { bool hasCustomBorderColorExtension{}, hasShaderAtomicInt64{}, hasShaderFloat16Int8Ext{}, hasShaderDemoteToHelper{}; + bool supportsUniformBufferStandardLayout{}; // We require VK_KHR_uniform_buffer_standard_layout but assume it is implicitly supported even when not present for (auto &extension : deviceExtensions) { #define EXT_SET(name, property) \ @@ -40,6 +41,7 @@ namespace skyline::gpu { EXT_SET("VK_KHR_shader_atomic_int64", hasShaderAtomicInt64); EXT_SET("VK_KHR_shader_float16_int8", hasShaderFloat16Int8Ext); EXT_SET("VK_KHR_shader_float_controls", supportsFloatControls); + EXT_SET("VK_KHR_uniform_buffer_standard_layout", supportsUniformBufferStandardLayout); } #undef EXT_SET @@ -94,6 +96,14 @@ namespace skyline::gpu { else enabledFeatures2.unlink(); + + if (supportsUniformBufferStandardLayout) { + FEAT_SET(vk::PhysicalDeviceUniformBufferStandardLayoutFeatures, uniformBufferStandardLayout, supportsUniformBufferStandardLayout) + }else { + enabledFeatures2.unlink(); + Logger::Warn("Cannot find VK_KHR_uniform_buffer_standard_layout, assuming implicit support"); + } + #undef FEAT_SET if (supportsFloatControls) diff --git a/app/src/main/cpp/skyline/gpu/quirk_manager.h b/app/src/main/cpp/skyline/gpu/quirk_manager.h index efd42e9e..495cd3fc 100644 --- a/app/src/main/cpp/skyline/gpu/quirk_manager.h +++ b/app/src/main/cpp/skyline/gpu/quirk_manager.h @@ -39,7 +39,7 @@ namespace skyline::gpu { using DeviceProperties2 = vk::StructureChain; - using DeviceFeatures2 = vk::StructureChain; + using DeviceFeatures2 = vk::StructureChain; QuirkManager(const DeviceFeatures2 &deviceFeatures2, DeviceFeatures2 &enabledFeatures2, const std::vector &deviceExtensions, std::vector> &enabledExtensions, const DeviceProperties2 &deviceProperties2);