mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2024-11-14 13:27:45 -07:00
Vulkan: Enable subgroupShuffle.
It is used as workaround for the missing subgroupBroadcastDynamicId flag on SPIR-V < 1.5.
This commit is contained in:
parent
1571098783
commit
196c684ac1
@ -21,6 +21,14 @@ const uint UNROLL_SIMD = 3; // max MAX_CHARS / 32
|
||||
|
||||
// #undef SUPPORTS_SUBGROUP_REDUCTION
|
||||
|
||||
#ifdef API_VULKAN
|
||||
// By default, subgroupBroadcast only supports compile time constants as index.
|
||||
// However we need an uniform instead. This is always supported in OpenGL,
|
||||
// but in Vulkan only in SPIR-V >= 1.5.
|
||||
// So fall back to subgroupShuffle on Vulkan instead.
|
||||
#define subgroupBroadcast subgroupShuffle
|
||||
#endif
|
||||
|
||||
/*
|
||||
The header-only font
|
||||
We have 96 (ASCII) characters, each of them is 12 pixels high and 8 pixels wide.
|
||||
|
@ -79,6 +79,7 @@ static const char SUBGROUP_HELPER_HEADER[] = R"(
|
||||
#extension GL_KHR_shader_subgroup_basic : enable
|
||||
#extension GL_KHR_shader_subgroup_arithmetic : enable
|
||||
#extension GL_KHR_shader_subgroup_ballot : enable
|
||||
#extension GL_KHR_shader_subgroup_shuffle : enable
|
||||
|
||||
#define SUPPORTS_SUBGROUP_REDUCTION 1
|
||||
#define IS_HELPER_INVOCATION gl_HelperInvocation
|
||||
|
@ -981,9 +981,11 @@ void VulkanContext::PopulateShaderSubgroupSupport()
|
||||
|
||||
// We require basic ops (for gl_SubgroupInvocationID), ballot (for subgroupBallot,
|
||||
// subgroupBallotFindLSB), and arithmetic (for subgroupMin/subgroupMax).
|
||||
constexpr VkSubgroupFeatureFlags required_operations = VK_SUBGROUP_FEATURE_BASIC_BIT |
|
||||
VK_SUBGROUP_FEATURE_ARITHMETIC_BIT |
|
||||
VK_SUBGROUP_FEATURE_BALLOT_BIT;
|
||||
// Shuffle is enabled as a workaround until SPIR-V >= 1.5 is enabled with broadcast(uniform)
|
||||
// support.
|
||||
constexpr VkSubgroupFeatureFlags required_operations =
|
||||
VK_SUBGROUP_FEATURE_BASIC_BIT | VK_SUBGROUP_FEATURE_ARITHMETIC_BIT |
|
||||
VK_SUBGROUP_FEATURE_BALLOT_BIT | VK_SUBGROUP_FEATURE_SHUFFLE_BIT;
|
||||
m_supports_shader_subgroup_operations =
|
||||
(subgroup_properties.supportedOperations & required_operations) == required_operations &&
|
||||
subgroup_properties.supportedStages & VK_SHADER_STAGE_FRAGMENT_BIT &&
|
||||
|
Loading…
Reference in New Issue
Block a user