diff options
author | Ben Widawsky <ben@bwidawsk.net> | 2012-01-13 11:31:52 -0800 |
---|---|---|
committer | Ben Widawsky <ben@bwidawsk.net> | 2012-05-26 17:24:34 -0700 |
commit | 86e6ca06169f9648c54e07b6f4909bc65ce96b4f (patch) | |
tree | bc62bb32b0d44184ebeeb0ffb3df6702b9704486 | |
parent | df4affbd0458a8ffb2eec88347c5b37049ad5ffd (diff) |
intel/context: create/destroy implementation
Add relevant code to set up minimal state and call the appropriate
kernel IOCTLs.
Signed-off-by: Ben Widawsky <ben@bwidawsk.net>
-rw-r--r-- | include/drm/i915_drm.h | 7 | ||||
-rw-r--r-- | intel/intel_bufmgr.h | 3 | ||||
-rw-r--r-- | intel/intel_bufmgr_gem.c | 45 |
3 files changed, 51 insertions, 4 deletions
diff --git a/include/drm/i915_drm.h b/include/drm/i915_drm.h index b7d2396d1..f6932f1fb 100644 --- a/include/drm/i915_drm.h +++ b/include/drm/i915_drm.h @@ -191,8 +191,8 @@ typedef struct _drm_i915_sarea { #define DRM_I915_GEM_EXECBUFFER2 0x29 #define DRM_I915_GET_SPRITE_COLORKEY 0x2a #define DRM_I915_SET_SPRITE_COLORKEY 0x2b -#define DRM_I915_GEM_CONTEXT_CREATE 0x2c -#define DRM_I915_GEM_CONTEXT_DESTROY 0x2d +#define DRM_I915_GEM_CONTEXT_CREATE 0x2d +#define DRM_I915_GEM_CONTEXT_DESTROY 0x2e #define DRM_IOCTL_I915_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t) #define DRM_IOCTL_I915_FLUSH DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLUSH) @@ -239,7 +239,6 @@ typedef struct _drm_i915_sarea { #define DRM_IOCTL_I915_GEM_CONTEXT_CREATE DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_CREATE, struct drm_i915_gem_context_create) #define DRM_IOCTL_I915_GEM_CONTEXT_DESTROY DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_DESTROY, struct drm_i915_gem_context_destroy) - /* Allow drivers to submit batchbuffers directly to hardware, relying * on the security mechanisms provided by hardware. */ @@ -889,7 +888,7 @@ struct drm_intel_sprite_colorkey { }; struct drm_i915_gem_context_create { - /* output: id of new context*/ + /* output: id of new context*/ __u32 ctx_id; __u32 pad; }; diff --git a/intel/intel_bufmgr.h b/intel/intel_bufmgr.h index 83a43cb5d..3c499c66e 100644 --- a/intel/intel_bufmgr.h +++ b/intel/intel_bufmgr.h @@ -186,6 +186,9 @@ int drm_intel_get_pipe_from_crtc_id(drm_intel_bufmgr *bufmgr, int crtc_id); int drm_intel_get_aperture_sizes(int fd, size_t *mappable, size_t *total); int drm_intel_bufmgr_gem_get_devid(drm_intel_bufmgr *bufmgr); +drm_intel_context *drm_intel_gem_context_create(drm_intel_bufmgr *bufmgr); +void drm_intel_gem_context_destroy(drm_intel_context *ctx); + /* drm_intel_bufmgr_fake.c */ drm_intel_bufmgr *drm_intel_bufmgr_fake_init(int fd, unsigned long low_offset, diff --git a/intel/intel_bufmgr_gem.c b/intel/intel_bufmgr_gem.c index cf23b985f..b71f2dadf 100644 --- a/intel/intel_bufmgr_gem.c +++ b/intel/intel_bufmgr_gem.c @@ -2769,6 +2769,51 @@ drm_intel_bufmgr_gem_set_aub_dump(drm_intel_bufmgr *bufmgr, int enable) } } +drm_intel_context * +drm_intel_gem_context_create(drm_intel_bufmgr *bufmgr) +{ + drm_intel_bufmgr_gem *bufmgr_gem = (drm_intel_bufmgr_gem *)bufmgr; + struct drm_i915_gem_context_create create; + drm_i915_getparam_t gp; + drm_intel_context *context = NULL; + int tmp = 0, ret; + + ret = drmIoctl(bufmgr_gem->fd, DRM_IOCTL_I915_GEM_CONTEXT_CREATE, &create); + if (ret != 0) { + fprintf(stderr, "DRM_IOCTL_I915_GEM_CONTEXT_CREATE failed: %s\n", + strerror(errno)); + return NULL; + } + + context = calloc(1, sizeof(*context)); + context->ctx_id = create.ctx_id; + context->bufmgr = bufmgr; + + return context; +} + +void +drm_intel_gem_context_destroy(drm_intel_context *ctx) +{ + drm_intel_bufmgr_gem *bufmgr_gem; + struct drm_i915_gem_context_destroy destroy; + int ret; + + if (ctx == NULL) + return; + + bufmgr_gem = (drm_intel_bufmgr_gem *)ctx->bufmgr; + destroy.ctx_id = ctx->ctx_id; + ret = drmIoctl(bufmgr_gem->fd, DRM_IOCTL_I915_GEM_CONTEXT_DESTROY, + &destroy); + if (ret != 0) + fprintf(stderr, "DRM_IOCTL_I915_GEM_CONTEXT_DESTROY failed: %s\n", + strerror(errno)); + + free(ctx); +} + + /** * Annotate the given bo for use in aub dumping. * |