forked from Minki/linux
drm/format-helper: Streamline blit-helper interface
Move destination-buffer clipping from format-helper blit function into caller. Rename drm_fb_blit_rect_dstclip() to drm_fb_blit_toio(). Done for consistency with the rest of the interface. Remove drm_fb_blit_dstclip(), which isn't required. Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> Reviewed-by: Noralf Trønnes <noralf@tronnes.org> Link: https://patchwork.freedesktop.org/patch/msgid/20211110103702.374-6-tzimmermann@suse.de
This commit is contained in:
parent
53bc2098d2
commit
19b20a8021
@ -472,7 +472,7 @@ void drm_fb_xrgb8888_to_gray8(void *dst, unsigned int dst_pitch, const void *vad
|
||||
EXPORT_SYMBOL(drm_fb_xrgb8888_to_gray8);
|
||||
|
||||
/**
|
||||
* drm_fb_blit_rect_dstclip - Copy parts of a framebuffer to display memory
|
||||
* drm_fb_blit_toio - Copy parts of a framebuffer to display memory
|
||||
* @dst: The display memory to copy to
|
||||
* @dst_pitch: Number of bytes between two consecutive scanlines within dst
|
||||
* @dst_format: FOURCC code of the display's color format
|
||||
@ -484,17 +484,14 @@ EXPORT_SYMBOL(drm_fb_xrgb8888_to_gray8);
|
||||
* formats of the display and the framebuffer mismatch, the blit function
|
||||
* will attempt to convert between them.
|
||||
*
|
||||
* Use drm_fb_blit_dstclip() to copy the full framebuffer.
|
||||
*
|
||||
* Returns:
|
||||
* 0 on success, or
|
||||
* -EINVAL if the color-format conversion failed, or
|
||||
* a negative error code otherwise.
|
||||
*/
|
||||
int drm_fb_blit_rect_dstclip(void __iomem *dst, unsigned int dst_pitch,
|
||||
uint32_t dst_format, void *vmap,
|
||||
struct drm_framebuffer *fb,
|
||||
struct drm_rect *clip)
|
||||
int drm_fb_blit_toio(void __iomem *dst, unsigned int dst_pitch, uint32_t dst_format,
|
||||
const void *vmap, const struct drm_framebuffer *fb,
|
||||
const struct drm_rect *clip)
|
||||
{
|
||||
uint32_t fb_format = fb->format->format;
|
||||
|
||||
@ -505,20 +502,16 @@ int drm_fb_blit_rect_dstclip(void __iomem *dst, unsigned int dst_pitch,
|
||||
dst_format = DRM_FORMAT_XRGB8888;
|
||||
|
||||
if (dst_format == fb_format) {
|
||||
dst += clip_offset(clip, dst_pitch, fb->format->cpp[0]);
|
||||
drm_fb_memcpy_toio(dst, dst_pitch, vmap, fb, clip);
|
||||
return 0;
|
||||
|
||||
} else if (dst_format == DRM_FORMAT_RGB565) {
|
||||
if (fb_format == DRM_FORMAT_XRGB8888) {
|
||||
dst += clip_offset(clip, dst_pitch, fb->format->cpp[0]);
|
||||
drm_fb_xrgb8888_to_rgb565_toio(dst, dst_pitch, vmap, fb, clip,
|
||||
false);
|
||||
drm_fb_xrgb8888_to_rgb565_toio(dst, dst_pitch, vmap, fb, clip, false);
|
||||
return 0;
|
||||
}
|
||||
} else if (dst_format == DRM_FORMAT_RGB888) {
|
||||
if (fb_format == DRM_FORMAT_XRGB8888) {
|
||||
dst += clip_offset(clip, dst_pitch, fb->format->cpp[0]);
|
||||
drm_fb_xrgb8888_to_rgb888_toio(dst, dst_pitch, vmap, fb, clip);
|
||||
return 0;
|
||||
}
|
||||
@ -526,36 +519,4 @@ int drm_fb_blit_rect_dstclip(void __iomem *dst, unsigned int dst_pitch,
|
||||
|
||||
return -EINVAL;
|
||||
}
|
||||
EXPORT_SYMBOL(drm_fb_blit_rect_dstclip);
|
||||
|
||||
/**
|
||||
* drm_fb_blit_dstclip - Copy framebuffer to display memory
|
||||
* @dst: The display memory to copy to
|
||||
* @dst_pitch: Number of bytes between two consecutive scanlines within dst
|
||||
* @dst_format: FOURCC code of the display's color format
|
||||
* @vmap: The framebuffer memory to copy from
|
||||
* @fb: The framebuffer to copy from
|
||||
*
|
||||
* This function copies a full framebuffer to display memory. If the formats
|
||||
* of the display and the framebuffer mismatch, the copy function will
|
||||
* attempt to convert between them.
|
||||
*
|
||||
* See drm_fb_blit_rect_dstclip() for more information.
|
||||
*
|
||||
* Returns:
|
||||
* 0 on success, or a negative error code otherwise.
|
||||
*/
|
||||
int drm_fb_blit_dstclip(void __iomem *dst, unsigned int dst_pitch,
|
||||
uint32_t dst_format, void *vmap,
|
||||
struct drm_framebuffer *fb)
|
||||
{
|
||||
struct drm_rect fullscreen = {
|
||||
.x1 = 0,
|
||||
.x2 = fb->width,
|
||||
.y1 = 0,
|
||||
.y2 = fb->height,
|
||||
};
|
||||
return drm_fb_blit_rect_dstclip(dst, dst_pitch, dst_format, vmap, fb,
|
||||
&fullscreen);
|
||||
}
|
||||
EXPORT_SYMBOL(drm_fb_blit_dstclip);
|
||||
EXPORT_SYMBOL(drm_fb_blit_toio);
|
||||
|
@ -641,6 +641,8 @@ simpledrm_simple_display_pipe_enable(struct drm_simple_display_pipe *pipe,
|
||||
struct drm_framebuffer *fb = plane_state->fb;
|
||||
void *vmap = shadow_plane_state->data[0].vaddr; /* TODO: Use mapping abstraction */
|
||||
struct drm_device *dev = &sdev->dev;
|
||||
void __iomem *dst = sdev->screen_base;
|
||||
struct drm_rect clip;
|
||||
int idx;
|
||||
|
||||
if (!fb)
|
||||
@ -649,8 +651,11 @@ simpledrm_simple_display_pipe_enable(struct drm_simple_display_pipe *pipe,
|
||||
if (!drm_dev_enter(dev, &idx))
|
||||
return;
|
||||
|
||||
drm_fb_blit_dstclip(sdev->screen_base, sdev->pitch,
|
||||
sdev->format->format, vmap, fb);
|
||||
drm_rect_init(&clip, 0, 0, fb->width, fb->height);
|
||||
|
||||
dst += drm_fb_clip_offset(sdev->pitch, sdev->format, &clip);
|
||||
drm_fb_blit_toio(dst, sdev->pitch, sdev->format->format, vmap, fb, &clip);
|
||||
|
||||
drm_dev_exit(idx);
|
||||
}
|
||||
|
||||
@ -680,6 +685,7 @@ simpledrm_simple_display_pipe_update(struct drm_simple_display_pipe *pipe,
|
||||
void *vmap = shadow_plane_state->data[0].vaddr; /* TODO: Use mapping abstraction */
|
||||
struct drm_framebuffer *fb = plane_state->fb;
|
||||
struct drm_device *dev = &sdev->dev;
|
||||
void __iomem *dst = sdev->screen_base;
|
||||
struct drm_rect clip;
|
||||
int idx;
|
||||
|
||||
@ -692,8 +698,8 @@ simpledrm_simple_display_pipe_update(struct drm_simple_display_pipe *pipe,
|
||||
if (!drm_dev_enter(dev, &idx))
|
||||
return;
|
||||
|
||||
drm_fb_blit_rect_dstclip(sdev->screen_base, sdev->pitch,
|
||||
sdev->format->format, vmap, fb, &clip);
|
||||
dst += drm_fb_clip_offset(sdev->pitch, sdev->format, &clip);
|
||||
drm_fb_blit_toio(dst, sdev->pitch, sdev->format->format, vmap, fb, &clip);
|
||||
|
||||
drm_dev_exit(idx);
|
||||
}
|
||||
|
@ -36,12 +36,8 @@ void drm_fb_xrgb8888_to_rgb888_toio(void __iomem *dst, unsigned int dst_pitch,
|
||||
void drm_fb_xrgb8888_to_gray8(void *dst, unsigned int dst_pitch, const void *vaddr,
|
||||
const struct drm_framebuffer *fb, const struct drm_rect *clip);
|
||||
|
||||
int drm_fb_blit_rect_dstclip(void __iomem *dst, unsigned int dst_pitch,
|
||||
uint32_t dst_format, void *vmap,
|
||||
struct drm_framebuffer *fb,
|
||||
struct drm_rect *rect);
|
||||
int drm_fb_blit_dstclip(void __iomem *dst, unsigned int dst_pitch,
|
||||
uint32_t dst_format, void *vmap,
|
||||
struct drm_framebuffer *fb);
|
||||
int drm_fb_blit_toio(void __iomem *dst, unsigned int dst_pitch, uint32_t dst_format,
|
||||
const void *vmap, const struct drm_framebuffer *fb,
|
||||
const struct drm_rect *rect);
|
||||
|
||||
#endif /* __LINUX_DRM_FORMAT_HELPER_H */
|
||||
|
Loading…
Reference in New Issue
Block a user