intel: Drop legacy execbuffer support
Execbuffer2 support was introduced to libdrm in b50964027b
, 10 years
ago, and no driver has used the old execbuf path since. There's no need
to support 10-year-old kernels.
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
main
parent
264e66b5e9
commit
f9c27a9e8c
|
@ -114,7 +114,6 @@ typedef struct _drm_intel_bufmgr_gem {
|
||||||
|
|
||||||
pthread_mutex_t lock;
|
pthread_mutex_t lock;
|
||||||
|
|
||||||
struct drm_i915_gem_exec_object *exec_objects;
|
|
||||||
struct drm_i915_gem_exec_object2 *exec2_objects;
|
struct drm_i915_gem_exec_object2 *exec2_objects;
|
||||||
drm_intel_bo **exec_bos;
|
drm_intel_bo **exec_bos;
|
||||||
int exec_size;
|
int exec_size;
|
||||||
|
@ -479,44 +478,6 @@ drm_intel_gem_bo_reference(drm_intel_bo *bo)
|
||||||
* with the intersection of the memory type flags and the union of the
|
* with the intersection of the memory type flags and the union of the
|
||||||
* access flags.
|
* access flags.
|
||||||
*/
|
*/
|
||||||
static void
|
|
||||||
drm_intel_add_validate_buffer(drm_intel_bo *bo)
|
|
||||||
{
|
|
||||||
drm_intel_bufmgr_gem *bufmgr_gem = (drm_intel_bufmgr_gem *) bo->bufmgr;
|
|
||||||
drm_intel_bo_gem *bo_gem = (drm_intel_bo_gem *) bo;
|
|
||||||
int index;
|
|
||||||
|
|
||||||
if (bo_gem->validate_index != -1)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* Extend the array of validation entries as necessary. */
|
|
||||||
if (bufmgr_gem->exec_count == bufmgr_gem->exec_size) {
|
|
||||||
int new_size = bufmgr_gem->exec_size * 2;
|
|
||||||
|
|
||||||
if (new_size == 0)
|
|
||||||
new_size = 5;
|
|
||||||
|
|
||||||
bufmgr_gem->exec_objects =
|
|
||||||
realloc(bufmgr_gem->exec_objects,
|
|
||||||
sizeof(*bufmgr_gem->exec_objects) * new_size);
|
|
||||||
bufmgr_gem->exec_bos =
|
|
||||||
realloc(bufmgr_gem->exec_bos,
|
|
||||||
sizeof(*bufmgr_gem->exec_bos) * new_size);
|
|
||||||
bufmgr_gem->exec_size = new_size;
|
|
||||||
}
|
|
||||||
|
|
||||||
index = bufmgr_gem->exec_count;
|
|
||||||
bo_gem->validate_index = index;
|
|
||||||
/* Fill in array entry */
|
|
||||||
bufmgr_gem->exec_objects[index].handle = bo_gem->gem_handle;
|
|
||||||
bufmgr_gem->exec_objects[index].relocation_count = bo_gem->reloc_count;
|
|
||||||
bufmgr_gem->exec_objects[index].relocs_ptr = (uintptr_t) bo_gem->relocs;
|
|
||||||
bufmgr_gem->exec_objects[index].alignment = bo->align;
|
|
||||||
bufmgr_gem->exec_objects[index].offset = 0;
|
|
||||||
bufmgr_gem->exec_bos[index] = bo;
|
|
||||||
bufmgr_gem->exec_count++;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
drm_intel_add_validate_buffer2(drm_intel_bo *bo, int need_fence)
|
drm_intel_add_validate_buffer2(drm_intel_bo *bo, int need_fence)
|
||||||
{
|
{
|
||||||
|
@ -2006,7 +1967,6 @@ drm_intel_bufmgr_gem_destroy(drm_intel_bufmgr *bufmgr)
|
||||||
int i, ret;
|
int i, ret;
|
||||||
|
|
||||||
free(bufmgr_gem->exec2_objects);
|
free(bufmgr_gem->exec2_objects);
|
||||||
free(bufmgr_gem->exec_objects);
|
|
||||||
free(bufmgr_gem->exec_bos);
|
free(bufmgr_gem->exec_bos);
|
||||||
|
|
||||||
pthread_mutex_destroy(&bufmgr_gem->lock);
|
pthread_mutex_destroy(&bufmgr_gem->lock);
|
||||||
|
@ -2265,31 +2225,6 @@ drm_intel_gem_bo_clear_relocs(drm_intel_bo *bo, int start)
|
||||||
* validations to be performed and update the relocation buffers with
|
* validations to be performed and update the relocation buffers with
|
||||||
* index values into the validation list.
|
* index values into the validation list.
|
||||||
*/
|
*/
|
||||||
static void
|
|
||||||
drm_intel_gem_bo_process_reloc(drm_intel_bo *bo)
|
|
||||||
{
|
|
||||||
drm_intel_bo_gem *bo_gem = (drm_intel_bo_gem *) bo;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if (bo_gem->relocs == NULL)
|
|
||||||
return;
|
|
||||||
|
|
||||||
for (i = 0; i < bo_gem->reloc_count; i++) {
|
|
||||||
drm_intel_bo *target_bo = bo_gem->reloc_target_info[i].bo;
|
|
||||||
|
|
||||||
if (target_bo == bo)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
drm_intel_gem_bo_mark_mmaps_incoherent(bo);
|
|
||||||
|
|
||||||
/* Continue walking the tree depth-first. */
|
|
||||||
drm_intel_gem_bo_process_reloc(target_bo);
|
|
||||||
|
|
||||||
/* Add the target to the validate list */
|
|
||||||
drm_intel_add_validate_buffer(target_bo);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
drm_intel_gem_bo_process_reloc2(drm_intel_bo *bo)
|
drm_intel_gem_bo_process_reloc2(drm_intel_bo *bo)
|
||||||
{
|
{
|
||||||
|
@ -2330,30 +2265,6 @@ drm_intel_gem_bo_process_reloc2(drm_intel_bo *bo)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
drm_intel_update_buffer_offsets(drm_intel_bufmgr_gem *bufmgr_gem)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < bufmgr_gem->exec_count; i++) {
|
|
||||||
drm_intel_bo *bo = bufmgr_gem->exec_bos[i];
|
|
||||||
drm_intel_bo_gem *bo_gem = (drm_intel_bo_gem *) bo;
|
|
||||||
|
|
||||||
/* Update the buffer offset */
|
|
||||||
if (bufmgr_gem->exec_objects[i].offset != bo->offset64) {
|
|
||||||
DBG("BO %d (%s) migrated: 0x%08x %08x -> 0x%08x %08x\n",
|
|
||||||
bo_gem->gem_handle, bo_gem->name,
|
|
||||||
upper_32_bits(bo->offset64),
|
|
||||||
lower_32_bits(bo->offset64),
|
|
||||||
upper_32_bits(bufmgr_gem->exec_objects[i].offset),
|
|
||||||
lower_32_bits(bufmgr_gem->exec_objects[i].offset));
|
|
||||||
bo->offset64 = bufmgr_gem->exec_objects[i].offset;
|
|
||||||
bo->offset = bufmgr_gem->exec_objects[i].offset;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
drm_intel_update_buffer_offsets2 (drm_intel_bufmgr_gem *bufmgr_gem)
|
drm_intel_update_buffer_offsets2 (drm_intel_bufmgr_gem *bufmgr_gem)
|
||||||
{
|
{
|
||||||
|
@ -2389,73 +2300,6 @@ drm_intel_gem_bo_aub_dump_bmp(drm_intel_bo *bo,
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
drm_intel_gem_bo_exec(drm_intel_bo *bo, int used,
|
|
||||||
drm_clip_rect_t * cliprects, int num_cliprects, int DR4)
|
|
||||||
{
|
|
||||||
drm_intel_bufmgr_gem *bufmgr_gem = (drm_intel_bufmgr_gem *) bo->bufmgr;
|
|
||||||
struct drm_i915_gem_execbuffer execbuf;
|
|
||||||
int ret, i;
|
|
||||||
|
|
||||||
if (to_bo_gem(bo)->has_error)
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
pthread_mutex_lock(&bufmgr_gem->lock);
|
|
||||||
/* Update indices and set up the validate list. */
|
|
||||||
drm_intel_gem_bo_process_reloc(bo);
|
|
||||||
|
|
||||||
/* Add the batch buffer to the validation list. There are no
|
|
||||||
* relocations pointing to it.
|
|
||||||
*/
|
|
||||||
drm_intel_add_validate_buffer(bo);
|
|
||||||
|
|
||||||
memclear(execbuf);
|
|
||||||
execbuf.buffers_ptr = (uintptr_t) bufmgr_gem->exec_objects;
|
|
||||||
execbuf.buffer_count = bufmgr_gem->exec_count;
|
|
||||||
execbuf.batch_start_offset = 0;
|
|
||||||
execbuf.batch_len = used;
|
|
||||||
execbuf.cliprects_ptr = (uintptr_t) cliprects;
|
|
||||||
execbuf.num_cliprects = num_cliprects;
|
|
||||||
execbuf.DR1 = 0;
|
|
||||||
execbuf.DR4 = DR4;
|
|
||||||
|
|
||||||
ret = drmIoctl(bufmgr_gem->fd,
|
|
||||||
DRM_IOCTL_I915_GEM_EXECBUFFER,
|
|
||||||
&execbuf);
|
|
||||||
if (ret != 0) {
|
|
||||||
ret = -errno;
|
|
||||||
if (errno == ENOSPC) {
|
|
||||||
DBG("Execbuffer fails to pin. "
|
|
||||||
"Estimate: %u. Actual: %u. Available: %u\n",
|
|
||||||
drm_intel_gem_estimate_batch_space(bufmgr_gem->exec_bos,
|
|
||||||
bufmgr_gem->
|
|
||||||
exec_count),
|
|
||||||
drm_intel_gem_compute_batch_space(bufmgr_gem->exec_bos,
|
|
||||||
bufmgr_gem->
|
|
||||||
exec_count),
|
|
||||||
(unsigned int)bufmgr_gem->gtt_size);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
drm_intel_update_buffer_offsets(bufmgr_gem);
|
|
||||||
|
|
||||||
if (bufmgr_gem->bufmgr.debug)
|
|
||||||
drm_intel_gem_dump_validation_list(bufmgr_gem);
|
|
||||||
|
|
||||||
for (i = 0; i < bufmgr_gem->exec_count; i++) {
|
|
||||||
drm_intel_bo_gem *bo_gem = to_bo_gem(bufmgr_gem->exec_bos[i]);
|
|
||||||
|
|
||||||
bo_gem->idle = false;
|
|
||||||
|
|
||||||
/* Disconnect the buffer from the validate list */
|
|
||||||
bo_gem->validate_index = -1;
|
|
||||||
bufmgr_gem->exec_bos[i] = NULL;
|
|
||||||
}
|
|
||||||
bufmgr_gem->exec_count = 0;
|
|
||||||
pthread_mutex_unlock(&bufmgr_gem->lock);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
do_exec2(drm_intel_bo *bo, int used, drm_intel_context *ctx,
|
do_exec2(drm_intel_bo *bo, int used, drm_intel_context *ctx,
|
||||||
drm_clip_rect_t *cliprects, int num_cliprects, int DR4,
|
drm_clip_rect_t *cliprects, int num_cliprects, int DR4,
|
||||||
|
@ -2933,8 +2777,6 @@ drm_public void
|
||||||
drm_intel_bufmgr_gem_enable_fenced_relocs(drm_intel_bufmgr *bufmgr)
|
drm_intel_bufmgr_gem_enable_fenced_relocs(drm_intel_bufmgr *bufmgr)
|
||||||
{
|
{
|
||||||
drm_intel_bufmgr_gem *bufmgr_gem = (drm_intel_bufmgr_gem *)bufmgr;
|
drm_intel_bufmgr_gem *bufmgr_gem = (drm_intel_bufmgr_gem *)bufmgr;
|
||||||
|
|
||||||
if (bufmgr_gem->bufmgr.bo_exec == drm_intel_gem_bo_exec2)
|
|
||||||
bufmgr_gem->fenced_relocs = true;
|
bufmgr_gem->fenced_relocs = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3700,7 +3542,6 @@ drm_intel_bufmgr_gem_init(int fd, int batch_size)
|
||||||
struct drm_i915_gem_get_aperture aperture;
|
struct drm_i915_gem_get_aperture aperture;
|
||||||
drm_i915_getparam_t gp;
|
drm_i915_getparam_t gp;
|
||||||
int ret, tmp;
|
int ret, tmp;
|
||||||
bool exec2 = false;
|
|
||||||
|
|
||||||
pthread_mutex_lock(&bufmgr_list_mutex);
|
pthread_mutex_lock(&bufmgr_list_mutex);
|
||||||
|
|
||||||
|
@ -3774,8 +3615,12 @@ drm_intel_bufmgr_gem_init(int fd, int batch_size)
|
||||||
|
|
||||||
gp.param = I915_PARAM_HAS_EXECBUF2;
|
gp.param = I915_PARAM_HAS_EXECBUF2;
|
||||||
ret = drmIoctl(bufmgr_gem->fd, DRM_IOCTL_I915_GETPARAM, &gp);
|
ret = drmIoctl(bufmgr_gem->fd, DRM_IOCTL_I915_GETPARAM, &gp);
|
||||||
if (!ret)
|
if (ret) {
|
||||||
exec2 = true;
|
fprintf(stderr, "i915 does not support EXECBUFER2\n");
|
||||||
|
free(bufmgr_gem);
|
||||||
|
bufmgr_gem = NULL;
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
gp.param = I915_PARAM_HAS_BSD;
|
gp.param = I915_PARAM_HAS_BSD;
|
||||||
ret = drmIoctl(bufmgr_gem->fd, DRM_IOCTL_I915_GETPARAM, &gp);
|
ret = drmIoctl(bufmgr_gem->fd, DRM_IOCTL_I915_GETPARAM, &gp);
|
||||||
|
@ -3878,12 +3723,8 @@ drm_intel_bufmgr_gem_init(int fd, int batch_size)
|
||||||
bufmgr_gem->bufmgr.bo_get_tiling = drm_intel_gem_bo_get_tiling;
|
bufmgr_gem->bufmgr.bo_get_tiling = drm_intel_gem_bo_get_tiling;
|
||||||
bufmgr_gem->bufmgr.bo_set_tiling = drm_intel_gem_bo_set_tiling;
|
bufmgr_gem->bufmgr.bo_set_tiling = drm_intel_gem_bo_set_tiling;
|
||||||
bufmgr_gem->bufmgr.bo_flink = drm_intel_gem_bo_flink;
|
bufmgr_gem->bufmgr.bo_flink = drm_intel_gem_bo_flink;
|
||||||
/* Use the new one if available */
|
|
||||||
if (exec2) {
|
|
||||||
bufmgr_gem->bufmgr.bo_exec = drm_intel_gem_bo_exec2;
|
bufmgr_gem->bufmgr.bo_exec = drm_intel_gem_bo_exec2;
|
||||||
bufmgr_gem->bufmgr.bo_mrb_exec = drm_intel_gem_bo_mrb_exec2;
|
bufmgr_gem->bufmgr.bo_mrb_exec = drm_intel_gem_bo_mrb_exec2;
|
||||||
} else
|
|
||||||
bufmgr_gem->bufmgr.bo_exec = drm_intel_gem_bo_exec;
|
|
||||||
bufmgr_gem->bufmgr.bo_busy = drm_intel_gem_bo_busy;
|
bufmgr_gem->bufmgr.bo_busy = drm_intel_gem_bo_busy;
|
||||||
bufmgr_gem->bufmgr.bo_madvise = drm_intel_gem_bo_madvise;
|
bufmgr_gem->bufmgr.bo_madvise = drm_intel_gem_bo_madvise;
|
||||||
bufmgr_gem->bufmgr.destroy = drm_intel_bufmgr_gem_unref;
|
bufmgr_gem->bufmgr.destroy = drm_intel_bufmgr_gem_unref;
|
||||||
|
|
Loading…
Reference in New Issue