diff options
author | Thomas White <taw@bitwiz.org.uk> | 2009-05-05 00:38:09 +0100 |
---|---|---|
committer | Thomas White <taw@bitwiz.org.uk> | 2009-05-05 00:38:09 +0100 |
commit | e33e6606ea98abc088310d0b570fabc656c0392f (patch) | |
tree | 5cfaabebbca11567ba21d3e26e13f097b3fd2e24 /gdri-mem-manager.c | |
parent | e422335ee7e950236c478eeefa1fc5cde90fd3aa (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.c | 120 |
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; +} |