cfg.fixed_function.num_comps = 4;
cfg.fixed_function.conversion.memory_format =
panfrost_format_to_bifrost_blend(dev, format, dithered);
- cfg.fixed_function.conversion.register_format =
- fs->info.bifrost.blend[i].format;
cfg.fixed_function.rt = i;
#if PAN_ARCH <= 7
cfg.fixed_function.alpha_zero_nop = info.alpha_zero_nop;
cfg.fixed_function.alpha_one_store = info.alpha_one_store;
}
+
+ if (fs->info.fs.untyped_color_outputs) {
+ cfg.fixed_function.conversion.register_format =
+ GENX(pan_fixup_blend_type)(fs->info.bifrost.blend[i].type, format);
+ } else {
+ cfg.fixed_function.conversion.register_format =
+ fs->info.bifrost.blend[i].format;
+ }
#endif
}
}
return 0;
}
}
+
+#if PAN_ARCH <= 7
+enum mali_register_file_format
+GENX(pan_fixup_blend_type)(nir_alu_type T_size, enum pipe_format format)
+{
+ const struct util_format_description *desc = util_format_description(format);
+ unsigned size = nir_alu_type_get_type_size(T_size);
+ nir_alu_type T_format = pan_unpacked_type_for_format(desc);
+ nir_alu_type T = nir_alu_type_get_base_type(T_format) | size;
+
+ return bifrost_blend_type_from_nir(T);
+}
+#endif
#endif
void
info->fs.outputs_read = s->info.outputs_read >> FRAG_RESULT_DATA0;
info->fs.outputs_written = s->info.outputs_written >> FRAG_RESULT_DATA0;
info->fs.sample_shading = s->info.fs.uses_sample_shading;
+ info->fs.untyped_color_outputs = s->info.fs.untyped_color_outputs;
info->fs.can_discard = s->info.fs.uses_discard;
info->fs.early_fragment_tests = s->info.fs.early_fragment_tests;
#include "compiler/nir/nir.h"
#include "panfrost/util/pan_ir.h"
+#include "panfrost/util/pan_lower_framebuffer.h"
#include "pan_device.h"
#include "genxml/gen_macros.h"
struct util_dynarray *binary,
struct pan_shader_info *info);
+#if PAN_ARCH >= 6 && PAN_ARCH <= 7
+enum mali_register_file_format
+GENX(pan_fixup_blend_type)(nir_alu_type T_size, enum pipe_format format);
+#endif
+
#if PAN_ARCH >= 9
static inline enum mali_shader_stage
pan_shader_stage(const struct pan_shader_info *info)
bool sample_shading;
bool early_fragment_tests;
bool can_early_z, can_fpk;
+ bool untyped_color_outputs;
BITSET_WORD outputs_read;
BITSET_WORD outputs_written;
} fs;