struct drm_i915_gem_relocation_entry *entry;
int index;
+ const uint32_t domain =
+ target_bo->is_winsys_bo ? I915_GEM_DOMAIN_RENDER : 0;
+
anv_reloc_list_grow(list, alloc, 1);
/* TODO: Handle failure */
entry->delta = delta;
entry->offset = offset;
entry->presumed_offset = target_bo->offset;
- entry->read_domains = 0;
- entry->write_domain = 0;
+ entry->read_domains = domain;
+ entry->write_domain = domain;
VG(VALGRIND_CHECK_MEM_IS_DEFINED(entry, sizeof(*entry)));
return target_bo->offset + delta;
obj->relocs_ptr = 0;
obj->alignment = 0;
obj->offset = bo->offset;
- obj->flags = 0;
+ obj->flags = bo->is_winsys_bo ? EXEC_OBJECT_WRITE : 0;
obj->rsvd1 = 0;
obj->rsvd2 = 0;
}
uint64_t size;
void *map;
+
+ /* We need to set the WRITE flag on winsys bos so GEM will know we're
+ * writing to them and synchronize uses on other rings (eg if the display
+ * server uses the blitter ring).
+ */
+ bool is_winsys_bo;
};
/* Represents a lock-free linked list of "free" things. This is used by
goto fail_image;
image->memory = anv_device_memory_from_handle(vk_memory);
+ image->memory->bo.is_winsys_bo = true;
result = anv_BindImageMemory(vk_device, vk_image, vk_memory, 0);
&memory_h);
memory = anv_device_memory_from_handle(memory_h);
+ memory->bo.is_winsys_bo = true;
anv_BindImageMemory(VK_NULL_HANDLE, anv_image_to_handle(image),
memory_h, 0);