1935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz 2c7015877beedd9831402755dbc58afddcbbd5339Jakob Bornecrantz#include "state_tracker/drm_driver.h" 3bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz#include "i915_drm_winsys.h" 4935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz#include "util/u_memory.h" 5935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz 6935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz#include "i915_drm.h" 7935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz 84a666488c4e3067eed984e272149411cc2198c77Daniel Vetterstatic char *i915_drm_type_to_name(enum i915_winsys_buffer_type type) 94a666488c4e3067eed984e272149411cc2198c77Daniel Vetter{ 104a666488c4e3067eed984e272149411cc2198c77Daniel Vetter char *name; 114a666488c4e3067eed984e272149411cc2198c77Daniel Vetter 124a666488c4e3067eed984e272149411cc2198c77Daniel Vetter if (type == I915_NEW_TEXTURE) { 134a666488c4e3067eed984e272149411cc2198c77Daniel Vetter name = "gallium3d_texture"; 144a666488c4e3067eed984e272149411cc2198c77Daniel Vetter } else if (type == I915_NEW_VERTEX) { 154a666488c4e3067eed984e272149411cc2198c77Daniel Vetter name = "gallium3d_vertex"; 164a666488c4e3067eed984e272149411cc2198c77Daniel Vetter } else if (type == I915_NEW_SCANOUT) { 174a666488c4e3067eed984e272149411cc2198c77Daniel Vetter name = "gallium3d_scanout"; 184a666488c4e3067eed984e272149411cc2198c77Daniel Vetter } else { 194a666488c4e3067eed984e272149411cc2198c77Daniel Vetter assert(0); 204a666488c4e3067eed984e272149411cc2198c77Daniel Vetter name = "gallium3d_unknown"; 214a666488c4e3067eed984e272149411cc2198c77Daniel Vetter } 224a666488c4e3067eed984e272149411cc2198c77Daniel Vetter 234a666488c4e3067eed984e272149411cc2198c77Daniel Vetter return name; 244a666488c4e3067eed984e272149411cc2198c77Daniel Vetter} 254a666488c4e3067eed984e272149411cc2198c77Daniel Vetter 26bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantzstatic struct i915_winsys_buffer * 27bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantzi915_drm_buffer_create(struct i915_winsys *iws, 28c62f5c7e7bc3ed84677805b3800fbcfa93c419eaDaniel Vetter unsigned size, 29bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz enum i915_winsys_buffer_type type) 30935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz{ 31bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz struct i915_drm_buffer *buf = CALLOC_STRUCT(i915_drm_buffer); 32bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz struct i915_drm_winsys *idws = i915_drm_winsys(iws); 33935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz 34935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz if (!buf) 35935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz return NULL; 36935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz 37935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz buf->magic = 0xDEAD1337; 38935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz buf->flinked = FALSE; 39935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz buf->flink = 0; 40935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz 414a666488c4e3067eed984e272149411cc2198c77Daniel Vetter buf->bo = drm_intel_bo_alloc(idws->gem_manager, 424a666488c4e3067eed984e272149411cc2198c77Daniel Vetter i915_drm_type_to_name(type), size, 0); 434a666488c4e3067eed984e272149411cc2198c77Daniel Vetter 444a666488c4e3067eed984e272149411cc2198c77Daniel Vetter if (!buf->bo) 454a666488c4e3067eed984e272149411cc2198c77Daniel Vetter goto err; 464a666488c4e3067eed984e272149411cc2198c77Daniel Vetter 474a666488c4e3067eed984e272149411cc2198c77Daniel Vetter return (struct i915_winsys_buffer *)buf; 484a666488c4e3067eed984e272149411cc2198c77Daniel Vetter 494a666488c4e3067eed984e272149411cc2198c77Daniel Vettererr: 504a666488c4e3067eed984e272149411cc2198c77Daniel Vetter assert(0); 514a666488c4e3067eed984e272149411cc2198c77Daniel Vetter FREE(buf); 524a666488c4e3067eed984e272149411cc2198c77Daniel Vetter return NULL; 534a666488c4e3067eed984e272149411cc2198c77Daniel Vetter} 544a666488c4e3067eed984e272149411cc2198c77Daniel Vetter 554a666488c4e3067eed984e272149411cc2198c77Daniel Vetterstatic struct i915_winsys_buffer * 564a666488c4e3067eed984e272149411cc2198c77Daniel Vetteri915_drm_buffer_create_tiled(struct i915_winsys *iws, 574a666488c4e3067eed984e272149411cc2198c77Daniel Vetter unsigned *stride, unsigned height, 584a666488c4e3067eed984e272149411cc2198c77Daniel Vetter enum i915_winsys_buffer_tile *tiling, 594a666488c4e3067eed984e272149411cc2198c77Daniel Vetter enum i915_winsys_buffer_type type) 604a666488c4e3067eed984e272149411cc2198c77Daniel Vetter{ 614a666488c4e3067eed984e272149411cc2198c77Daniel Vetter struct i915_drm_buffer *buf = CALLOC_STRUCT(i915_drm_buffer); 624a666488c4e3067eed984e272149411cc2198c77Daniel Vetter struct i915_drm_winsys *idws = i915_drm_winsys(iws); 634a666488c4e3067eed984e272149411cc2198c77Daniel Vetter unsigned long pitch = 0; 644a666488c4e3067eed984e272149411cc2198c77Daniel Vetter uint32_t tiling_mode = *tiling; 654a666488c4e3067eed984e272149411cc2198c77Daniel Vetter 664a666488c4e3067eed984e272149411cc2198c77Daniel Vetter if (!buf) 674a666488c4e3067eed984e272149411cc2198c77Daniel Vetter return NULL; 684a666488c4e3067eed984e272149411cc2198c77Daniel Vetter 694a666488c4e3067eed984e272149411cc2198c77Daniel Vetter buf->magic = 0xDEAD1337; 704a666488c4e3067eed984e272149411cc2198c77Daniel Vetter buf->flinked = FALSE; 714a666488c4e3067eed984e272149411cc2198c77Daniel Vetter buf->flink = 0; 72935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz 734a666488c4e3067eed984e272149411cc2198c77Daniel Vetter buf->bo = drm_intel_bo_alloc_tiled(idws->gem_manager, 744a666488c4e3067eed984e272149411cc2198c77Daniel Vetter i915_drm_type_to_name(type), 754a666488c4e3067eed984e272149411cc2198c77Daniel Vetter *stride, height, 1, 764a666488c4e3067eed984e272149411cc2198c77Daniel Vetter &tiling_mode, &pitch, 0); 77935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz 78935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz if (!buf->bo) 79935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz goto err; 80935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz 814a666488c4e3067eed984e272149411cc2198c77Daniel Vetter *stride = pitch; 824a666488c4e3067eed984e272149411cc2198c77Daniel Vetter *tiling = tiling_mode; 83bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz return (struct i915_winsys_buffer *)buf; 84935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz 85935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantzerr: 86935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz assert(0); 87935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz FREE(buf); 88935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz return NULL; 89935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz} 90935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz 91bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantzstatic struct i915_winsys_buffer * 92bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantzi915_drm_buffer_from_handle(struct i915_winsys *iws, 932ff0879a6365e7f7d7e5277274bc965ad57a82b4Daniel Vetter struct winsys_handle *whandle, 942ff0879a6365e7f7d7e5277274bc965ad57a82b4Daniel Vetter enum i915_winsys_buffer_tile *tiling, 952ff0879a6365e7f7d7e5277274bc965ad57a82b4Daniel Vetter unsigned *stride) 960e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz{ 97bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz struct i915_drm_winsys *idws = i915_drm_winsys(iws); 98bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz struct i915_drm_buffer *buf = CALLOC_STRUCT(i915_drm_buffer); 990e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz uint32_t tile = 0, swizzle = 0; 1000e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz 1010e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz if (!buf) 1020e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz return NULL; 1030e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz 1040e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz buf->magic = 0xDEAD1337; 105c8fca58d9d5b3f25cb1ac2056ac2b437b79c04eeDaniel Vetter buf->bo = drm_intel_bo_gem_create_from_name(idws->gem_manager, "gallium3d_from_handle", whandle->handle); 1060e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz buf->flinked = TRUE; 1070e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz buf->flink = whandle->handle; 1080e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz 1090e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz if (!buf->bo) 1100e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz goto err; 1110e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz 1120e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz drm_intel_bo_get_tiling(buf->bo, &tile, &swizzle); 1130e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz 1140e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz *stride = whandle->stride; 1152ff0879a6365e7f7d7e5277274bc965ad57a82b4Daniel Vetter *tiling = tile; 1160e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz 117bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz return (struct i915_winsys_buffer *)buf; 1180e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz 1190e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantzerr: 1200e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz FREE(buf); 1210e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz return NULL; 1220e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz} 1230e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz 1240e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantzstatic boolean 125bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantzi915_drm_buffer_get_handle(struct i915_winsys *iws, 126bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz struct i915_winsys_buffer *buffer, 1270e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz struct winsys_handle *whandle, 1280e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz unsigned stride) 1290e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz{ 130bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz struct i915_drm_buffer *buf = i915_drm_buffer(buffer); 1310e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz 1320e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz if (whandle->type == DRM_API_HANDLE_TYPE_SHARED) { 1330e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz if (!buf->flinked) { 1340e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz if (drm_intel_bo_flink(buf->bo, &buf->flink)) 1350e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz return FALSE; 1360e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz buf->flinked = TRUE; 1370e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz } 1380e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz 1390e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz whandle->handle = buf->flink; 1400e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz } else if (whandle->type == DRM_API_HANDLE_TYPE_KMS) { 1410e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz whandle->handle = buf->bo->handle; 1420e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz } else { 1430e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz assert(!"unknown usage"); 1440e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz return FALSE; 1450e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz } 1460e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz 1470e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz whandle->stride = stride; 1480e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz return TRUE; 1490e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz} 1500e1eb1b8765149873f9fd27d455d8b7ed3387709Jakob Bornecrantz 151935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantzstatic void * 152bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantzi915_drm_buffer_map(struct i915_winsys *iws, 153bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz struct i915_winsys_buffer *buffer, 154935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz boolean write) 155935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz{ 156bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz struct i915_drm_buffer *buf = i915_drm_buffer(buffer); 157935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz drm_intel_bo *bo = intel_bo(buffer); 158935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz int ret = 0; 159935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz 160935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz assert(bo); 161935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz 162935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz if (buf->map_count) 163935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz goto out; 164935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz 165e18261885334522bcb2cce6e4a2ac7c509a7e3c0Daniel Vetter ret = drm_intel_gem_bo_map_gtt(bo); 166935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz 167935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz buf->ptr = bo->virtual; 168935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz 169935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz assert(ret == 0); 170935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantzout: 171935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz if (ret) 172935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz return NULL; 173935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz 174935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz buf->map_count++; 175935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz return buf->ptr; 176935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz} 177935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz 178935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantzstatic void 179bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantzi915_drm_buffer_unmap(struct i915_winsys *iws, 180bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz struct i915_winsys_buffer *buffer) 181935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz{ 182bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz struct i915_drm_buffer *buf = i915_drm_buffer(buffer); 183935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz 184935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz if (--buf->map_count) 185935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz return; 186935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz 187e18261885334522bcb2cce6e4a2ac7c509a7e3c0Daniel Vetter drm_intel_gem_bo_unmap_gtt(intel_bo(buffer)); 188935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz} 189935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz 190e589a37f7b72da4f5eb8cbb46443d7baf710b37cJakob Bornecrantzstatic int 191bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantzi915_drm_buffer_write(struct i915_winsys *iws, 192bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz struct i915_winsys_buffer *buffer, 193f8ba93aefdf23b88a945d6037cd2e672c99b314cJakob Bornecrantz size_t offset, 194e589a37f7b72da4f5eb8cbb46443d7baf710b37cJakob Bornecrantz size_t size, 195f8ba93aefdf23b88a945d6037cd2e672c99b314cJakob Bornecrantz const void *data) 196e589a37f7b72da4f5eb8cbb46443d7baf710b37cJakob Bornecrantz{ 197bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz struct i915_drm_buffer *buf = i915_drm_buffer(buffer); 198e589a37f7b72da4f5eb8cbb46443d7baf710b37cJakob Bornecrantz 199e589a37f7b72da4f5eb8cbb46443d7baf710b37cJakob Bornecrantz return drm_intel_bo_subdata(buf->bo, offset, size, (void*)data); 200e589a37f7b72da4f5eb8cbb46443d7baf710b37cJakob Bornecrantz} 201e589a37f7b72da4f5eb8cbb46443d7baf710b37cJakob Bornecrantz 202935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantzstatic void 203bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantzi915_drm_buffer_destroy(struct i915_winsys *iws, 204bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz struct i915_winsys_buffer *buffer) 205935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz{ 206935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz drm_intel_bo_unreference(intel_bo(buffer)); 207935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz 208935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz#ifdef DEBUG 209bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz i915_drm_buffer(buffer)->magic = 0; 210bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz i915_drm_buffer(buffer)->bo = NULL; 211935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz#endif 212935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz 213935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz FREE(buffer); 214935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz} 215935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz 216e53b41f2632af26c79c4f7ed5b0fdb86a1feb602Stéphane Marchesinstatic boolean 217e53b41f2632af26c79c4f7ed5b0fdb86a1feb602Stéphane Marchesini915_drm_buffer_is_busy(struct i915_winsys *iws, 218e53b41f2632af26c79c4f7ed5b0fdb86a1feb602Stéphane Marchesin struct i915_winsys_buffer *buffer) 219e53b41f2632af26c79c4f7ed5b0fdb86a1feb602Stéphane Marchesin{ 220e53b41f2632af26c79c4f7ed5b0fdb86a1feb602Stéphane Marchesin struct i915_drm_buffer* i915_buffer = i915_drm_buffer(buffer); 22185e1fa55066783d2748993810708dee6db7a4993Stéphane Marchesin if (!i915_buffer) 22285e1fa55066783d2748993810708dee6db7a4993Stéphane Marchesin return FALSE; 223e53b41f2632af26c79c4f7ed5b0fdb86a1feb602Stéphane Marchesin return drm_intel_bo_busy(i915_buffer->bo); 224e53b41f2632af26c79c4f7ed5b0fdb86a1feb602Stéphane Marchesin} 225e53b41f2632af26c79c4f7ed5b0fdb86a1feb602Stéphane Marchesin 226e53b41f2632af26c79c4f7ed5b0fdb86a1feb602Stéphane Marchesin 227935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantzvoid 228bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantzi915_drm_winsys_init_buffer_functions(struct i915_drm_winsys *idws) 229935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz{ 230bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz idws->base.buffer_create = i915_drm_buffer_create; 2314a666488c4e3067eed984e272149411cc2198c77Daniel Vetter idws->base.buffer_create_tiled = i915_drm_buffer_create_tiled; 232bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz idws->base.buffer_from_handle = i915_drm_buffer_from_handle; 233bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz idws->base.buffer_get_handle = i915_drm_buffer_get_handle; 234bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz idws->base.buffer_map = i915_drm_buffer_map; 235bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz idws->base.buffer_unmap = i915_drm_buffer_unmap; 236bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz idws->base.buffer_write = i915_drm_buffer_write; 237bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz idws->base.buffer_destroy = i915_drm_buffer_destroy; 238e53b41f2632af26c79c4f7ed5b0fdb86a1feb602Stéphane Marchesin idws->base.buffer_is_busy = i915_drm_buffer_is_busy; 239935e4c56e5b10a0a702d95f78e9f4e6660c452dcJakob Bornecrantz} 240