diff --git a/app/src/main/cpp/skyline/gpu/shader_manager.cpp b/app/src/main/cpp/skyline/gpu/shader_manager.cpp index e10ea888..3b09969e 100644 --- a/app/src/main/cpp/skyline/gpu/shader_manager.cpp +++ b/app/src/main/cpp/skyline/gpu/shader_manager.cpp @@ -35,7 +35,7 @@ namespace skyline::gpu { profile = Shader::Profile{ .supported_spirv = traits.supportsSpirv14 ? 0x00010400U : 0x00010000U, .unified_descriptor_binding = true, - .support_descriptor_aliasing = true, + .support_descriptor_aliasing = !traits.quirks.brokenDescriptorAliasing, .support_int8 = traits.supportsInt8, .support_int16 = traits.supportsInt16, .support_int64 = traits.supportsInt64, diff --git a/app/src/main/cpp/skyline/gpu/trait_manager.cpp b/app/src/main/cpp/skyline/gpu/trait_manager.cpp index 4efa5e26..a39651aa 100644 --- a/app/src/main/cpp/skyline/gpu/trait_manager.cpp +++ b/app/src/main/cpp/skyline/gpu/trait_manager.cpp @@ -132,6 +132,7 @@ namespace skyline::gpu { case vk::DriverId::eQualcommProprietary: { needsIndividualTextureBindingWrites = true; vkImageMutableFormatCostly = true; // Disables UBWC + brokenDescriptorAliasing = true; break; } diff --git a/app/src/main/cpp/skyline/gpu/trait_manager.h b/app/src/main/cpp/skyline/gpu/trait_manager.h index 0f68e5ac..41a19c9f 100644 --- a/app/src/main/cpp/skyline/gpu/trait_manager.h +++ b/app/src/main/cpp/skyline/gpu/trait_manager.h @@ -41,6 +41,7 @@ namespace skyline::gpu { struct QuirkManager { bool needsIndividualTextureBindingWrites{}; //!< [Adreno Proprietary] A bug that requires descriptor set writes for VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER to be done individually with descriptorCount = 1 rather than batched bool vkImageMutableFormatCostly{}; //!< [Adreno Proprietary/Freedreno] An indication that VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT is costly and should not be enabled unless absolutely necessary (Disables UBWC on Adreno GPUs) + bool brokenDescriptorAliasing{}; //!< [Adreno Proprietary] A bug that causes alised descriptor sets to be incorrectly interpreted by the shader compiler leading to it buggering up LLVM function argument types and crashing QuirkManager() = default;