mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-06-19 08:28:21 +02:00
i965: Move add_exec_bo()
To avoid a forward declaration in the next patch, move the definition of add_exec_bo() earlier. v2: (by Ken) redo move. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
ba9b71e56a
commit
e24f3fb7c8
1 changed files with 53 additions and 53 deletions
|
|
@ -87,6 +87,59 @@ intel_batchbuffer_init(struct intel_batchbuffer *batch,
|
|||
}
|
||||
}
|
||||
|
||||
#define READ_ONCE(x) (*(volatile __typeof__(x) *)&(x))
|
||||
|
||||
static unsigned
|
||||
add_exec_bo(struct intel_batchbuffer *batch, struct brw_bo *bo)
|
||||
{
|
||||
if (bo != batch->bo) {
|
||||
unsigned index = READ_ONCE(bo->index);
|
||||
|
||||
if (index < batch->exec_count && batch->exec_bos[index] == bo)
|
||||
return index;
|
||||
|
||||
/* May have been shared between multiple active batches */
|
||||
for (index = 0; index < batch->exec_count; index++) {
|
||||
if (batch->exec_bos[index] == bo)
|
||||
return index;
|
||||
}
|
||||
|
||||
brw_bo_reference(bo);
|
||||
}
|
||||
|
||||
if (batch->exec_count == batch->exec_array_size) {
|
||||
batch->exec_array_size *= 2;
|
||||
batch->exec_bos =
|
||||
realloc(batch->exec_bos,
|
||||
batch->exec_array_size * sizeof(batch->exec_bos[0]));
|
||||
batch->validation_list =
|
||||
realloc(batch->validation_list,
|
||||
batch->exec_array_size * sizeof(batch->validation_list[0]));
|
||||
}
|
||||
|
||||
struct drm_i915_gem_exec_object2 *validation_entry =
|
||||
&batch->validation_list[batch->exec_count];
|
||||
validation_entry->handle = bo->gem_handle;
|
||||
if (bo == batch->bo) {
|
||||
validation_entry->relocation_count = batch->reloc_count;
|
||||
validation_entry->relocs_ptr = (uintptr_t) batch->relocs;
|
||||
} else {
|
||||
validation_entry->relocation_count = 0;
|
||||
validation_entry->relocs_ptr = 0;
|
||||
}
|
||||
validation_entry->alignment = bo->align;
|
||||
validation_entry->offset = bo->offset64;
|
||||
validation_entry->flags = bo->kflags;
|
||||
validation_entry->rsvd1 = 0;
|
||||
validation_entry->rsvd2 = 0;
|
||||
|
||||
bo->index = batch->exec_count;
|
||||
batch->exec_bos[batch->exec_count] = bo;
|
||||
batch->aperture_space += bo->size;
|
||||
|
||||
return batch->exec_count++;
|
||||
}
|
||||
|
||||
static void
|
||||
intel_batchbuffer_reset(struct intel_batchbuffer *batch,
|
||||
struct brw_bufmgr *bufmgr,
|
||||
|
|
@ -509,59 +562,6 @@ throttle(struct brw_context *brw)
|
|||
}
|
||||
}
|
||||
|
||||
#define READ_ONCE(x) (*(volatile __typeof__(x) *)&(x))
|
||||
|
||||
static unsigned
|
||||
add_exec_bo(struct intel_batchbuffer *batch, struct brw_bo *bo)
|
||||
{
|
||||
if (bo != batch->bo) {
|
||||
unsigned index = READ_ONCE(bo->index);
|
||||
|
||||
if (index < batch->exec_count && batch->exec_bos[index] == bo)
|
||||
return index;
|
||||
|
||||
/* May have been shared between multiple active batches */
|
||||
for (index = 0; index < batch->exec_count; index++) {
|
||||
if (batch->exec_bos[index] == bo)
|
||||
return index;
|
||||
}
|
||||
|
||||
brw_bo_reference(bo);
|
||||
}
|
||||
|
||||
if (batch->exec_count == batch->exec_array_size) {
|
||||
batch->exec_array_size *= 2;
|
||||
batch->exec_bos =
|
||||
realloc(batch->exec_bos,
|
||||
batch->exec_array_size * sizeof(batch->exec_bos[0]));
|
||||
batch->validation_list =
|
||||
realloc(batch->validation_list,
|
||||
batch->exec_array_size * sizeof(batch->validation_list[0]));
|
||||
}
|
||||
|
||||
struct drm_i915_gem_exec_object2 *validation_entry =
|
||||
&batch->validation_list[batch->exec_count];
|
||||
validation_entry->handle = bo->gem_handle;
|
||||
if (bo == batch->bo) {
|
||||
validation_entry->relocation_count = batch->reloc_count;
|
||||
validation_entry->relocs_ptr = (uintptr_t) batch->relocs;
|
||||
} else {
|
||||
validation_entry->relocation_count = 0;
|
||||
validation_entry->relocs_ptr = 0;
|
||||
}
|
||||
validation_entry->alignment = bo->align;
|
||||
validation_entry->offset = bo->offset64;
|
||||
validation_entry->flags = bo->kflags;
|
||||
validation_entry->rsvd1 = 0;
|
||||
validation_entry->rsvd2 = 0;
|
||||
|
||||
bo->index = batch->exec_count;
|
||||
batch->exec_bos[batch->exec_count] = bo;
|
||||
batch->aperture_space += bo->size;
|
||||
|
||||
return batch->exec_count++;
|
||||
}
|
||||
|
||||
static int
|
||||
execbuffer(int fd,
|
||||
struct intel_batchbuffer *batch,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue