Enable hades vertex position input workaround for Adreno

Caused crashes in any games using geometry shaders as by default hades uses the position builtin directly.
This commit is contained in:
Billy Laws 2022-08-04 20:33:22 +01:00
parent 04e7b684d2
commit 08f36aac33
4 changed files with 4 additions and 1 deletions

@ -1 +1 @@
Subproject commit 86f860634997d509653d677905540b7989987e90
Subproject commit a4713982b9e596e8fdebe55c1601758815cd3850

View File

@ -64,6 +64,7 @@ namespace skyline::gpu {
.warp_size_potentially_larger_than_guest = TegraX1WarpSize < traits.subgroupSize,
.lower_left_origin_mode = false,
.need_declared_frag_colors = false,
.has_broken_spirv_position_input = traits.quirks.brokenSpirvPositionInput
};
Shader::Settings::values = {

View File

@ -204,6 +204,7 @@ namespace skyline::gpu {
brokenDescriptorAliasing = true;
relaxedRenderPassCompatibility = true; // Adreno drivers support relaxed render pass compatibility rules
brokenPushDescriptors = true;
brokenSpirvPositionInput = 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

View File

@ -59,6 +59,7 @@ namespace skyline::gpu {
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
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
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
vk::QueueGlobalPriorityEXT maxGlobalPriority{vk::QueueGlobalPriorityEXT::eMedium}; //!< The highest allowed global priority of the queue, drivers will not allow higher priorities to be set on queues