OSDN Git Service

libkms: Rework interface to not duplicate fields from kms and make formats explicit
authorJakob Bornecrantz <jakob@vmware.com>
Sat, 23 Jan 2010 01:41:49 +0000 (01:41 +0000)
committerJakob Bornecrantz <jakob@vmware.com>
Thu, 28 Jan 2010 16:32:54 +0000 (17:32 +0100)
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
libkms/intel.c
libkms/libkms.h
libkms/vmwgfx.c
tests/kmstest/main.c

index 7696918..4a05f3d 100644 (file)
@@ -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);
 }
 
index 670494e..a1914f8 100644 (file)
@@ -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));
index eb2ed89..4664442 100644 (file)
 #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);
index 0568d6e..d594b3b 100644 (file)
@@ -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;
index bd41b06..7aaeb75 100644 (file)
@@ -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,
        };