drm: virtio: add virtio_gpu_translate_format
Factors out code, no functional change. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch> Tested-by: Laurent Vivier <lvivier@redhat.com> Link: http://patchwork.freedesktop.org/patch/msgid/20170403070845.10793-2-kraxel@redhat.com
This commit is contained in:
parent
5d5f7c5715
commit
d519cb7618
@ -334,6 +334,7 @@ int virtio_gpu_modeset_init(struct virtio_gpu_device *vgdev);
|
|||||||
void virtio_gpu_modeset_fini(struct virtio_gpu_device *vgdev);
|
void virtio_gpu_modeset_fini(struct virtio_gpu_device *vgdev);
|
||||||
|
|
||||||
/* virtio_gpu_plane.c */
|
/* virtio_gpu_plane.c */
|
||||||
|
uint32_t virtio_gpu_translate_format(uint32_t drm_fourcc);
|
||||||
struct drm_plane *virtio_gpu_plane_init(struct virtio_gpu_device *vgdev,
|
struct drm_plane *virtio_gpu_plane_init(struct virtio_gpu_device *vgdev,
|
||||||
enum drm_plane_type type,
|
enum drm_plane_type type,
|
||||||
int index);
|
int index);
|
||||||
|
@ -231,63 +231,9 @@ static int virtio_gpufb_create(struct drm_fb_helper *helper,
|
|||||||
mode_cmd.pitches[0] = mode_cmd.width * 4;
|
mode_cmd.pitches[0] = mode_cmd.width * 4;
|
||||||
mode_cmd.pixel_format = drm_mode_legacy_fb_format(32, 24);
|
mode_cmd.pixel_format = drm_mode_legacy_fb_format(32, 24);
|
||||||
|
|
||||||
switch (mode_cmd.pixel_format) {
|
format = virtio_gpu_translate_format(mode_cmd.pixel_format);
|
||||||
#ifdef __BIG_ENDIAN
|
if (format == 0)
|
||||||
case DRM_FORMAT_XRGB8888:
|
|
||||||
format = VIRTIO_GPU_FORMAT_X8R8G8B8_UNORM;
|
|
||||||
break;
|
|
||||||
case DRM_FORMAT_ARGB8888:
|
|
||||||
format = VIRTIO_GPU_FORMAT_A8R8G8B8_UNORM;
|
|
||||||
break;
|
|
||||||
case DRM_FORMAT_BGRX8888:
|
|
||||||
format = VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM;
|
|
||||||
break;
|
|
||||||
case DRM_FORMAT_BGRA8888:
|
|
||||||
format = VIRTIO_GPU_FORMAT_B8G8R8A8_UNORM;
|
|
||||||
break;
|
|
||||||
case DRM_FORMAT_RGBX8888:
|
|
||||||
format = VIRTIO_GPU_FORMAT_R8G8B8X8_UNORM;
|
|
||||||
break;
|
|
||||||
case DRM_FORMAT_RGBA8888:
|
|
||||||
format = VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM;
|
|
||||||
break;
|
|
||||||
case DRM_FORMAT_XBGR8888:
|
|
||||||
format = VIRTIO_GPU_FORMAT_X8B8G8R8_UNORM;
|
|
||||||
break;
|
|
||||||
case DRM_FORMAT_ABGR8888:
|
|
||||||
format = VIRTIO_GPU_FORMAT_A8B8G8R8_UNORM;
|
|
||||||
break;
|
|
||||||
#else
|
|
||||||
case DRM_FORMAT_XRGB8888:
|
|
||||||
format = VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM;
|
|
||||||
break;
|
|
||||||
case DRM_FORMAT_ARGB8888:
|
|
||||||
format = VIRTIO_GPU_FORMAT_B8G8R8A8_UNORM;
|
|
||||||
break;
|
|
||||||
case DRM_FORMAT_BGRX8888:
|
|
||||||
format = VIRTIO_GPU_FORMAT_X8R8G8B8_UNORM;
|
|
||||||
break;
|
|
||||||
case DRM_FORMAT_BGRA8888:
|
|
||||||
format = VIRTIO_GPU_FORMAT_A8R8G8B8_UNORM;
|
|
||||||
break;
|
|
||||||
case DRM_FORMAT_RGBX8888:
|
|
||||||
format = VIRTIO_GPU_FORMAT_X8B8G8R8_UNORM;
|
|
||||||
break;
|
|
||||||
case DRM_FORMAT_RGBA8888:
|
|
||||||
format = VIRTIO_GPU_FORMAT_A8B8G8R8_UNORM;
|
|
||||||
break;
|
|
||||||
case DRM_FORMAT_XBGR8888:
|
|
||||||
format = VIRTIO_GPU_FORMAT_R8G8B8X8_UNORM;
|
|
||||||
break;
|
|
||||||
case DRM_FORMAT_ABGR8888:
|
|
||||||
format = VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM;
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
default:
|
|
||||||
DRM_ERROR("failed to find virtio gpu format for %d\n",
|
|
||||||
mode_cmd.pixel_format);
|
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
|
||||||
|
|
||||||
size = mode_cmd.pitches[0] * mode_cmd.height;
|
size = mode_cmd.pitches[0] * mode_cmd.height;
|
||||||
obj = virtio_gpu_alloc_object(dev, size, false, true);
|
obj = virtio_gpu_alloc_object(dev, size, false, true);
|
||||||
|
@ -42,6 +42,74 @@ static const uint32_t virtio_gpu_cursor_formats[] = {
|
|||||||
DRM_FORMAT_ARGB8888,
|
DRM_FORMAT_ARGB8888,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
uint32_t virtio_gpu_translate_format(uint32_t drm_fourcc)
|
||||||
|
{
|
||||||
|
uint32_t format;
|
||||||
|
|
||||||
|
switch (drm_fourcc) {
|
||||||
|
#ifdef __BIG_ENDIAN
|
||||||
|
case DRM_FORMAT_XRGB8888:
|
||||||
|
format = VIRTIO_GPU_FORMAT_X8R8G8B8_UNORM;
|
||||||
|
break;
|
||||||
|
case DRM_FORMAT_ARGB8888:
|
||||||
|
format = VIRTIO_GPU_FORMAT_A8R8G8B8_UNORM;
|
||||||
|
break;
|
||||||
|
case DRM_FORMAT_BGRX8888:
|
||||||
|
format = VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM;
|
||||||
|
break;
|
||||||
|
case DRM_FORMAT_BGRA8888:
|
||||||
|
format = VIRTIO_GPU_FORMAT_B8G8R8A8_UNORM;
|
||||||
|
break;
|
||||||
|
case DRM_FORMAT_RGBX8888:
|
||||||
|
format = VIRTIO_GPU_FORMAT_R8G8B8X8_UNORM;
|
||||||
|
break;
|
||||||
|
case DRM_FORMAT_RGBA8888:
|
||||||
|
format = VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM;
|
||||||
|
break;
|
||||||
|
case DRM_FORMAT_XBGR8888:
|
||||||
|
format = VIRTIO_GPU_FORMAT_X8B8G8R8_UNORM;
|
||||||
|
break;
|
||||||
|
case DRM_FORMAT_ABGR8888:
|
||||||
|
format = VIRTIO_GPU_FORMAT_A8B8G8R8_UNORM;
|
||||||
|
break;
|
||||||
|
#else
|
||||||
|
case DRM_FORMAT_XRGB8888:
|
||||||
|
format = VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM;
|
||||||
|
break;
|
||||||
|
case DRM_FORMAT_ARGB8888:
|
||||||
|
format = VIRTIO_GPU_FORMAT_B8G8R8A8_UNORM;
|
||||||
|
break;
|
||||||
|
case DRM_FORMAT_BGRX8888:
|
||||||
|
format = VIRTIO_GPU_FORMAT_X8R8G8B8_UNORM;
|
||||||
|
break;
|
||||||
|
case DRM_FORMAT_BGRA8888:
|
||||||
|
format = VIRTIO_GPU_FORMAT_A8R8G8B8_UNORM;
|
||||||
|
break;
|
||||||
|
case DRM_FORMAT_RGBX8888:
|
||||||
|
format = VIRTIO_GPU_FORMAT_X8B8G8R8_UNORM;
|
||||||
|
break;
|
||||||
|
case DRM_FORMAT_RGBA8888:
|
||||||
|
format = VIRTIO_GPU_FORMAT_A8B8G8R8_UNORM;
|
||||||
|
break;
|
||||||
|
case DRM_FORMAT_XBGR8888:
|
||||||
|
format = VIRTIO_GPU_FORMAT_R8G8B8X8_UNORM;
|
||||||
|
break;
|
||||||
|
case DRM_FORMAT_ABGR8888:
|
||||||
|
format = VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
/*
|
||||||
|
* This should not happen, we handle everything listed
|
||||||
|
* in virtio_gpu_formats[].
|
||||||
|
*/
|
||||||
|
format = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
WARN_ON(format == 0);
|
||||||
|
return format;
|
||||||
|
}
|
||||||
|
|
||||||
static void virtio_gpu_plane_destroy(struct drm_plane *plane)
|
static void virtio_gpu_plane_destroy(struct drm_plane *plane)
|
||||||
{
|
{
|
||||||
drm_plane_cleanup(plane);
|
drm_plane_cleanup(plane);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user