summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas White <taw@bitwiz.org.uk>2009-05-05 00:38:09 +0100
committerThomas White <taw@bitwiz.org.uk>2009-05-05 00:38:09 +0100
commite33e6606ea98abc088310d0b570fabc656c0392f (patch)
tree5cfaabebbca11567ba21d3e26e13f097b3fd2e24
parente422335ee7e950236c478eeefa1fc5cde90fd3aa (diff)
Add memory manager test
This adds a new test, for the GEM object allocation. The Makefile and comments were fixed to reflect this.
-rw-r--r--Makefile20
-rw-r--r--gdri-cmdq-submission.c2
-rw-r--r--gdri-mem-manager.c120
3 files changed, 131 insertions, 11 deletions
diff --git a/Makefile b/Makefile
index cc773d4..1975ed3 100644
--- 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
diff --git a/gdri-cmdq-submission.c b/gdri-cmdq-submission.c
index a78093b..d14bcf0 100644
--- a/gdri-cmdq-submission.c
+++ b/gdri-cmdq-submission.c
@@ -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
index 0000000..6224a42
--- /dev/null
+++ b/gdri-mem-manager.c
@@ -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;
+}