Commit: 17a7ac0037d83e5fc4991117822b675b2a673f9a
Parent: f2b420f8ba454b8eaaa469ba2438ea1b2af86813
Author: Randy Palamar
Date: Fri, 27 Feb 2026 17:10:02 -0700
core: choose optimal DAS layout based on actually user provided points layout
Diffstat:
1 file changed, 20 insertions(+), 3 deletions(-)
diff --git a/beamformer_core.c b/beamformer_core.c
@@ -643,12 +643,29 @@ plan_compute_pipeline(BeamformerComputePlan *cp, BeamformerParameterBlock *pb)
if (id == BeamformerAcquisitionKind_UFORCES || id == BeamformerAcquisitionKind_UHERCULES)
sd->bake.flags |= BeamformerShaderDASFlags_Sparse;
+ sd->layout = (uv3){{1, 1, 1}};
+
+ b32 has_x = cp->output_points.x > 1;
+ b32 has_y = cp->output_points.y > 1;
+ b32 has_z = cp->output_points.z > 1;
// TODO(rnp): subgroup size
u32 subgroup_size = gl_parameters.vendor_id == GLVendor_NVIDIA ? 32 : 64;
switch (iv3_dimension(cp->output_points)) {
- case 1:{sd->layout = (uv3){{subgroup_size, 1, 1}}; }break;
- case 2:{sd->layout = (uv3){{subgroup_size/4, subgroup_size/4, 1}};}break;
- case 3:{sd->layout = (uv3){{8, 8, 8}}; }break;
+
+ case 1:{
+ if (has_x) sd->layout.x = subgroup_size;
+ if (has_y) sd->layout.y = subgroup_size;
+ if (has_z) sd->layout.z = subgroup_size;
+ }break;
+
+ case 2:{
+ if (has_x && has_y) { sd->layout.x = subgroup_size / 4; sd->layout.x = subgroup_size / 4; }
+ if (has_x && has_z) { sd->layout.x = subgroup_size / 4; sd->layout.z = subgroup_size / 4; }
+ if (has_y && has_z) { sd->layout.y = subgroup_size / 4; sd->layout.z = subgroup_size / 4; }
+ }break;
+
+ case 3:{sd->layout = (uv3){{4, 4, 4}};}break;
+
InvalidDefaultCase;
}