Lines Matching refs:color_plane

533  * @color_plane: color plane index to check
536 * Returns %true if @fb's color plane at index @color_plane is a CCS AUX plane.
538 bool intel_fb_is_ccs_aux_plane(const struct drm_framebuffer *fb, int color_plane)
542 return ccs_aux_plane_mask(md, fb->format) & BIT(color_plane);
548 * @color_plane: color plane index to check
551 * Returns %true if @fb's color plane at index @color_plane is a GEN12 CCS AUX plane.
553 static bool intel_fb_is_gen12_ccs_aux_plane(const struct drm_framebuffer *fb, int color_plane)
558 ccs_aux_plane_mask(md, fb->format) & BIT(color_plane);
581 static bool is_gen12_ccs_cc_plane(const struct drm_framebuffer *fb, int color_plane)
583 return intel_fb_rc_ccs_cc_plane(fb) == color_plane;
586 static bool is_semiplanar_uv_plane(const struct drm_framebuffer *fb, int color_plane)
589 color_plane == 1;
592 bool is_surface_linear(const struct drm_framebuffer *fb, int color_plane)
595 intel_fb_is_gen12_ccs_aux_plane(fb, color_plane) ||
596 is_gen12_ccs_cc_plane(fb, color_plane);
647 intel_tile_width_bytes(const struct drm_framebuffer *fb, int color_plane)
650 unsigned int cpp = fb->format->cpp[color_plane];
670 if (intel_fb_is_ccs_aux_plane(fb, color_plane))
679 if (intel_fb_is_ccs_aux_plane(fb, color_plane) ||
680 is_gen12_ccs_cc_plane(fb, color_plane))
689 if (intel_fb_is_ccs_aux_plane(fb, color_plane))
713 unsigned int intel_tile_height(const struct drm_framebuffer *fb, int color_plane)
716 intel_tile_width_bytes(fb, color_plane);
723 static void intel_tile_dims(const struct drm_framebuffer *fb, int color_plane,
727 unsigned int tile_width_bytes = intel_tile_width_bytes(fb, color_plane);
728 unsigned int cpp = fb->format->cpp[color_plane];
731 *tile_height = intel_tile_height(fb, color_plane);
739 static void intel_tile_block_dims(const struct drm_framebuffer *fb, int color_plane,
743 intel_tile_dims(fb, color_plane, tile_width, tile_height);
745 if (intel_fb_is_gen12_ccs_aux_plane(fb, color_plane))
749 unsigned int intel_tile_row_size(const struct drm_framebuffer *fb, int color_plane)
753 intel_tile_dims(fb, color_plane, &tile_width, &tile_height);
755 return fb->pitches[color_plane] * tile_height;
760 int color_plane, unsigned int height)
762 unsigned int tile_height = intel_tile_height(fb, color_plane);
804 int color_plane)
812 if (intel_fb_is_ccs_aux_plane(fb, color_plane))
815 if (is_semiplanar_uv_plane(fb, color_plane)) {
824 return intel_tile_row_size(fb, color_plane);
830 drm_WARN_ON(&dev_priv->drm, color_plane != 0);
864 int color_plane)
868 if (color_plane == 0) {
879 if (!intel_fb_is_gen12_ccs_aux_plane(fb, color_plane)) {
886 main_plane = skl_ccs_to_main_plane(fb, color_plane);
887 *hsub = drm_format_info_block_width(fb->format, color_plane) /
904 static void intel_fb_plane_dims(const struct intel_framebuffer *fb, int color_plane, int *w, int *h)
906 int main_plane = intel_fb_is_ccs_aux_plane(&fb->base, color_plane) ?
907 skl_ccs_to_main_plane(&fb->base, color_plane) : 0;
914 intel_fb_plane_get_subsampling(&hsub, &vsub, &fb->base, color_plane);
963 int color_plane,
969 unsigned int cpp = fb->format->cpp[color_plane];
973 if (!is_surface_linear(fb, color_plane)) {
978 intel_tile_dims(fb, color_plane, &tile_width, &tile_height);
1004 int color_plane,
1007 return intel_adjust_aligned_offset(x, y, state->hw.fb, color_plane,
1009 state->view.color_plane[color_plane].mapping_stride,
1030 int color_plane,
1035 unsigned int cpp = fb->format->cpp[color_plane];
1038 if (!is_surface_linear(fb, color_plane)) {
1043 intel_tile_dims(fb, color_plane, &tile_width, &tile_height);
1084 int color_plane)
1090 int pitch = state->view.color_plane[color_plane].mapping_stride;
1096 alignment = intel_surf_alignment(fb, color_plane);
1098 return intel_compute_aligned_offset(i915, x, y, fb, color_plane,
1105 int color_plane)
1113 is_semiplanar_uv_plane(fb, color_plane))
1114 alignment = intel_tile_row_size(fb, color_plane);
1120 if (alignment != 0 && fb->offsets[color_plane] % alignment) {
1123 fb->offsets[color_plane], color_plane);
1127 height = drm_format_info_plane_height(fb->format, fb->height, color_plane);
1128 height = ALIGN(height, intel_tile_height(fb, color_plane));
1131 if (check_add_overflow(mul_u32_u32(height, fb->pitches[color_plane]),
1132 fb->offsets[color_plane], &unused)) {
1135 fb->offsets[color_plane], fb->pitches[color_plane],
1136 color_plane);
1144 fb, color_plane, DRM_MODE_ROTATE_0,
1145 fb->pitches[color_plane],
1146 fb->offsets[color_plane], 0);
1179 main_x = intel_fb->normal_view.color_plane[main_plane].x % tile_width;
1180 main_y = intel_fb->normal_view.color_plane[main_plane].y % tile_height;
1191 intel_fb->normal_view.color_plane[main_plane].x,
1192 intel_fb->normal_view.color_plane[main_plane].y,
1248 static int intel_fb_pitch(const struct intel_framebuffer *fb, int color_plane, unsigned int rotation)
1251 return fb->rotated_view.color_plane[color_plane].mapping_stride;
1253 return fb->remapped_view.color_plane[color_plane].mapping_stride;
1255 return fb->normal_view.color_plane[color_plane].mapping_stride;
1286 static int convert_plane_offset_to_xy(const struct intel_framebuffer *fb, int color_plane,
1292 ret = intel_fb_offset_to_xy(x, y, &fb->base, color_plane);
1296 color_plane, fb->base.offsets[color_plane]);
1300 ret = intel_fb_check_ccs_xy(&fb->base, color_plane, *x, *y);
1313 if (color_plane == 0 && i915_gem_object_is_tiled(obj) &&
1314 (*x + plane_width) * fb->base.format->cpp[color_plane] > fb->base.pitches[color_plane]) {
1317 color_plane, fb->base.offsets[color_plane]);
1324 static u32 calc_plane_aligned_offset(const struct intel_framebuffer *fb, int color_plane, int *x, int *y)
1330 offset = intel_compute_aligned_offset(i915, x, y, &fb->base, color_plane,
1331 fb->base.pitches[color_plane],
1343 static void init_plane_view_dims(const struct intel_framebuffer *fb, int color_plane,
1350 intel_tile_dims(&fb->base, color_plane, &dims->tile_width, &dims->tile_height);
1354 plane_view_src_stride_tiles(const struct intel_framebuffer *fb, int color_plane,
1357 return DIV_ROUND_UP(fb->base.pitches[color_plane],
1358 dims->tile_width * fb->base.format->cpp[color_plane]);
1362 plane_view_dst_stride_tiles(const struct intel_framebuffer *fb, int color_plane,
1377 plane_view_scanout_stride(const struct intel_framebuffer *fb, int color_plane,
1390 return stride_tiles * tile_width * fb->base.format->cpp[color_plane];
1394 plane_view_width_tiles(const struct intel_framebuffer *fb, int color_plane,
1402 plane_view_height_tiles(const struct intel_framebuffer *fb, int color_plane,
1410 plane_view_linear_tiles(const struct intel_framebuffer *fb, int color_plane,
1417 size = (y + dims->height) * fb->base.pitches[color_plane] +
1418 x * fb->base.format->cpp[color_plane];
1434 static u32 calc_plane_remap_info(const struct intel_framebuffer *fb, int color_plane,
1440 struct intel_remapped_plane_info *remap_info = &view->gtt.remapped.plane[color_plane];
1441 struct i915_color_plane_view *color_plane_info = &view->color_plane[color_plane];
1450 if (intel_fb_is_gen12_ccs_aux_plane(&fb->base, color_plane)) {
1454 plane_view_linear_tiles(fb, color_plane, dims, x, y));
1459 plane_view_src_stride_tiles(fb, color_plane, dims));
1461 plane_view_width_tiles(fb, color_plane, dims, x));
1463 plane_view_height_tiles(fb, color_plane, dims, y));
1468 check_array_bounds(i915, view->gtt.rotated.plane, color_plane);
1471 plane_view_dst_stride_tiles(fb, color_plane, remap_info->height));
1493 check_array_bounds(i915, view->gtt.remapped.plane, color_plane);
1507 color_plane_info->mapping_stride = fb->base.pitches[color_plane];
1525 dst_stride = plane_view_dst_stride_tiles(fb, color_plane, dst_stride);
1530 fb->base.format->cpp[color_plane];
1532 plane_view_scanout_stride(fb, color_plane, tile_width,
1547 fb->base.format->cpp[color_plane],
1561 /* Return number of tiles @color_plane needs. */
1563 calc_plane_normal_size(const struct intel_framebuffer *fb, int color_plane,
1569 if (is_surface_linear(&fb->base, color_plane)) {
1570 tiles = plane_view_linear_tiles(fb, color_plane, dims, x, y);
1572 tiles = plane_view_src_stride_tiles(fb, color_plane, dims) *
1573 plane_view_height_tiles(fb, color_plane, dims, y);
1657 fb->normal_view.color_plane[i].x = x;
1658 fb->normal_view.color_plane[i].y = y;
1659 fb->normal_view.color_plane[i].mapping_stride = fb->base.pitches[i];
1660 fb->normal_view.color_plane[i].scanout_stride =
1661 fb->normal_view.color_plane[i].mapping_stride;
1742 x += intel_fb->normal_view.color_plane[i].x;
1743 y += intel_fb->normal_view.color_plane[i].y;
1784 intel_fb_stride_alignment(const struct drm_framebuffer *fb, int color_plane)
1789 if (is_surface_linear(fb, color_plane)) {
1798 if (fb->pitches[color_plane] > max_stride &&
1805 tile_width = intel_tile_width_bytes(fb, color_plane);
1823 color_plane == 0 && fb->width > 3840)
1847 stride = plane_state->view.color_plane[0].mapping_stride;