summaryrefslogtreecommitdiff
path: root/gdri-mem-manager.c
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 /gdri-mem-manager.c
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.
Diffstat (limited to 'gdri-mem-manager.c')
-rw-r--r--gdri-mem-manager.c120
1 files changed, 120 insertions, 0 deletions
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;
+}