libkms: Rework interface to not duplicate fields from kms and make formats explicit
List of changes: Fixes the cursor size to 64x64, you still need ti supply width and height Explicitly make the cursor format A8R8G8B8 Explicitly make the scanout format X8R8G8B8main
parent
f2730574f2
commit
44a0e0a099
17
libkms/api.c
17
libkms/api.c
|
@ -40,14 +40,7 @@ int kms_create(int fd, struct kms_driver **out)
|
|||
int kms_get_prop(struct kms_driver *kms, unsigned key, unsigned *out)
|
||||
{
|
||||
switch (key) {
|
||||
case KMS_MAX_SCANOUT_WIDTH:
|
||||
case KMS_MAX_SCANOUT_HEIGHT:
|
||||
case KMS_MIN_SCANOUT_WIDTH:
|
||||
case KMS_MIN_SCANOUT_HEIGHT:
|
||||
case KMS_MAX_CURSOR_WIDTH:
|
||||
case KMS_MAX_CURSOR_HEIGHT:
|
||||
case KMS_MIN_CURSOR_WIDTH:
|
||||
case KMS_MIN_CURSOR_HEIGHT:
|
||||
case KMS_BO_TYPE:
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
|
@ -69,7 +62,7 @@ int kms_bo_create(struct kms_driver *kms, const unsigned *attr, struct kms_bo **
|
|||
{
|
||||
unsigned width = 0;
|
||||
unsigned height = 0;
|
||||
enum kms_bo_type type = KMS_BO_TYPE_SCANOUT;
|
||||
enum kms_bo_type type = KMS_BO_TYPE_SCANOUT_X8R8G8B8;
|
||||
int i;
|
||||
|
||||
for (i = 0; attr[i];) {
|
||||
|
@ -94,6 +87,12 @@ int kms_bo_create(struct kms_driver *kms, const unsigned *attr, struct kms_bo **
|
|||
if (width == 0 || height == 0)
|
||||
return -EINVAL;
|
||||
|
||||
/* XXX sanity check type */
|
||||
|
||||
if (type == KMS_BO_TYPE_CURSOR_64X64_A8R8G8B8 &&
|
||||
(width != 64 || height != 64))
|
||||
return -EINVAL;
|
||||
|
||||
return kms->bo_create(kms, width, height, type, attr, out);
|
||||
}
|
||||
|
||||
|
|
|
@ -53,29 +53,8 @@ static int
|
|||
intel_get_prop(struct kms_driver *kms, unsigned key, unsigned *out)
|
||||
{
|
||||
switch (key) {
|
||||
case KMS_MAX_SCANOUT_WIDTH:
|
||||
*out = 4096;
|
||||
break;
|
||||
case KMS_MAX_SCANOUT_HEIGHT:
|
||||
*out = 4096;
|
||||
break;
|
||||
case KMS_MIN_SCANOUT_WIDTH:
|
||||
*out = 1;
|
||||
break;
|
||||
case KMS_MIN_SCANOUT_HEIGHT:
|
||||
*out = 1;
|
||||
break;
|
||||
case KMS_MAX_CURSOR_WIDTH:
|
||||
*out = 64;
|
||||
break;
|
||||
case KMS_MAX_CURSOR_HEIGHT:
|
||||
*out = 64;
|
||||
break;
|
||||
case KMS_MIN_CURSOR_WIDTH:
|
||||
*out = 64;
|
||||
break;
|
||||
case KMS_MIN_CURSOR_HEIGHT:
|
||||
*out = 64;
|
||||
case KMS_BO_TYPE:
|
||||
*out = KMS_BO_TYPE_SCANOUT_X8R8G8B8 | KMS_BO_TYPE_CURSOR_64X64_A8R8G8B8;
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
|
@ -116,10 +95,10 @@ intel_bo_create(struct kms_driver *kms,
|
|||
if (!bo)
|
||||
return -ENOMEM;
|
||||
|
||||
if (type == KMS_BO_TYPE_CURSOR) {
|
||||
if (type == KMS_BO_TYPE_CURSOR_64X64_A8R8G8B8) {
|
||||
pitch = 64 * 4;
|
||||
size = 64 * 64 * 4;
|
||||
} else if (type == KMS_BO_TYPE_SCANOUT) {
|
||||
} else if (type == KMS_BO_TYPE_SCANOUT_X8R8G8B8) {
|
||||
pitch = width * 4;
|
||||
pitch = (pitch + 512 - 1) & ~(512 - 1);
|
||||
size = pitch * ((height + 4 - 1) & ~(4 - 1));
|
||||
|
@ -140,7 +119,7 @@ intel_bo_create(struct kms_driver *kms,
|
|||
bo->base.pitch = pitch;
|
||||
|
||||
*out = &bo->base;
|
||||
if (type == KMS_BO_TYPE_SCANOUT && pitch > 512) {
|
||||
if (type == KMS_BO_TYPE_SCANOUT_X8R8G8B8 && pitch > 512) {
|
||||
struct drm_i915_gem_set_tiling tile;
|
||||
|
||||
memset(&tile, 0, sizeof(tile));
|
||||
|
|
|
@ -29,31 +29,36 @@
|
|||
#ifndef _LIBKMS_H_
|
||||
#define _LIBKMS_H_
|
||||
|
||||
/**
|
||||
* \file
|
||||
*
|
||||
*/
|
||||
|
||||
struct kms_driver;
|
||||
struct kms_bo;
|
||||
|
||||
enum kms_attrib
|
||||
{
|
||||
KMS_TERMINATE_PROP_LIST,
|
||||
#define KMS_TERMINATE_PROP_LIST KMS_TERMINATE_PROP_LIST
|
||||
KMS_BO_TYPE,
|
||||
#define KMS_BO_TYPE KMS_BO_TYPE
|
||||
KMS_WIDTH,
|
||||
#define KMS_WIDTH KMS_WIDTH
|
||||
KMS_HEIGHT,
|
||||
#define KMS_HEIGHT KMS_HEIGHT
|
||||
KMS_PITCH,
|
||||
#define KMS_PITCH KMS_PITCH
|
||||
KMS_HANDLE,
|
||||
KMS_MAX_SCANOUT_WIDTH,
|
||||
KMS_MAX_SCANOUT_HEIGHT,
|
||||
KMS_MIN_SCANOUT_WIDTH,
|
||||
KMS_MIN_SCANOUT_HEIGHT,
|
||||
KMS_MAX_CURSOR_WIDTH,
|
||||
KMS_MAX_CURSOR_HEIGHT,
|
||||
KMS_MIN_CURSOR_WIDTH,
|
||||
KMS_MIN_CURSOR_HEIGHT,
|
||||
#define KMS_HANDLE KMS_HANDLE
|
||||
};
|
||||
|
||||
enum kms_bo_type
|
||||
{
|
||||
KMS_BO_TYPE_SCANOUT = (1 << 0),
|
||||
KMS_BO_TYPE_CURSOR = (1 << 1),
|
||||
KMS_BO_TYPE_SCANOUT_X8R8G8B8 = (1 << 0),
|
||||
#define KMS_BO_TYPE_SCANOUT_X8R8G8B8 KMS_BO_TYPE_SCANOUT_X8R8G8B8
|
||||
KMS_BO_TYPE_CURSOR_64X64_A8R8G8B8 = (1 << 1),
|
||||
#define KMS_BO_TYPE_CURSOR_64X64_A8R8G8B8 KMS_BO_TYPE_CURSOR_64X64_A8R8G8B8
|
||||
};
|
||||
|
||||
int kms_create(int fd, struct kms_driver **out);
|
||||
|
|
|
@ -49,29 +49,8 @@ static int
|
|||
vmwgfx_get_prop(struct kms_driver *kms, unsigned key, unsigned *out)
|
||||
{
|
||||
switch (key) {
|
||||
case KMS_MAX_SCANOUT_WIDTH:
|
||||
*out = 2048;
|
||||
break;
|
||||
case KMS_MAX_SCANOUT_HEIGHT:
|
||||
*out = 2048;
|
||||
break;
|
||||
case KMS_MIN_SCANOUT_WIDTH:
|
||||
*out = 1;
|
||||
break;
|
||||
case KMS_MIN_SCANOUT_HEIGHT:
|
||||
*out = 1;
|
||||
break;
|
||||
case KMS_MAX_CURSOR_WIDTH:
|
||||
*out = 64;
|
||||
break;
|
||||
case KMS_MAX_CURSOR_HEIGHT:
|
||||
*out = 64;
|
||||
break;
|
||||
case KMS_MIN_CURSOR_WIDTH:
|
||||
*out = 64;
|
||||
break;
|
||||
case KMS_MIN_CURSOR_HEIGHT:
|
||||
*out = 64;
|
||||
case KMS_BO_TYPE:
|
||||
*out = KMS_BO_TYPE_SCANOUT_X8R8G8B8 | KMS_BO_TYPE_CURSOR_64X64_A8R8G8B8;
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
|
|
|
@ -44,7 +44,7 @@ int test_bo(struct kms_driver *kms)
|
|||
unsigned attrs[7] = {
|
||||
KMS_WIDTH, 1024,
|
||||
KMS_HEIGHT, 768,
|
||||
KMS_BO_TYPE, KMS_BO_TYPE_SCANOUT,
|
||||
KMS_BO_TYPE, KMS_BO_TYPE_SCANOUT_X8R8G8B8,
|
||||
KMS_TERMINATE_PROP_LIST,
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue