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 <jason@jlekstrand.net>
This commit is contained in:
parent
bf34ef16ac
commit
29a139b308
|
@ -1105,22 +1105,6 @@ anv_cmd_buffer_process_relocs(struct anv_cmd_buffer *cmd_buffer,
|
||||||
list->relocs[i].target_handle = list->reloc_bos[i]->index;
|
list->relocs[i].target_handle = list->reloc_bos[i]->index;
|
||||||
}
|
}
|
||||||
|
|
||||||
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
|
static void
|
||||||
adjust_relocations_from_state_pool(struct anv_state_pool *pool,
|
adjust_relocations_from_state_pool(struct anv_state_pool *pool,
|
||||||
struct anv_reloc_list *relocs,
|
struct anv_reloc_list *relocs,
|
||||||
|
|
|
@ -1144,6 +1144,22 @@ anv_address_add(struct anv_address addr, uint64_t offset)
|
||||||
return addr;
|
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
|
static inline uint64_t
|
||||||
_anv_combine_address(struct anv_batch *batch, void *location,
|
_anv_combine_address(struct anv_batch *batch, void *location,
|
||||||
const struct anv_address address, uint32_t delta)
|
const struct anv_address address, uint32_t delta)
|
||||||
|
|
|
@ -62,6 +62,12 @@ blorp_surface_reloc(struct blorp_batch *batch, uint32_t ss_offset,
|
||||||
ss_offset, address.buffer, address.offset + delta);
|
ss_offset, address.buffer, address.offset + delta);
|
||||||
if (result != VK_SUCCESS)
|
if (result != VK_SUCCESS)
|
||||||
anv_batch_set_error(&cmd_buffer->batch, result);
|
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
|
#if GEN_GEN >= 7 && GEN_GEN < 10
|
||||||
|
|
Loading…
Reference in New Issue