Add memory manager test
authorThomas White <taw@bitwiz.org.uk>
Mon, 4 May 2009 23:38:09 +0000 (00:38 +0100)
committerThomas White <taw@bitwiz.org.uk>
Mon, 4 May 2009 23:38:09 +0000 (00:38 +0100)
This adds a new test, for the GEM object allocation.
The Makefile and comments were fixed to reflect this.

Makefile
gdri-cmdq-submission.c
gdri-mem-manager.c [new file with mode: 0644]

index cc773d4..1975ed3 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,18 +1,17 @@
 CFLAGS=-g -W -Wall
-LIBS=-lX11 -lXext -ldrm
+LIBS=-lX11 -lXext -ldrm -ldrm_glamo
 CC=gcc
 
-gdri-cmdq-submission: gdri-cmdq-submission.o dri2.o utils.o
-       $(CC) gdri-cmdq-submission.o dri2.o utils.o -o gdri-cmdq-submission ${LIBS}
+default: gdri-cmdq-submission gdri-mem-manager
 
-dri2.o: dri2.c
-       $(CC) -c ${CFLAGS} ${CROSS_CFLAGS} dri2.c -o dri2.o
+.c.o:
+       $(CC) -c ${CFLAGS} ${CROSS_CFLAGS} $*.c
 
-gdri-cmdq-submission.o: gdri-cmdq-submission.c
-       $(CC) -c ${CFLAGS} ${CROSS_CFLAGS} gdri-cmdq-submission.c -o gdri-cmdq-submission.o
+gdri-cmdq-submission: gdri-cmdq-submission.o dri2.o utils.o
+       $(CC) gdri-cmdq-submission.o dri2.o utils.o -o gdri-cmdq-submission ${LIBS}
 
-utils.o: utils.c
-       $(CC) -c ${CFLAGS} ${CROSS_CFLAGS} utils.c -o utils.o
+gdri-mem-manager: gdri-mem-manager.o dri2.o utils.o
+       $(CC) gdri-mem-manager.o dri2.o utils.o -o gdri-mem-manager ${LIBS}
 
 clean:
        rm -rf dri2.o gdri-cmdq-submission.o utils.o gdri-cmdq-submission
@@ -20,5 +19,6 @@ clean:
 install:
        install -d -m 755 ${PREFIX}/bin
        install -m 755 gdri-cmdq-submission ${PREFIX}/bin
+       install -m 755 gdri-mem-manager ${PREFIX}/bin
 
-.PHONY: clean install
+.PHONY: clean install default
index a78093b..d14bcf0 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * gdri-cmdq-submission.c
  *
- * A small test of some Glamo DRI functions
+ * Test for command submission via Glamo DRI
  *
  * (c) 2009 Thomas White <taw@bitwiz.org.uk>
  *
diff --git a/gdri-mem-manager.c b/gdri-mem-manager.c
new file mode 100644 (file)
index 0000000..6224a42
--- /dev/null
@@ -0,0 +1,120 @@
+/*
+ * gdri-cmdq-submission.c
+ *
+ * Test for Glamo DRI's memory management
+ *
+ * (c) 2009 Thomas White <taw@bitwiz.org.uk>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <X11/Xlib.h>
+
+#include <X11/Xmd.h>
+#include <stdint.h>
+#include <drm/drm.h>
+#include <drm/glamo_drm.h>
+#include <drm/glamo_bo.h>
+#include <glamo_bo_gem.h>
+
+#include "dri2.h"
+#include "glamo-regs.h"
+#include "utils.h"
+
+
+int main()
+{
+       Display *dpy;
+       drm_glamo_cmd_buffer_t cmdbuf;
+       uint16_t *cmds;
+       int r;
+       uint32_t offset = 0x000000;
+       RING_LOCALS;
+       int fd;
+       struct glamo_bo_manager *bufmgr;
+       struct glamo_bo *bo;
+       struct glamo_bo *bo2;
+       struct glamo_bo *bo3;
+       char tmp[3];
+
+       /* Open display */
+       dpy = XOpenDisplay(NULL);
+       if ( dpy == NULL ) {
+               fprintf(stderr, "Can't open display '%s'\n",
+                       XDisplayName(NULL));
+               return 1;
+       }
+
+       fd = do_drm_authentication(dpy);
+       if ( fd < 0 ) {
+               fprintf(stderr, "Couldn't authenticate\n");
+               return 1;
+       }
+
+       bufmgr = glamo_bo_manager_gem_ctor(fd);
+       printf("Allocated a new glamo_bo_manager: 0x%p\n", bufmgr);
+
+       bo = bufmgr->funcs->bo_open(bufmgr,
+                                   0, /* handle */
+                                   1024,
+                                   2,
+                                   GLAMO_GEM_DOMAIN_VRAM,
+                                   0); /* flags */
+
+       printf("Allocated a 1024 byte buffer object: 0x%p\n", bo);
+       printf(" handle = %i\n", bo->handle);
+
+       bo2 = bufmgr->funcs->bo_open(bufmgr,
+                                   0, /* handle */
+                                   16384,
+                                   2,
+                                   GLAMO_GEM_DOMAIN_VRAM,
+                                   0); /* flags */
+
+       printf("Allocated a 16384 byte buffer object: 0x%p\n", bo2);
+       printf(" handle = %i\n", bo2->handle);
+
+       bo3 = bufmgr->funcs->bo_open(bufmgr,
+                                   0, /* handle */
+                                   1024*1024,
+                                   2,
+                                   GLAMO_GEM_DOMAIN_VRAM,
+                                   0); /* flags */
+
+       printf("Allocated a 1024 kilobyte buffer object: 0x%p\n", bo3);
+       printf(" handle = %i\n", bo3->handle);
+
+       printf("Press enter to continue...\n");
+       fgets(tmp, 3, stdin);
+
+       bufmgr->funcs->bo_unref(bo);
+       printf("Unreferenced the first buffer object.\n");
+
+       printf("I *didn't* unreference the second buffer object.\n");
+
+       bufmgr->funcs->bo_unref(bo3);
+       printf("Unreferenced the third buffer object.\n");
+
+       glamo_bo_manager_gem_dtor(bufmgr);
+       printf("Destroyed the glamo_bo_manager.\n");
+
+       close(fd);
+       XCloseDisplay(dpy);
+
+       return 0;
+}