From 44a0e0a099eeeb6501359f08449dcaa5e9899398 Mon Sep 17 00:00:00 2001 From: Jakob Bornecrantz Date: Sat, 23 Jan 2010 01:41:49 +0000 Subject: 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 X8R8G8B8 --- libkms/api.c | 17 ++++++++--------- libkms/intel.c | 31 +++++-------------------------- libkms/libkms.h | 25 +++++++++++++++---------- libkms/vmwgfx.c | 25 ++----------------------- 4 files changed, 30 insertions(+), 68 deletions(-) (limited to 'libkms') diff --git a/libkms/api.c b/libkms/api.c index 7696918a..4a05f3d7 100644 --- a/libkms/api.c +++ b/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); } diff --git a/libkms/intel.c b/libkms/intel.c index 670494e7..a1914f82 100644 --- a/libkms/intel.c +++ b/libkms/intel.c @@ -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)); diff --git a/libkms/libkms.h b/libkms/libkms.h index eb2ed893..46644429 100644 --- a/libkms/libkms.h +++ b/libkms/libkms.h @@ -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); diff --git a/libkms/vmwgfx.c b/libkms/vmwgfx.c index 0568d6e0..d594b3bd 100644 --- a/libkms/vmwgfx.c +++ b/libkms/vmwgfx.c @@ -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; -- cgit v1.2.3