anv: Remove anv_bo flags that can be inferred from alloc_flags
Now that alloc_flags is stored in anv_bo we can get rid of is_external, has_fixed_address and has_client_visible_address flags that can be inferred from alloc_flags. Signed-off-by: José Roberto de Souza <jose.souza@intel.com> Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26099>
This commit is contained in:
committed by
Marge Bot
parent
7bdfabb641
commit
f25043feb4
@@ -1360,7 +1360,7 @@ anv_bo_unmap_close(struct anv_device *device, struct anv_bo *bo)
|
||||
static void
|
||||
anv_bo_vma_free(struct anv_device *device, struct anv_bo *bo)
|
||||
{
|
||||
if (bo->offset != 0 && !bo->has_fixed_address) {
|
||||
if (bo->offset != 0 && !(bo->alloc_flags & ANV_BO_ALLOC_FIXED_ADDRESS)) {
|
||||
assert(bo->vma_heap != NULL);
|
||||
anv_vma_free(device, bo->vma_heap, bo->offset, bo->size);
|
||||
}
|
||||
@@ -1408,7 +1408,6 @@ anv_bo_vma_alloc_or_close(struct anv_device *device,
|
||||
align = MAX2(2 * 1024 * 1024, align);
|
||||
|
||||
if (alloc_flags & ANV_BO_ALLOC_FIXED_ADDRESS) {
|
||||
bo->has_fixed_address = true;
|
||||
bo->offset = intel_canonical_address(explicit_address);
|
||||
} else {
|
||||
bo->offset = anv_vma_alloc(device, bo->size, align, alloc_flags,
|
||||
@@ -1514,9 +1513,6 @@ anv_device_alloc_bo(struct anv_device *device,
|
||||
.actual_size = actual_size,
|
||||
.flags = bo_flags,
|
||||
.alloc_flags = alloc_flags,
|
||||
.is_external = (alloc_flags & ANV_BO_ALLOC_EXTERNAL),
|
||||
.has_client_visible_address =
|
||||
(alloc_flags & ANV_BO_ALLOC_CLIENT_VISIBLE_ADDRESS) != 0,
|
||||
.vram_only = nregions == 1 &&
|
||||
regions[0] == device->physical->vram_non_mappable.region,
|
||||
};
|
||||
@@ -1597,6 +1593,7 @@ anv_device_import_bo_from_host_ptr(struct anv_device *device,
|
||||
ANV_BO_ALLOC_SNOOPED |
|
||||
ANV_BO_ALLOC_DEDICATED |
|
||||
ANV_BO_ALLOC_FIXED_ADDRESS)));
|
||||
assert(alloc_flags & ANV_BO_ALLOC_EXTERNAL);
|
||||
|
||||
struct anv_bo_cache *cache = &device->bo_cache;
|
||||
const uint32_t bo_flags =
|
||||
@@ -1632,8 +1629,8 @@ anv_device_import_bo_from_host_ptr(struct anv_device *device,
|
||||
"same host pointer imported two different ways");
|
||||
}
|
||||
|
||||
if (bo->has_client_visible_address !=
|
||||
((alloc_flags & ANV_BO_ALLOC_CLIENT_VISIBLE_ADDRESS) != 0)) {
|
||||
if ((bo->alloc_flags & ANV_BO_ALLOC_CLIENT_VISIBLE_ADDRESS) !=
|
||||
(alloc_flags & ANV_BO_ALLOC_CLIENT_VISIBLE_ADDRESS)) {
|
||||
pthread_mutex_unlock(&cache->mutex);
|
||||
return vk_errorf(device, VK_ERROR_INVALID_EXTERNAL_HANDLE,
|
||||
"The same BO was imported with and without buffer "
|
||||
@@ -1661,10 +1658,7 @@ anv_device_import_bo_from_host_ptr(struct anv_device *device,
|
||||
.map = host_ptr,
|
||||
.flags = bo_flags,
|
||||
.alloc_flags = alloc_flags,
|
||||
.is_external = true,
|
||||
.from_host_ptr = true,
|
||||
.has_client_visible_address =
|
||||
(alloc_flags & ANV_BO_ALLOC_CLIENT_VISIBLE_ADDRESS) != 0,
|
||||
};
|
||||
|
||||
VkResult result = anv_bo_vma_alloc_or_close(device, &new_bo,
|
||||
@@ -1725,8 +1719,8 @@ anv_device_import_bo(struct anv_device *device,
|
||||
}
|
||||
|
||||
if (bo->refcount > 0) {
|
||||
if (bo->has_client_visible_address !=
|
||||
((alloc_flags & ANV_BO_ALLOC_CLIENT_VISIBLE_ADDRESS) != 0)) {
|
||||
if ((bo->alloc_flags & ANV_BO_ALLOC_CLIENT_VISIBLE_ADDRESS) !=
|
||||
(alloc_flags & ANV_BO_ALLOC_CLIENT_VISIBLE_ADDRESS)) {
|
||||
pthread_mutex_unlock(&cache->mutex);
|
||||
return vk_errorf(device, VK_ERROR_INVALID_EXTERNAL_HANDLE,
|
||||
"The same BO was imported with and without buffer "
|
||||
@@ -1749,10 +1743,7 @@ anv_device_import_bo(struct anv_device *device,
|
||||
.gem_handle = gem_handle,
|
||||
.refcount = 1,
|
||||
.offset = -1,
|
||||
.is_external = true,
|
||||
.alloc_flags = alloc_flags,
|
||||
.has_client_visible_address =
|
||||
(alloc_flags & ANV_BO_ALLOC_CLIENT_VISIBLE_ADDRESS) != 0,
|
||||
};
|
||||
|
||||
off_t size = lseek(fd, 0, SEEK_END);
|
||||
@@ -1799,7 +1790,7 @@ anv_device_export_bo(struct anv_device *device,
|
||||
* to export it. This is done based on external options passed into
|
||||
* anv_AllocateMemory.
|
||||
*/
|
||||
assert(bo->is_external);
|
||||
assert(anv_bo_is_external(bo));
|
||||
|
||||
int fd = anv_gem_handle_to_fd(device, bo->gem_handle);
|
||||
if (fd < 0)
|
||||
|
||||
@@ -1984,7 +1984,7 @@ anv_descriptor_set_write_buffer(struct anv_device *device,
|
||||
isl_buffer_fill_state(&device->isl_dev, desc_map,
|
||||
.address = anv_address_physical(bind_addr),
|
||||
.mocs = isl_mocs(&device->isl_dev, usage,
|
||||
bind_addr.bo && bind_addr.bo->is_external),
|
||||
bind_addr.bo && anv_bo_is_external(bind_addr.bo)),
|
||||
.size_B = desc->bind_range,
|
||||
.format = format,
|
||||
.swizzle = ISL_SWIZZLE_IDENTITY,
|
||||
|
||||
@@ -4731,7 +4731,7 @@ uint64_t anv_GetDeviceMemoryOpaqueCaptureAddress(
|
||||
{
|
||||
ANV_FROM_HANDLE(anv_device_memory, memory, pInfo->memory);
|
||||
|
||||
assert(memory->bo->has_client_visible_address);
|
||||
assert(memory->bo->alloc_flags & ANV_BO_ALLOC_CLIENT_VISIBLE_ADDRESS);
|
||||
|
||||
return intel_48b_address(memory->bo->offset);
|
||||
}
|
||||
@@ -4748,7 +4748,7 @@ anv_fill_buffer_surface_state(struct anv_device *device,
|
||||
isl_buffer_fill_state(&device->isl_dev, surface_state_ptr,
|
||||
.address = anv_address_physical(address),
|
||||
.mocs = isl_mocs(&device->isl_dev, usage,
|
||||
address.bo && address.bo->is_external),
|
||||
address.bo && anv_bo_is_external(address.bo)),
|
||||
.size_B = range,
|
||||
.format = format,
|
||||
.swizzle = swizzle,
|
||||
|
||||
@@ -457,22 +457,19 @@ struct anv_bo {
|
||||
|
||||
enum anv_bo_alloc_flags alloc_flags;
|
||||
|
||||
/** True if this BO may be shared with other processes */
|
||||
bool is_external:1;
|
||||
|
||||
/** See also ANV_BO_ALLOC_FIXED_ADDRESS */
|
||||
bool has_fixed_address:1;
|
||||
|
||||
/** True if this BO wraps a host pointer */
|
||||
bool from_host_ptr:1;
|
||||
|
||||
/** See also ANV_BO_ALLOC_CLIENT_VISIBLE_ADDRESS */
|
||||
bool has_client_visible_address:1;
|
||||
|
||||
/** True if this BO can only live in VRAM */
|
||||
bool vram_only:1;
|
||||
};
|
||||
|
||||
static inline bool
|
||||
anv_bo_is_external(const struct anv_bo *bo)
|
||||
{
|
||||
return bo->alloc_flags & ANV_BO_ALLOC_EXTERNAL;
|
||||
}
|
||||
|
||||
static inline struct anv_bo *
|
||||
anv_bo_ref(struct anv_bo *bo)
|
||||
{
|
||||
@@ -1783,7 +1780,7 @@ anv_mocs(const struct anv_device *device,
|
||||
const struct anv_bo *bo,
|
||||
isl_surf_usage_flags_t usage)
|
||||
{
|
||||
return isl_mocs(&device->isl_dev, usage, bo && bo->is_external);
|
||||
return isl_mocs(&device->isl_dev, usage, bo && anv_bo_is_external(bo));
|
||||
}
|
||||
|
||||
static inline uint32_t
|
||||
|
||||
Reference in New Issue
Block a user