1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "i915_drm_winsys.h" 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "util/u_memory.h" 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "i915_drm.h" 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "i915/i915_debug.h" 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <xf86drm.h> 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <stdio.h> 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BATCH_RESERVED 16 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTEL_DEFAULT_RELOCS 100 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTEL_MAX_RELOCS 400 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTEL_BATCH_NO_CLIPRECTS 0x1 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define INTEL_BATCH_CLIPRECTS 0x2 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#undef INTEL_RUN_SYNC 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct i915_drm_batchbuffer 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_winsys_batchbuffer base; 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org size_t actual_size; 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drm_intel_bo *bo; 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct i915_drm_batchbuffer * 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_drm_batchbuffer(struct i915_winsys_batchbuffer *batch) 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (struct i915_drm_batchbuffer *)batch; 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_drm_batchbuffer_reset(struct i915_drm_batchbuffer *batch) 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_drm_winsys *idws = i915_drm_winsys(batch->base.iws); 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (batch->bo) 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drm_intel_bo_unreference(batch->bo); 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org batch->bo = drm_intel_bo_alloc(idws->gem_manager, 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "gallium3d_batchbuffer", 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org batch->actual_size, 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 4096); 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org memset(batch->base.map, 0, batch->actual_size); 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org batch->base.ptr = batch->base.map; 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org batch->base.size = batch->actual_size - BATCH_RESERVED; 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org batch->base.relocs = 0; 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct i915_winsys_batchbuffer * 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_drm_batchbuffer_create(struct i915_winsys *iws) 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_drm_winsys *idws = i915_drm_winsys(iws); 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_drm_batchbuffer *batch = CALLOC_STRUCT(i915_drm_batchbuffer); 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org batch->actual_size = idws->max_batch_size; 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org batch->base.map = MALLOC(batch->actual_size); 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org batch->base.ptr = NULL; 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org batch->base.size = 0; 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org batch->base.relocs = 0; 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org batch->base.iws = iws; 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i915_drm_batchbuffer_reset(batch); 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return &batch->base; 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic boolean 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_drm_batchbuffer_validate_buffers(struct i915_winsys_batchbuffer *batch, 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_winsys_buffer **buffer, 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int num_of_buffers) 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_drm_batchbuffer *drm_batch = i915_drm_batchbuffer(batch); 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drm_intel_bo *bos[num_of_buffers + 1]; 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int i, ret; 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bos[0] = drm_batch->bo; 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < num_of_buffers; i++) 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bos[i+1] = intel_bo(buffer[i]); 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drm_intel_bufmgr_check_aperture_space(bos, num_of_buffers); 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ret != 0) 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return FALSE; 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return TRUE; 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic int 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_drm_batchbuffer_reloc(struct i915_winsys_batchbuffer *ibatch, 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_winsys_buffer *buffer, 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org enum i915_winsys_buffer_usage usage, 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned pre_add, boolean fenced) 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_drm_batchbuffer *batch = i915_drm_batchbuffer(ibatch); 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned write_domain = 0; 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned read_domain = 0; 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned offset; 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int ret = 0; 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (usage) { 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case I915_USAGE_SAMPLER: 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org write_domain = 0; 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org read_domain = I915_GEM_DOMAIN_SAMPLER; 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case I915_USAGE_RENDER: 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org write_domain = I915_GEM_DOMAIN_RENDER; 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org read_domain = I915_GEM_DOMAIN_RENDER; 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case I915_USAGE_2D_TARGET: 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org write_domain = I915_GEM_DOMAIN_RENDER; 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org read_domain = I915_GEM_DOMAIN_RENDER; 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case I915_USAGE_2D_SOURCE: 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org write_domain = 0; 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org read_domain = I915_GEM_DOMAIN_RENDER; 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case I915_USAGE_VERTEX: 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org write_domain = 0; 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org read_domain = I915_GEM_DOMAIN_VERTEX; 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(0); 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return -1; 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org offset = (unsigned)(batch->base.ptr - batch->base.map); 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (fenced) 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drm_intel_bo_emit_reloc_fence(batch->bo, offset, 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intel_bo(buffer), pre_add, 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org read_domain, 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org write_domain); 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drm_intel_bo_emit_reloc(batch->bo, offset, 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org intel_bo(buffer), pre_add, 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org read_domain, 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org write_domain); 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ((uint32_t*)batch->base.ptr)[0] = intel_bo(buffer)->offset + pre_add; 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org batch->base.ptr += 4; 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!ret) 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org batch->base.relocs++; 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ret; 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_drm_throttle(struct i915_drm_winsys *idws) 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drmIoctl(idws->fd, DRM_IOCTL_I915_GEM_THROTTLE, NULL); 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_drm_batchbuffer_flush(struct i915_winsys_batchbuffer *ibatch, 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_fence_handle **fence) 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_drm_batchbuffer *batch = i915_drm_batchbuffer(ibatch); 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned used; 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int ret; 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* MI_BATCH_BUFFER_END */ 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i915_winsys_batchbuffer_dword_unchecked(ibatch, (0xA<<23)); 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org used = batch->base.ptr - batch->base.map; 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (used & 4) { 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* MI_NOOP */ 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i915_winsys_batchbuffer_dword_unchecked(ibatch, 0); 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org used += 4; 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Do the sending to HW */ 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drm_intel_bo_subdata(batch->bo, 0, used, batch->base.map); 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ret == 0 && i915_drm_winsys(ibatch->iws)->send_cmd) 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ret = drm_intel_bo_exec(batch->bo, used, NULL, 0, 0); 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i915_drm_throttle(i915_drm_winsys(ibatch->iws)); 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ret != 0 || i915_drm_winsys(ibatch->iws)->dump_cmd) { 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i915_dump_batchbuffer(ibatch); 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(ret == 0); 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (i915_drm_winsys(ibatch->iws)->dump_raw_file) { 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FILE *file = fopen(i915_drm_winsys(ibatch->iws)->dump_raw_file, "a"); 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (file) { 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org fwrite(batch->base.map, used, 1, file); 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org fclose(file); 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef INTEL_RUN_SYNC 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drm_intel_bo_wait_rendering(batch->bo); 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (fence) { 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ibatch->iws->fence_reference(ibatch->iws, fence, NULL); 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef INTEL_RUN_SYNC 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* we run synced to GPU so just pass null */ 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*fence) = i915_drm_fence_create(NULL); 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#else 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*fence) = i915_drm_fence_create(batch->bo); 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i915_drm_batchbuffer_reset(batch); 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgi915_drm_batchbuffer_destroy(struct i915_winsys_batchbuffer *ibatch) 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_drm_batchbuffer *batch = i915_drm_batchbuffer(ibatch); 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (batch->bo) 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drm_intel_bo_unreference(batch->bo); 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FREE(batch->base.map); 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FREE(batch); 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid i915_drm_winsys_init_batchbuffer_functions(struct i915_drm_winsys *idws) 229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org idws->base.batchbuffer_create = i915_drm_batchbuffer_create; 231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org idws->base.validate_buffers = i915_drm_batchbuffer_validate_buffers; 232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org idws->base.batchbuffer_reloc = i915_drm_batchbuffer_reloc; 233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org idws->base.batchbuffer_flush = i915_drm_batchbuffer_flush; 234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org idws->base.batchbuffer_destroy = i915_drm_batchbuffer_destroy; 235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 236