Updated test mode and added modedemo
authorJakob Bornecrantz <jakob@aurora.(none)>
Thu, 10 Jan 2008 04:03:13 +0000 (05:03 +0100)
committerJakob Bornecrantz <jakob@aurora.(none)>
Thu, 10 Jan 2008 04:03:13 +0000 (05:03 +0100)
tests/mode/Makefile
tests/mode/modetest.c
tests/mode/test
tests/modedemo/Makefile [new file with mode: 0644]
tests/modedemo/demo.c [new file with mode: 0644]
tests/modedemo/test [new file with mode: 0755]

index a3d3b49..7a9c3c2 100644 (file)
@@ -1,11 +1,14 @@
 
-all: modetest
+all: app
 
 #CFLAGS = -g -ansi -pedantic -DPOSIX_C_SOURCE=199309L \
 #        -D_POSIX_SOURCE -D_XOPEN_SOURCE -D_BSD_SOURCE -D_SVID_SOURCE \
 
-modetest: modetest.c
-       @gcc $(CFLAGS) -o modetest -Wall -I../../libdrm -I../../shared-core -L../../libdrm/.libs -ldrm modetest.c 
+app: modetest.c
+       @gcc $(CFLAGS) -o app -Wall -I../../libdrm -I../../shared-core -L../../libdrm/.libs -ldrm modetest.c
 
 clean:
-       @rm -f modetest
+       @rm -f app
+
+run: app
+       @sudo ./test
index bd8372d..c1f291b 100644 (file)
@@ -278,7 +278,15 @@ int testFrameBufferAdd(int fd, drmModeResPtr res)
        printf("\tCreating BO\n");
 
        /* TODO */
-       ret = 1;
+       ret = drmBOCreate(fd, 800 * 600 * 4, 0, 0,
+               DRM_BO_FLAG_READ |
+               DRM_BO_FLAG_WRITE |
+               DRM_BO_FLAG_MEM_TT |
+               DRM_BO_FLAG_MEM_VRAM |
+               DRM_BO_FLAG_NO_EVICT,
+               DRM_BO_HINT_DONT_FENCE, &bo);
+
+       printf("\tgot %i\n", ret);
        if (ret)
                goto err;
 
index fa155f4..f98e370 100755 (executable)
@@ -1 +1 @@
-LD_PRELOAD=../../libdrm/.libs/libdrm.so ./modetest
+LD_PRELOAD=../../libdrm/.libs/libdrm.so ./app
diff --git a/tests/modedemo/Makefile b/tests/modedemo/Makefile
new file mode 100644 (file)
index 0000000..467fb11
--- /dev/null
@@ -0,0 +1,14 @@
+
+all: app
+
+#CFLAGS = -g -ansi -pedantic -DPOSIX_C_SOURCE=199309L \
+#        -D_POSIX_SOURCE -D_XOPEN_SOURCE -D_BSD_SOURCE -D_SVID_SOURCE \
+
+app: demo.c
+       @gcc $(CFLAGS) -o app -Wall -I../../libdrm -I../../shared-core -L../../libdrm/.libs -ldrm demo.c
+
+clean:
+       @rm -f app
+
+run: app
+       sudo ./test
diff --git a/tests/modedemo/demo.c b/tests/modedemo/demo.c
new file mode 100644 (file)
index 0000000..ea71fd1
--- /dev/null
@@ -0,0 +1,119 @@
+
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <unistd.h>
+#include <string.h>
+
+#include "xf86drm.h"
+#include "xf86drmMode.h"
+static struct drm_mode_modeinfo mode = {
+       .name = "Test mode",
+       .clock = 25200,
+       .hdisplay = 640,
+       .hsync_start = 656,
+       .hsync_end = 752,
+       .htotal = 800,
+       .hskew = 0,
+       .vdisplay = 480,
+       .vsync_start = 490,
+       .vsync_end = 492,
+       .vtotal = 525,
+       .vscan = 0,
+       .vrefresh = 60000, /* vertical refresh * 1000 */
+       .flags = 10,
+};
+
+drmModeFBPtr createFB(int fd, drmModeResPtr res);
+int findConnectedOutputs(int fd, drmModeResPtr res, drmModeOutputPtr *out);
+drmModeCrtcPtr findFreeCrtc(int fd, drmModeResPtr res);
+
+int main(int argc, char **argv)
+{
+       int fd;
+       const char *driver = "i915"; /* hardcoded for now */
+       drmModeResPtr res;
+       drmModeFBPtr framebuffer;
+       int numOutputs;
+       drmModeOutputPtr out[8];
+       drmModeCrtcPtr crtc;
+
+       printf("Starting test\n");
+
+       fd = drmOpen(driver, NULL);
+
+       if (fd < 0) {
+               printf("Failed to open the card fb\n");
+               return 1;
+       }
+
+       res = drmModeGetResources(fd);
+       if (res == 0) {
+               printf("Failed to get resources from card\n");
+               drmClose(fd);
+               return 1;
+       }
+
+       framebuffer = createFB(fd, res);
+       if (framebuffer == NULL) {
+               printf("Failed to create framebuffer\n");
+               return 1;
+       }
+
+       numOutputs = findConnectedOutputs(fd, res, out);
+       if (numOutputs < 1) {
+               printf("Failed to find connected outputs\n");
+               return 1;
+       }
+
+       crtc = findFreeCrtc(fd, res);
+       if (numOutputs < 1) {
+               printf("Couldn't find a free crtc\n");
+               return 1;
+       }
+
+
+       drmModeSetCrtc(fd, crtc->crtc_id, framebuffer->buffer_id, 0, 0, &out[0]->output_id, 1, &mode);
+       sleep(2);
+       drmModeSetCrtc(fd, crtc->crtc_id, framebuffer->buffer_id, 0, 500, &out[0]->output_id, 1, &mode);
+       sleep(2);
+       drmModeSetCrtc(fd, crtc->crtc_id, framebuffer->buffer_id, 500, 0, &out[0]->output_id, 1, &mode);
+       sleep(2);
+       drmModeSetCrtc(fd, crtc->crtc_id, framebuffer->buffer_id, 500, 500, &out[0]->output_id, 1, &mode);
+
+    drmModeFreeResources(res);
+    printf("Ok\n");
+
+    return 0;
+}
+
+drmModeFBPtr createFB(int fd, drmModeResPtr res)
+{
+       /* Haveing problems getting drmBOCreate to work with me. */
+       return drmModeGetFB(fd, res->fbs[1]);
+}
+
+int findConnectedOutputs(int fd, drmModeResPtr res, drmModeOutputPtr *out)
+{
+       int count = 0;
+       int i;
+
+       drmModeOutputPtr output;
+
+       for (i = 0; i < res->count_outputs; i++) {
+               output = drmModeGetOutput(fd, res->outputs[i]);
+
+               if (!output || output->connection != DRM_MODE_CONNECTED)
+                       continue;
+
+               out[count++] = output;
+       }
+
+       return count;
+}
+
+drmModeCrtcPtr findFreeCrtc(int fd, drmModeResPtr res)
+{
+       return drmModeGetCrtc(fd, res->crtcs[0]);
+}
diff --git a/tests/modedemo/test b/tests/modedemo/test
new file mode 100755 (executable)
index 0000000..f98e370
--- /dev/null
@@ -0,0 +1 @@
+LD_PRELOAD=../../libdrm/.libs/libdrm.so ./app