1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "state_tracker/drm_driver.h" 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "i915_drm_winsys.h" 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "util/u_memory.h" 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "i915_drm.h" 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic char *i915_drm_type_to_name(enum i915_winsys_buffer_type type) 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org char *name; 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (type == I915_NEW_TEXTURE) { 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org name = "gallium3d_texture"; 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } else if (type == I915_NEW_VERTEX) { 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org name = "gallium3d_vertex"; 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } else if (type == I915_NEW_SCANOUT) { 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org name = "gallium3d_scanout"; 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } else { 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(0); 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org name = "gallium3d_unknown"; 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return name; 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct i915_winsys_buffer * 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_drm_buffer_create(struct i915_winsys *iws, 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned size, 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org enum i915_winsys_buffer_type type) 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_drm_buffer *buf = CALLOC_STRUCT(i915_drm_buffer); 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_drm_winsys *idws = i915_drm_winsys(iws); 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!buf) 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org buf->magic = 0xDEAD1337; 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org buf->flinked = FALSE; 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org buf->flink = 0; 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org buf->bo = drm_intel_bo_alloc(idws->gem_manager, 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i915_drm_type_to_name(type), size, 0); 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!buf->bo) 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto err; 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (struct i915_winsys_buffer *)buf; 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgerr: 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(0); 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FREE(buf); 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct i915_winsys_buffer * 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_drm_buffer_create_tiled(struct i915_winsys *iws, 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned *stride, unsigned height, 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org enum i915_winsys_buffer_tile *tiling, 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org enum i915_winsys_buffer_type type) 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_drm_buffer *buf = CALLOC_STRUCT(i915_drm_buffer); 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_drm_winsys *idws = i915_drm_winsys(iws); 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned long pitch = 0; 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t tiling_mode = *tiling; 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!buf) 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org buf->magic = 0xDEAD1337; 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org buf->flinked = FALSE; 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org buf->flink = 0; 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org buf->bo = drm_intel_bo_alloc_tiled(idws->gem_manager, 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i915_drm_type_to_name(type), 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *stride, height, 1, 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &tiling_mode, &pitch, 0); 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!buf->bo) 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto err; 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *stride = pitch; 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *tiling = tiling_mode; 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (struct i915_winsys_buffer *)buf; 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgerr: 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(0); 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FREE(buf); 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct i915_winsys_buffer * 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_drm_buffer_from_handle(struct i915_winsys *iws, 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct winsys_handle *whandle, 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org enum i915_winsys_buffer_tile *tiling, 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned *stride) 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_drm_winsys *idws = i915_drm_winsys(iws); 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_drm_buffer *buf = CALLOC_STRUCT(i915_drm_buffer); 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t tile = 0, swizzle = 0; 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!buf) 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org buf->magic = 0xDEAD1337; 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org buf->bo = drm_intel_bo_gem_create_from_name(idws->gem_manager, "gallium3d_from_handle", whandle->handle); 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org buf->flinked = TRUE; 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org buf->flink = whandle->handle; 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!buf->bo) 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto err; 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drm_intel_bo_get_tiling(buf->bo, &tile, &swizzle); 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *stride = whandle->stride; 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *tiling = tile; 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (struct i915_winsys_buffer *)buf; 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgerr: 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FREE(buf); 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic boolean 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_drm_buffer_get_handle(struct i915_winsys *iws, 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_winsys_buffer *buffer, 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct winsys_handle *whandle, 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned stride) 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_drm_buffer *buf = i915_drm_buffer(buffer); 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (whandle->type == DRM_API_HANDLE_TYPE_SHARED) { 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!buf->flinked) { 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (drm_intel_bo_flink(buf->bo, &buf->flink)) 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return FALSE; 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org buf->flinked = TRUE; 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org whandle->handle = buf->flink; 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } else if (whandle->type == DRM_API_HANDLE_TYPE_KMS) { 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org whandle->handle = buf->bo->handle; 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } else { 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(!"unknown usage"); 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return FALSE; 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org whandle->stride = stride; 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return TRUE; 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void * 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_drm_buffer_map(struct i915_winsys *iws, 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_winsys_buffer *buffer, 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org boolean write) 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_drm_buffer *buf = i915_drm_buffer(buffer); 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drm_intel_bo *bo = intel_bo(buffer); 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int ret = 0; 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(bo); 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (buf->map_count) 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto out; 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drm_intel_gem_bo_map_gtt(bo); 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org buf->ptr = bo->virtual; 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(ret == 0); 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgout: 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ret) 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org buf->map_count++; 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return buf->ptr; 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_drm_buffer_unmap(struct i915_winsys *iws, 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_winsys_buffer *buffer) 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_drm_buffer *buf = i915_drm_buffer(buffer); 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (--buf->map_count) 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drm_intel_gem_bo_unmap_gtt(intel_bo(buffer)); 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic int 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_drm_buffer_write(struct i915_winsys *iws, 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_winsys_buffer *buffer, 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org size_t offset, 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org size_t size, 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const void *data) 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_drm_buffer *buf = i915_drm_buffer(buffer); 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return drm_intel_bo_subdata(buf->bo, offset, size, (void*)data); 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_drm_buffer_destroy(struct i915_winsys *iws, 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_winsys_buffer *buffer) 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drm_intel_bo_unreference(intel_bo(buffer)); 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef DEBUG 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i915_drm_buffer(buffer)->magic = 0; 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i915_drm_buffer(buffer)->bo = NULL; 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FREE(buffer); 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic boolean 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_drm_buffer_is_busy(struct i915_winsys *iws, 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_winsys_buffer *buffer) 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_drm_buffer* i915_buffer = i915_drm_buffer(buffer); 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!i915_buffer) 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return FALSE; 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return drm_intel_bo_busy(i915_buffer->bo); 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_drm_winsys_init_buffer_functions(struct i915_drm_winsys *idws) 229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org idws->base.buffer_create = i915_drm_buffer_create; 231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org idws->base.buffer_create_tiled = i915_drm_buffer_create_tiled; 232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org idws->base.buffer_from_handle = i915_drm_buffer_from_handle; 233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org idws->base.buffer_get_handle = i915_drm_buffer_get_handle; 234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org idws->base.buffer_map = i915_drm_buffer_map; 235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org idws->base.buffer_unmap = i915_drm_buffer_unmap; 236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org idws->base.buffer_write = i915_drm_buffer_write; 237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org idws->base.buffer_destroy = i915_drm_buffer_destroy; 238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org idws->base.buffer_is_busy = i915_drm_buffer_is_busy; 239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 240