diff options
author | Scott D Phillips <[email protected]> | 2018-05-30 20:24:15 -0700 |
---|---|---|
committer | Jason Ekstrand <[email protected]> | 2018-05-31 16:51:47 -0700 |
commit | 29a139b308d51560e0f1d5862fa228023c9a5a04 (patch) | |
tree | 52de69de4aa5075d126ba12ada9199087232bab9 /src/intel | |
parent | bf34ef16ac7c5b59df936dc7a5932c9f518260d9 (diff) |
anv/blorp: Write relocated values into surface states
v2 (Jason Ekstrand):
- Split the blorp bit into it's own patch and re-order a bit
- Use anv_address helpers
Reviewed-by: Jason Ekstrand <[email protected]>
Diffstat (limited to 'src/intel')
-rw-r--r-- | src/intel/vulkan/anv_batch_chain.c | 16 | ||||
-rw-r--r-- | src/intel/vulkan/anv_private.h | 16 | ||||
-rw-r--r-- | src/intel/vulkan/genX_blorp_exec.c | 6 |
3 files changed, 22 insertions, 16 deletions
diff --git a/src/intel/vulkan/anv_batch_chain.c b/src/intel/vulkan/anv_batch_chain.c index a1fb8bf731a..ec8815a3c44 100644 --- a/src/intel/vulkan/anv_batch_chain.c +++ b/src/intel/vulkan/anv_batch_chain.c @@ -1106,22 +1106,6 @@ anv_cmd_buffer_process_relocs(struct anv_cmd_buffer *cmd_buffer, } static void -write_reloc(const struct anv_device *device, void *p, uint64_t v, bool flush) -{ - unsigned reloc_size = 0; - if (device->info.gen >= 8) { - reloc_size = sizeof(uint64_t); - *(uint64_t *)p = gen_canonical_address(v); - } else { - reloc_size = sizeof(uint32_t); - *(uint32_t *)p = v; - } - - if (flush && !device->info.has_llc) - gen_flush_range(p, reloc_size); -} - -static void adjust_relocations_from_state_pool(struct anv_state_pool *pool, struct anv_reloc_list *relocs, uint32_t last_pool_center_bo_offset) diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index 5e07617054c..67a12c7206e 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -1144,6 +1144,22 @@ anv_address_add(struct anv_address addr, uint64_t offset) return addr; } +static inline void +write_reloc(const struct anv_device *device, void *p, uint64_t v, bool flush) +{ + unsigned reloc_size = 0; + if (device->info.gen >= 8) { + reloc_size = sizeof(uint64_t); + *(uint64_t *)p = gen_canonical_address(v); + } else { + reloc_size = sizeof(uint32_t); + *(uint32_t *)p = v; + } + + if (flush && !device->info.has_llc) + gen_flush_range(p, reloc_size); +} + static inline uint64_t _anv_combine_address(struct anv_batch *batch, void *location, const struct anv_address address, uint32_t delta) diff --git a/src/intel/vulkan/genX_blorp_exec.c b/src/intel/vulkan/genX_blorp_exec.c index 9023269d61b..ecca3928de5 100644 --- a/src/intel/vulkan/genX_blorp_exec.c +++ b/src/intel/vulkan/genX_blorp_exec.c @@ -62,6 +62,12 @@ blorp_surface_reloc(struct blorp_batch *batch, uint32_t ss_offset, ss_offset, address.buffer, address.offset + delta); if (result != VK_SUCCESS) anv_batch_set_error(&cmd_buffer->batch, result); + + void *dest = cmd_buffer->device->surface_state_pool.block_pool.map + + ss_offset; + uint64_t val = ((struct anv_bo*)address.buffer)->offset + address.offset + + delta; + write_reloc(cmd_buffer->device, dest, val, false); } #if GEN_GEN >= 7 && GEN_GEN < 10 |