From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> So while reviewing the NV12 stuff it became clear to me no one had really given fb->offsets[] handling any serious thought. So this patch series aims to fix that. We now treat fb->offsets[] as a linear offset always. One clear benefit over treating it as a linear offset as opposed to a raw byte offset is that we don't have to think about the layout of bytes within the tile at all. The series also generalizes the page rotation to be format agnostic, the caller just specifies the desired geometry in pages for each plane, and the rotation code builds up the sg. The intel_rotation_info then just contains the minimal amount of information needed to do the page rotation. SKL+ also gets changed to use the compute_page_offset stuff so that the plane SURF register will contain the closes (properly aligned) page boundary, and the x/y offsets deal with whatever is left over. The plane code for the other platforms also gets simpler in the end I think. Also the 90/270 rotation handling becomes rather trivial for the plane code. I should still write some decent tests to exercise fb->offsets[]. Series available here: git://github.com/vsyrjala/linux.git fb_offsets Ville Syrjälä (22): drm: Add drm_format_plane_width() and drm_format_plane_height() drm/i915: Pass modifier instead of tiling_mode to gen4_compute_page_offset() drm/i915: Factor out intel_tile_width() drm/i915: Redo intel_tile_height() as intel_tile_size() / intel_tile_width() drm/i915: change intel_fill_fb_ggtt_view() to use the real tile size drm/i915: Use intel_tile_{size,width,height}() in intel_gen4_compute_page_offset() drm/i915: s/intel_gen4_compute_page_offset/intel_compute_page_offset/ drm/i915: Pass 90/270 vs. 0/180 rotation info for intel_gen4_compute_page_offset() drm/i915: Refactor intel_surf_alignment() drm/i915: Support for extra alignment for tiled surfaces drm/i915: Don't pass plane+plane_state to intel_pin_and_fence_fb_obj() drm/i915: Set i915_ggtt_view_normal type explicitly drm/i915: Move the partial and rotated view data into the same union drm/i915: Don't treat differently sized rotated views as equal drm/i915: Pass the dma_addr_t array as const to rotate_pages() drm/i915: Pass stride to rotate_pages() drm/i915: Pass rotation_info to intel_rotate_fb_obj_pages() drm/i915: Make sure fb offset is (macro)pixel aligned drm/i915: Don't leak framebuffer_references if drm_framebuffer_init() fails drm/i915: Pass drm_frambuffer to intel_compute_page_offset() drm/i915: Rewrite fb rotation GTT handling drm/i915: Don't pass pitch to intel_compute_page_offset() drivers/gpu/drm/i915/i915_gem.c | 10 +- drivers/gpu/drm/i915/i915_gem_gtt.c | 88 ++-- drivers/gpu/drm/i915/i915_gem_gtt.h | 27 +- drivers/gpu/drm/i915/intel_display.c | 792 +++++++++++++++++++++++------------ drivers/gpu/drm/i915/intel_drv.h | 46 +- drivers/gpu/drm/i915/intel_fbdev.c | 2 +- drivers/gpu/drm/i915/intel_sprite.c | 128 +++--- include/drm/drm_crtc.h | 12 + 8 files changed, 681 insertions(+), 424 deletions(-) -- 2.4.9 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx