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:
José Roberto de Souza
2023-11-06 12:55:24 -08:00
committed by Marge Bot
parent 7bdfabb641
commit f25043feb4
4 changed files with 17 additions and 29 deletions
+7 -16
View File
@@ -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)
+1 -1
View File
@@ -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,
+2 -2
View File
@@ -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,
+7 -10
View File
@@ -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