Lines Matching refs:fb
87 GENX(pan_select_crc_rt)(const struct pan_fb_info *fb)
90 if (fb->rt_count == 1 && fb->rts[0].view && !fb->rts[0].discard &&
91 fb->rts[0].view->image->layout.crc_mode != PAN_IMAGE_CRC_NONE)
99 for (unsigned i = 0; i < fb->rt_count; i++) {
100 if (!fb->rts[i].view || fb->rts[0].discard ||
101 fb->rts[i].view->image->layout.crc_mode == PAN_IMAGE_CRC_NONE)
104 bool valid = *(fb->rts[i].crc_valid);
105 bool full = !fb->extent.minx && !fb->extent.miny &&
106 fb->extent.maxx == (fb->width - 1) &&
107 fb->extent.maxy == (fb->height - 1);
157 pan_prepare_s(const struct pan_fb_info *fb,
160 const struct pan_image_view *s = fb->zs.view.s;
184 pan_prepare_zs(const struct pan_fb_info *fb,
187 const struct pan_image_view *zs = fb->zs.view.zs;
235 pan_prepare_crc(const struct pan_fb_info *fb, int rt_crc,
241 assert(rt_crc < fb->rt_count);
243 const struct pan_image_view *rt = fb->rts[rt_crc].view;
254 if (fb->rts[rt_crc].clear) {
255 uint32_t clear_val = fb->rts[rt_crc].clear_value[0];
263 pan_emit_zs_crc_ext(const struct pan_fb_info *fb, int rt_crc,
267 pan_prepare_crc(fb, rt_crc, &cfg);
268 cfg.zs_clean_pixel_write_enable = fb->zs.clear.z || fb->zs.clear.s;
269 pan_prepare_zs(fb, &cfg);
270 pan_prepare_s(fb, &cfg);
292 pan_internal_cbuf_size(const struct pan_fb_info *fb,
298 for (int cb = 0; cb < fb->rt_count; ++cb) {
299 const struct pan_image_view *rt = fb->rts[cb].view;
391 pan_prepare_rt(const struct pan_fb_info *fb, unsigned idx,
395 cfg->clean_pixel_write_enable = fb->rts[idx].clear;
397 if (fb->rts[idx].clear) {
398 cfg->clear.color_0 = fb->rts[idx].clear_value[0];
399 cfg->clear.color_1 = fb->rts[idx].clear_value[1];
400 cfg->clear.color_2 = fb->rts[idx].clear_value[2];
401 cfg->clear.color_3 = fb->rts[idx].clear_value[3];
404 const struct pan_image_view *rt = fb->rts[idx].view;
405 if (!rt || fb->rts[idx].discard) {
501 const struct pan_fb_info *fb,
523 panfrost_choose_hierarchy_mask(fb->width,
524 fb->height,
526 header_size = panfrost_tiler_header_size(fb->width,
527 fb->height,
531 panfrost_tiler_full_size(fb->width, fb->height,
546 pan_emit_rt(const struct pan_fb_info *fb,
550 pan_prepare_rt(fb, idx, cbuf_offset, &cfg);
592 pan_force_clean_write(const struct pan_fb_info *fb, unsigned tile_size)
597 for (unsigned i = 0; i < fb->rt_count; ++i) {
598 if (fb->rts[i].view && !fb->rts[i].discard &&
599 pan_force_clean_write_rt(fb->rts[i].view, tile_size))
603 if (fb->zs.view.zs && !fb->zs.discard.z &&
604 pan_force_clean_write_rt(fb->zs.view.zs, tile_size))
607 if (fb->zs.view.s && !fb->zs.discard.s &&
608 pan_force_clean_write_rt(fb->zs.view.s, tile_size))
618 const struct pan_fb_info *fb,
633 unsigned internal_cbuf_size = pan_internal_cbuf_size(fb, &tile_size);
634 int crc_rt = GENX(pan_select_crc_rt)(fb);
635 bool has_zs_crc_ext = pan_fbd_has_zs_crc_ext(fb);
639 bool force_clean_write = pan_force_clean_write(fb, tile_size);
642 panfrost_sample_positions(dev, pan_sample_pattern(fb->nr_samples));
643 cfg.pre_frame_0 = pan_fix_frame_shader_mode(fb->bifrost.pre_post.modes[0], force_clean_write);
644 cfg.pre_frame_1 = pan_fix_frame_shader_mode(fb->bifrost.pre_post.modes[1], force_clean_write);
645 cfg.post_frame = pan_fix_frame_shader_mode(fb->bifrost.pre_post.modes[2], force_clean_write);
646 cfg.frame_shader_dcds = fb->bifrost.pre_post.dcds.gpu;
649 cfg.width = fb->width;
650 cfg.height = fb->height;
651 cfg.bound_max_x = fb->width - 1;
652 cfg.bound_max_y = fb->height - 1;
656 cfg.render_target_count = MAX2(fb->rt_count, 1);
660 fb->zs.view.zs ?
661 panfrost_get_z_internal_format(fb->zs.view.zs->format) :
664 cfg.z_clear = fb->zs.clear_value.depth;
665 cfg.s_clear = fb->zs.clear_value.stencil;
667 cfg.sample_count = fb->nr_samples;
668 cfg.sample_pattern = pan_sample_pattern(fb->nr_samples);
669 cfg.z_write_enable = (fb->zs.view.zs && !fb->zs.discard.z);
670 cfg.s_write_enable = (fb->zs.view.s && !fb->zs.discard.s);
674 bool *valid = fb->rts[crc_rt].crc_valid;
675 bool full = !fb->extent.minx && !fb->extent.miny &&
676 fb->extent.maxx == (fb->width - 1) &&
677 fb->extent.maxy == (fb->height - 1);
693 pan_emit_midgard_tiler(dev, fb, tiler_ctx,
701 pan_emit_zs_crc_ext(fb, crc_rt,
707 unsigned rt_count = MAX2(fb->rt_count, 1);
710 pan_emit_rt(fb, i, cbuf_offset, rtd);
712 if (!fb->rts[i].view)
715 cbuf_offset += pan_bytes_per_pixel_tib(fb->rts[i].view->format) *
716 tile_size * fb->rts[i].view->image->layout.nr_samples;
719 *(fb->rts[i].crc_valid) = false;
721 tags |= MALI_POSITIVE(MAX2(fb->rt_count, 1)) << 2;
728 const struct pan_fb_info *fb,
732 pan_emit_midgard_tiler(dev, fb, ctx,
742 const struct pan_fb_info *fb,
751 cfg.bound_max_x = fb->width - 1;
752 cfg.bound_max_y = fb->height - 1;
756 if (fb->rts[0].clear) {
757 cfg.clear_color_0 = fb->rts[0].clear_value[0];
758 cfg.clear_color_1 = fb->rts[0].clear_value[1];
759 cfg.clear_color_2 = fb->rts[0].clear_value[2];
760 cfg.clear_color_3 = fb->rts[0].clear_value[3];
763 if (fb->zs.clear.z)
764 cfg.z_clear = fb->zs.clear_value.depth;
766 if (fb->zs.clear.s)
767 cfg.s_clear = fb->zs.clear_value.stencil;
769 if (fb->rt_count && fb->rts[0].view) {
770 const struct pan_image_view *rt = fb->rts[0].view;
793 cfg.color_write_enable = !fb->rts[0].discard;
819 if (fb->zs.view.zs) {
820 const struct pan_image_view *zs = fb->zs.view.zs;
826 cfg.zs_write_enable = !fb->zs.discard.z;
837 cfg.sample_count = fb->nr_samples;
839 if (fb->rt_count)
840 cfg.msaa = mali_sampling_mode(fb->rts[0].view);
842 pan_emit_sfbd_tiler(dev, fb, tiler_ctx, fbd);
849 const struct pan_fb_info *fb,
855 assert(fb->rt_count <= 1);
856 pan_emit_sfbd(dev, fb, tls, tiler_ctx, out);
859 return pan_emit_mfbd(dev, fb, tls, tiler_ctx, out);
898 GENX(pan_emit_fragment_job)(const struct pan_fb_info *fb,
908 payload.bound_min_x = fb->extent.minx >> MALI_TILE_SHIFT;
909 payload.bound_min_y = fb->extent.miny >> MALI_TILE_SHIFT;
910 payload.bound_max_x = fb->extent.maxx >> MALI_TILE_SHIFT;
911 payload.bound_max_y = fb->extent.maxy >> MALI_TILE_SHIFT;
915 if (fb->tile_map.base) {
917 payload.tile_enable_map = fb->tile_map.base;
918 payload.tile_enable_map_row_stride = fb->tile_map.stride;