1
0
mirror of https://git.ffmpeg.org/ffmpeg.git synced 2026-10-24 02:09:03 +03:00

vulkan: declare maximal reconvergence in shaders doing subgroup reductions

These shaders reduce across the subgroup after divergent control flow
and implicitly rely on invocations reconverging as written, the
MaximallyReconvergesKHR execution mode turns that assumption into a
guarantee.
This commit is contained in:
Lynne
2026-07-30 19:12:18 +09:00
parent 64fe3bee7f
commit e54f60ed1b
4 changed files with 8 additions and 4 deletions

View File

@@ -24,6 +24,7 @@
#extension GL_KHR_shader_subgroup_basic : require
#extension GL_KHR_shader_subgroup_arithmetic : require
#extension GL_KHR_shader_subgroup_rotate : require
#extension GL_EXT_maximal_reconvergence : require
#define PB_UNALIGNED
#include "common.glsl"
@@ -278,7 +279,7 @@ void dc_context(uint coeff_base, uint idx, out int prev_dc, out int prev_k_dc)
prev_k_dc = min(abs(dc_m1 - dc_m2) >> 1, 5);
}
void main(void)
void main(void) [[maximally_reconverges]]
{
const uint b = gl_LocalInvocationID.x;
const uint comp = comp_base + gl_WorkGroupID.z;

View File

@@ -23,6 +23,7 @@
#pragma shader_stage(compute)
#extension GL_GOOGLE_include_directive : require
#extension GL_KHR_shader_subgroup_arithmetic : require
#extension GL_EXT_maximal_reconvergence : require
#define ENCODE
#define SB_QUALI
@@ -165,7 +166,7 @@ void coeff_search(uint slice_idx)
}
}
void main(void)
void main(void) [[maximally_reconverges]]
{
if (force_pcm)
return;

View File

@@ -23,6 +23,7 @@
#extension GL_EXT_shader_explicit_arithmetic_types : require
#extension GL_KHR_shader_subgroup_clustered : require
#extension GL_KHR_shader_subgroup_shuffle : require
#extension GL_EXT_maximal_reconvergence : require
#extension GL_GOOGLE_include_directive : require
#include "common.glsl"
@@ -233,7 +234,7 @@ int sum_of_planes(int value)
return subgroupClusteredAdd(value, 4);
}
void main()
void main() [[maximally_reconverges]]
{
uint slice = gl_GlobalInvocationID.x / num_planes;
uint plane = gl_LocalInvocationID.x % num_planes;

View File

@@ -23,6 +23,7 @@
#extension GL_EXT_scalar_block_layout : require
#extension GL_EXT_shader_explicit_arithmetic_types : require
#extension GL_KHR_shader_subgroup_arithmetic : require
#extension GL_EXT_maximal_reconvergence : require
layout (local_size_x_id = 253, local_size_y_id = 254, local_size_z_id = 255) in;
@@ -162,7 +163,7 @@ int force_slice_row_quants()
return slice_row_size;
}
void main()
void main() [[maximally_reconverges]]
{
int slice_row_size;
if (force_quant == 0)