Commit: 7d13b68104f01786265c0ed6e1fabadb5200c5fe
Parent: 1253f462386fa9df517454a58f714933718e6411
Author: Randy Palamar
Date: Mon, 27 Jul 2026 18:53:00 -0700
ui: add compile flags to shader parameter listing
Diffstat:
4 files changed, 77 insertions(+), 2 deletions(-)
diff --git a/beamformer_core.c b/beamformer_core.c
@@ -588,6 +588,10 @@ plan_compute_pipeline(BeamformerComputePlan *cp, BeamformerParameterBlock *pb, A
}
}
+ // NOTE(rnp): ensure last node descriptor gets proper values for output data kind
+ if (graph.last->output_data_kind == BeamformerDataKind_Count)
+ graph.last->output_data_kind = graph.last->input_data_kind;
+
f32 time_offset = pb->parameters.time_offset;
u32 subgroup_size = vk_gpu_info()->subgroup_size;
diff --git a/build.c b/build.c
@@ -4197,6 +4197,37 @@ metagen_emit_c_code(MetaContext *ctx, Arena arena)
}
if (ctx->base_shader_count)
+ DeferLoop(meta_begin_scope(m, str8("read_only global str8 *" META_NAMESPACE_LOWER "_shader_compile_flag_names[] = {")),
+ meta_end_scope(m, str8("};\n")))
+ {
+ for (da_count bs = 0; bs < ctx->base_shader_count; bs++) {
+ da_count id = ctx->base_shader_ids[bs];
+ MetaEntity *e = ctx->entities.data + id;
+ MetaEntityID fid = meta_entity_first_child_of_kind(ctx, e, MetaEntityKind_Flags);
+ if (fid.value != 0) {
+ MetaEntity *flags = meta_entity(ctx, fid);
+ metagen_emit_c_str8_list(m, flags->table.entries[MetaStructField_Name], flags->table.entry_count);
+ } else {
+ meta_push_line(m, str8("0,"));
+ }
+ }
+ }
+
+ if (ctx->base_shader_count)
+ DeferLoop(meta_begin_scope(m, str8("read_only global u8 " META_NAMESPACE_LOWER "_shader_compile_flag_counts[] = {")),
+ meta_end_scope(m, str8("};\n")))
+ {
+ for (da_count bs = 0; bs < ctx->base_shader_count; bs++) {
+ da_count id = ctx->base_shader_ids[bs];
+ MetaEntity *e = ctx->entities.data + id;
+ MetaEntityID fid = meta_entity_first_child_of_kind(ctx, e, MetaEntityKind_Flags);
+ meta_indent(m);
+ meta_push_u64(m, ctx->entities.data[fid.value].table.entry_count);
+ meta_end_line(m, str8(","));
+ }
+ }
+
+ if (ctx->base_shader_count)
DeferLoop(meta_begin_scope(m, str8("read_only global str8 *" META_NAMESPACE_LOWER "_shader_bake_parameter_names[] = {")),
meta_end_scope(m, str8("};\n")))
{
diff --git a/generated/beamformer.c b/generated/beamformer.c
@@ -952,6 +952,38 @@ read_only global i32 beamformer_shader_header_vector_lengths[] = {
1,
};
+read_only global str8 *beamformer_shader_compile_flag_names[] = {
+ (str8 []){
+ str8_comp("CooperativeMatrix"),
+ },
+ (str8 []){
+ str8_comp("ComplexFilter"),
+ str8_comp("Demodulate"),
+ },
+ (str8 []){
+ str8_comp("CoherencyWeighting"),
+ },
+ 0,
+ 0,
+ 0,
+ (str8 []){
+ str8_comp("Deinterleave"),
+ str8_comp("Interleave"),
+ },
+ 0,
+};
+
+read_only global u8 beamformer_shader_compile_flag_counts[] = {
+ 1,
+ 2,
+ 1,
+ 0,
+ 0,
+ 0,
+ 2,
+ 0,
+};
+
read_only global str8 *beamformer_shader_bake_parameter_names[] = {
(str8 []){
str8_comp("UseSharedMemory"),
diff --git a/ui.c b/ui.c
@@ -1,6 +1,5 @@
/* See LICENSE for license details. */
/* TODO(rnp):
- * [ ]: pretty print compile flags in shader bake parameter lister
* [ ]: bug: nil nodes break hot reloading
* - only one that matters is ui_node_nil, for now maybe just put it into ui_context (won't be read_only of course)
* [ ]: bug: flickering x-scroll bar on switch from ComputeBarGraph to other
@@ -3282,7 +3281,6 @@ ui_build_compute_stats(BeamformerComputePlan *cp, f32 broken_shader_t, Beamforme
UIPrefWidth(ui_text_dim(1.f, 1.f))
UIFontSize(24.f)
{
- // TODO(rnp): pretty print the extra compile flags field
BeamformerShaderDescriptor *sd = cp->shader_descriptors + it;
UIParent(left) ui_label(str8("Layout"));
UIParent(right) ui_labelf("{%u, %u, %u}###layout", sd->layout.x, sd->layout.y, sd->layout.z);
@@ -3297,6 +3295,16 @@ ui_build_compute_stats(BeamformerComputePlan *cp, f32 broken_shader_t, Beamforme
beamformer_data_kind_str8[sd->output_data_kind],
str8("##output_kind")));
+ if (beamformer_shader_compile_flag_counts[reloadable_index])
+ for EachIndex(beamformer_shader_compile_flag_counts[reloadable_index], bit) {
+ str8 *flags = beamformer_shader_compile_flag_names[reloadable_index];
+ b32 set = sd->compile_flags & (1u << bit);
+ UIParent(left) ui_label(flags[bit]);
+ UIParent(right) ui_label(push_str8_from_parts(ui_build_arena(), str8(""),
+ set ? str8("True") : str8("False"),
+ str8("##"), flags[bit]));
+ }
+
i32 struct_id = beamformer_base_shader_to_bake_struct_id[reloadable_index];
if (struct_id != -1) {
str8 *names = beamformer_shader_bake_parameter_names[reloadable_index];