Enable adreno/mali LLVM misopt workaround

Fixes animal crossing character issues, see shader compiler commit for details.
This commit is contained in:
Billy Laws 2023-03-25 22:50:50 +00:00
parent 737fb2207d
commit 7bfe63f679
4 changed files with 8 additions and 2 deletions

@ -1 +1 @@
Subproject commit 23a83bfdb4cff9c16694b7803a66063f41f306c5
Subproject commit 312e14b2c334502e7453ab200042ae688a66e3b1

View File

@ -126,7 +126,8 @@ namespace skyline::gpu {
.has_broken_spirv_subgroup_mask_vector_extract_dynamic = traits.quirks.brokenSubgroupMaskExtractDynamic,
.has_broken_spirv_subgroup_shuffle = traits.quirks.brokenSubgroupShuffle,
.max_subgroup_size = traits.subgroupSize,
.disable_subgroup_shuffle = *state.settings->disableSubgroupShuffle
.has_broken_spirv_vector_access_chain = traits.quirks.brokenSpirvVectorAccessChain,
.disable_subgroup_shuffle = *state.settings->disableSubgroupShuffle,
};
Shader::Settings::values = {

View File

@ -237,6 +237,7 @@ namespace skyline::gpu {
relaxedRenderPassCompatibility = true; // Adreno drivers support relaxed render pass compatibility rules
brokenPushDescriptors = true;
brokenSpirvPositionInput = true;
brokenSpirvAccessChainOpt = true;
if (deviceProperties.driverVersion < VK_MAKE_VERSION(512, 600, 0))
maxSubpassCount = 64; // Driver will segfault while destroying the renderpass and associated objects if this is exceeded on all 5xx and below drivers
@ -248,6 +249,7 @@ namespace skyline::gpu {
brokenSubgroupMaskExtractDynamic = true;
brokenSubgroupShuffle = true;
brokenSpirvVectorAccessChain = true;
maxGlobalPriority = vk::QueueGlobalPriorityEXT::eHigh;
break;
}
@ -262,6 +264,7 @@ namespace skyline::gpu {
if (deviceProperties.driverVersion < VK_MAKE_VERSION(42, 0, 0))
brokenDynamicStateVertexBindings = true;
brokenSpirvAccessChainOpt = true;
vkImageMutableFormatCostly = true; // Disables AFBC in some cases
maxGlobalPriority = vk::QueueGlobalPriorityEXT::eHigh;
break;

View File

@ -73,10 +73,12 @@ namespace skyline::gpu {
bool relaxedRenderPassCompatibility{}; //!< [Adreno Proprietary/Freedreno] A relaxed version of Vulkan specification's render pass compatibility clause which allows for caching pipeline objects for multi-subpass renderpasses, this is intentionally disabled by default as it requires testing prior to enabling
bool brokenPushDescriptors{}; //!< [Adreno Proprietary] A bug that causes push descriptor updates to ignored by the driver in certain situations
bool brokenSpirvPositionInput{}; //!< [Adreno Proprietary] A bug that causes the shader compiler to fail on shaders with vertex position inputs not contained within a struct
bool brokenSpirvAccessChainOpt{}; //!< [Adreno Proprietary] A broken optimisation pass causes dynamic access chain offsets to break
bool brokenComputeShaders{}; //!< [ARM Proprietary] A bug that causes compute shaders in some games to crash the GPU
bool brokenMultithreadedPipelineCompilation{}; //!< [Qualcomm Proprietary] A bug that causes the shader compiler to crash when compiling pipelines on multiple threads simultaneously
bool brokenSubgroupMaskExtractDynamic{}; //!< [Qualcomm Proprietary] A bug that causes shaders using OpVectorExtractDynamic on the subgroup mask builtins to fail to compile
bool brokenSubgroupShuffle{}; //!< [Qualcomm Proprietary] A bug that causes shaders using OpSubgroupShuffle to do all sorts of weird things
bool brokenSpirvVectorAccessChain{}; //!< [Qualcomm Proprietary] A bug that causes SPIR-V OpAccessChains to work incorrectly when used to index vector arrays
bool brokenDynamicStateVertexBindings{}; //!< [ARM Proprietary] A bug that causes VK_EXT_dynamic_state vertex bindings not to work correctly
u32 maxSubpassCount{std::numeric_limits<u32>::max()}; //!< The maximum amount of subpasses within a renderpass, this is limited to 64 on older Adreno proprietary drivers