summaryrefslogtreecommitdiffstats
path: root/src/intel
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2019-10-29 15:18:16 -0500
committerJason Ekstrand <[email protected]>2019-10-31 13:46:09 +0000
commit9f665d9c1c3e4a8ec16a350033d7223ce714e74a (patch)
tree229d9e3be4c46818bc11d53eac6ee7d8a403cbfe /src/intel
parent63d7a38630ca17ac8c15c231f1afd75259f3417a (diff)
anv: Add a device parameter to anv_execbuf_add_bo
We're about to start needing to lookup BO pointers by GEM handle so we need access to the device. Reviewed-by: Lionel Landwerlin <[email protected]>
Diffstat (limited to 'src/intel')
-rw-r--r--src/intel/vulkan/anv_batch_chain.c51
1 files changed, 32 insertions, 19 deletions
diff --git a/src/intel/vulkan/anv_batch_chain.c b/src/intel/vulkan/anv_batch_chain.c
index eeb80ce0276..da26ccfd62c 100644
--- a/src/intel/vulkan/anv_batch_chain.c
+++ b/src/intel/vulkan/anv_batch_chain.c
@@ -1049,13 +1049,15 @@ _compare_bo_handles(const void *_bo1, const void *_bo2)
}
static VkResult
-anv_execbuf_add_bo_set(struct anv_execbuf *exec,
+anv_execbuf_add_bo_set(struct anv_device *device,
+ struct anv_execbuf *exec,
struct set *deps,
uint32_t extra_flags,
const VkAllocationCallbacks *alloc);
static VkResult
-anv_execbuf_add_bo(struct anv_execbuf *exec,
+anv_execbuf_add_bo(struct anv_device *device,
+ struct anv_execbuf *exec,
struct anv_bo *bo,
struct anv_reloc_list *relocs,
uint32_t extra_flags,
@@ -1137,15 +1139,16 @@ anv_execbuf_add_bo(struct anv_execbuf *exec,
/* A quick sanity check on relocations */
assert(relocs->relocs[i].offset < bo->size);
- result = anv_execbuf_add_bo(exec, relocs->reloc_bos[i], NULL,
- extra_flags, alloc);
+ result = anv_execbuf_add_bo(device, exec, relocs->reloc_bos[i],
+ NULL, extra_flags, alloc);
if (result != VK_SUCCESS)
return result;
}
}
- return anv_execbuf_add_bo_set(exec, relocs->deps, extra_flags, alloc);
+ return anv_execbuf_add_bo_set(device, exec, relocs->deps,
+ extra_flags, alloc);
}
return VK_SUCCESS;
@@ -1153,7 +1156,8 @@ anv_execbuf_add_bo(struct anv_execbuf *exec,
/* Add BO dependencies to execbuf */
static VkResult
-anv_execbuf_add_bo_set(struct anv_execbuf *exec,
+anv_execbuf_add_bo_set(struct anv_device *device,
+ struct anv_execbuf *exec,
struct set *deps,
uint32_t extra_flags,
const VkAllocationCallbacks *alloc)
@@ -1177,7 +1181,7 @@ anv_execbuf_add_bo_set(struct anv_execbuf *exec,
VkResult result = VK_SUCCESS;
for (bo = bos; bo < bos + entries; bo++) {
- result = anv_execbuf_add_bo(exec, *bo, NULL, extra_flags, alloc);
+ result = anv_execbuf_add_bo(device, exec, *bo, NULL, extra_flags, alloc);
if (result != VK_SUCCESS)
break;
}
@@ -1404,19 +1408,22 @@ setup_execbuf_for_cmd_buffer(struct anv_execbuf *execbuf,
VkResult result;
if (cmd_buffer->device->instance->physicalDevice.use_softpin) {
anv_block_pool_foreach_bo(bo, &ss_pool->block_pool) {
- result = anv_execbuf_add_bo(execbuf, bo, NULL, 0,
+ result = anv_execbuf_add_bo(cmd_buffer->device, execbuf,
+ bo, NULL, 0,
&cmd_buffer->device->alloc);
if (result != VK_SUCCESS)
return result;
}
/* Add surface dependencies (BOs) to the execbuf */
- anv_execbuf_add_bo_set(execbuf, cmd_buffer->surface_relocs.deps, 0,
+ anv_execbuf_add_bo_set(cmd_buffer->device, execbuf,
+ cmd_buffer->surface_relocs.deps, 0,
&cmd_buffer->device->alloc);
/* Add the BOs for all memory objects */
list_for_each_entry(struct anv_device_memory, mem,
&cmd_buffer->device->memory_objects, link) {
- result = anv_execbuf_add_bo(execbuf, mem->bo, NULL, 0,
+ result = anv_execbuf_add_bo(cmd_buffer->device, execbuf,
+ mem->bo, NULL, 0,
&cmd_buffer->device->alloc);
if (result != VK_SUCCESS)
return result;
@@ -1425,7 +1432,8 @@ setup_execbuf_for_cmd_buffer(struct anv_execbuf *execbuf,
struct anv_block_pool *pool;
pool = &cmd_buffer->device->dynamic_state_pool.block_pool;
anv_block_pool_foreach_bo(bo, pool) {
- result = anv_execbuf_add_bo(execbuf, bo, NULL, 0,
+ result = anv_execbuf_add_bo(cmd_buffer->device, execbuf,
+ bo, NULL, 0,
&cmd_buffer->device->alloc);
if (result != VK_SUCCESS)
return result;
@@ -1433,7 +1441,8 @@ setup_execbuf_for_cmd_buffer(struct anv_execbuf *execbuf,
pool = &cmd_buffer->device->instruction_state_pool.block_pool;
anv_block_pool_foreach_bo(bo, pool) {
- result = anv_execbuf_add_bo(execbuf, bo, NULL, 0,
+ result = anv_execbuf_add_bo(cmd_buffer->device, execbuf,
+ bo, NULL, 0,
&cmd_buffer->device->alloc);
if (result != VK_SUCCESS)
return result;
@@ -1441,7 +1450,8 @@ setup_execbuf_for_cmd_buffer(struct anv_execbuf *execbuf,
pool = &cmd_buffer->device->binding_table_pool.block_pool;
anv_block_pool_foreach_bo(bo, pool) {
- result = anv_execbuf_add_bo(execbuf, bo, NULL, 0,
+ result = anv_execbuf_add_bo(cmd_buffer->device, execbuf,
+ bo, NULL, 0,
&cmd_buffer->device->alloc);
if (result != VK_SUCCESS)
return result;
@@ -1452,7 +1462,8 @@ setup_execbuf_for_cmd_buffer(struct anv_execbuf *execbuf,
* buffer. We have to add the surface state BO manually because it has
* relocations of its own that we need to be sure are processsed.
*/
- result = anv_execbuf_add_bo(execbuf, ss_pool->block_pool.bo,
+ result = anv_execbuf_add_bo(cmd_buffer->device, execbuf,
+ ss_pool->block_pool.bo,
&cmd_buffer->surface_relocs, 0,
&cmd_buffer->device->alloc);
if (result != VK_SUCCESS)
@@ -1467,7 +1478,8 @@ setup_execbuf_for_cmd_buffer(struct anv_execbuf *execbuf,
adjust_relocations_to_state_pool(ss_pool, (*bbo)->bo, &(*bbo)->relocs,
cmd_buffer->last_ss_pool_center);
- result = anv_execbuf_add_bo(execbuf, (*bbo)->bo, &(*bbo)->relocs, 0,
+ result = anv_execbuf_add_bo(cmd_buffer->device, execbuf,
+ (*bbo)->bo, &(*bbo)->relocs, 0,
&cmd_buffer->device->alloc);
if (result != VK_SUCCESS)
return result;
@@ -1586,7 +1598,8 @@ setup_execbuf_for_cmd_buffer(struct anv_execbuf *execbuf,
static VkResult
setup_empty_execbuf(struct anv_execbuf *execbuf, struct anv_device *device)
{
- VkResult result = anv_execbuf_add_bo(execbuf, device->trivial_batch_bo,
+ VkResult result = anv_execbuf_add_bo(device, execbuf,
+ device->trivial_batch_bo,
NULL, 0, &device->alloc);
if (result != VK_SUCCESS)
return result;
@@ -1630,7 +1643,7 @@ anv_cmd_buffer_execbuf(struct anv_device *device,
switch (impl->type) {
case ANV_SEMAPHORE_TYPE_BO:
assert(!pdevice->has_syncobj);
- result = anv_execbuf_add_bo(&execbuf, impl->bo, NULL,
+ result = anv_execbuf_add_bo(device, &execbuf, impl->bo, NULL,
0, &device->alloc);
if (result != VK_SUCCESS)
return result;
@@ -1688,7 +1701,7 @@ anv_cmd_buffer_execbuf(struct anv_device *device,
switch (impl->type) {
case ANV_SEMAPHORE_TYPE_BO:
assert(!pdevice->has_syncobj);
- result = anv_execbuf_add_bo(&execbuf, impl->bo, NULL,
+ result = anv_execbuf_add_bo(device, &execbuf, impl->bo, NULL,
EXEC_OBJECT_WRITE, &device->alloc);
if (result != VK_SUCCESS)
return result;
@@ -1731,7 +1744,7 @@ anv_cmd_buffer_execbuf(struct anv_device *device,
switch (impl->type) {
case ANV_FENCE_TYPE_BO:
assert(!pdevice->has_syncobj_wait);
- result = anv_execbuf_add_bo(&execbuf, impl->bo.bo, NULL,
+ result = anv_execbuf_add_bo(device, &execbuf, impl->bo.bo, NULL,
EXEC_OBJECT_WRITE, &device->alloc);
if (result != VK_SUCCESS)
return result;