glsl: Implement VOTE for subgroup size potentially larger

This commit is contained in:
ameerj 2021-05-30 00:53:26 -04:00
parent 770b754afd
commit e35ffbbeb0
5 changed files with 43 additions and 20 deletions

View file

@ -160,6 +160,7 @@ Device::Device() {
has_depth_buffer_float = HasExtension(extensions, "GL_NV_depth_buffer_float");
has_nv_gpu_shader_5 = GLAD_GL_NV_gpu_shader5;
has_amd_shader_half_float = GLAD_GL_AMD_gpu_shader_half_float;
warp_size_potentially_larger_than_guest = !is_nvidia && !is_intel;
// At the moment of writing this, only Nvidia's driver optimizes BufferSubData on exclusive
// uniform buffers as "push constants"

View file

@ -128,6 +128,10 @@ public:
return has_amd_shader_half_float;
}
bool IsWarpSizePotentiallyLargerThanGuest() const {
return warp_size_potentially_larger_than_guest;
}
private:
static bool TestVariableAoffi();
static bool TestPreciseBug();
@ -161,6 +165,7 @@ private:
bool has_depth_buffer_float{};
bool has_nv_gpu_shader_5{};
bool has_amd_shader_half_float{};
bool warp_size_potentially_larger_than_guest{};
};
} // namespace OpenGL

View file

@ -220,7 +220,7 @@ ShaderCache::ShaderCache(RasterizerOpenGL& rasterizer_, Core::Frontend::EmuWindo
.support_gl_nv_gpu_shader_5 = device.HasNvGpuShader5(),
.support_gl_amd_gpu_shader_half_float = device.HasAmdShaderHalfFloat(),
.warp_size_potentially_larger_than_guest = true,
.warp_size_potentially_larger_than_guest = device.IsWarpSizePotentiallyLargerThanGuest(),
.lower_left_origin_mode = true,
.need_declared_frag_colors = true,