diff options
| author | JMC47 <JMC4789@gmail.com> | 2023-02-10 04:47:20 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-02-10 04:47:20 -0500 |
| commit | 258151fe5aa9b1c28eb9bb9567d345c59b54e4a0 (patch) | |
| tree | 5365822144593d45342fb89b6fbdde9165457c00 /Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp | |
| parent | dad7a32a35d0d28946c16e740692d014a858d2ea (diff) | |
| parent | 4b2aa948e662aa037ad39f5ee81a64256a4d61aa (diff) | |
Merge pull request #11523 from degasus/OGL_KHR_subgroup
VideoBackend/OGL: Prefer KHR_shader_subgroup over NV_shader_thread.
Diffstat (limited to 'Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp')
| -rw-r--r-- | Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp | 27 |
1 files changed, 11 insertions, 16 deletions
diff --git a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp index 289e99cae0..eff1497e7f 100644 --- a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp +++ b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp @@ -78,6 +78,8 @@ static std::string GetGLSLVersionString() return "#version 400"; case Glsl430: return "#version 430"; + case Glsl450: + return "#version 450"; default: // Shouldn't ever hit this return "#version ERROR"; @@ -720,25 +722,18 @@ void ProgramShaderCache::CreateHeader() } std::string shader_shuffle_string; - if (g_ogl_config.bSupportsShaderThreadShuffleNV) + if (g_ogl_config.bSupportsKHRShaderSubgroup) { shader_shuffle_string = R"( -#extension GL_NV_shader_thread_group : enable -#extension GL_NV_shader_thread_shuffle : enable -#define SUPPORTS_SUBGROUP_REDUCTION 1 +#extension GL_KHR_shader_subgroup_basic : enable +#extension GL_KHR_shader_subgroup_arithmetic : enable +#extension GL_KHR_shader_subgroup_ballot : enable -// The xor shuffle below produces incorrect results if all threads in a warp are not active. -#define CAN_USE_SUBGROUP_REDUCTION (ballotThreadNV(true) == 0xFFFFFFFFu) - -#define IS_HELPER_INVOCATION gl_HelperThreadNV -#define IS_FIRST_ACTIVE_INVOCATION (gl_ThreadInWarpNV == findLSB(ballotThreadNV(!gl_HelperThreadNV))) -#define SUBGROUP_REDUCTION(func, value) value = func(value, shuffleXorNV(value, 16, 32)); \ - value = func(value, shuffleXorNV(value, 8, 32)); \ - value = func(value, shuffleXorNV(value, 4, 32)); \ - value = func(value, shuffleXorNV(value, 2, 32)); \ - value = func(value, shuffleXorNV(value, 1, 32)); -#define SUBGROUP_MIN(value) SUBGROUP_REDUCTION(min, value) -#define SUBGROUP_MAX(value) SUBGROUP_REDUCTION(max, value) +#define SUPPORTS_SUBGROUP_REDUCTION 1 +#define IS_HELPER_INVOCATION gl_HelperInvocation +#define IS_FIRST_ACTIVE_INVOCATION (subgroupElect()) +#define SUBGROUP_MIN(value) value = subgroupMin(value) +#define SUBGROUP_MAX(value) value = subgroupMax(value) )"; } |
