summaryrefslogtreecommitdiff
path: root/src/intel
diff options
context:
space:
mode:
authorJason Ekstrand <jason@jlekstrand.net>2020-04-21 12:33:16 -0500
committerMarge Bot <eric+marge@anholt.net>2020-05-04 14:06:27 +0000
commit682c81bdfb7ea28efccea1e8cbfeb7cfc67d02b8 (patch)
treed80c4655ed70604958166cbbd6187a875b834391 /src/intel
parent369703774cfa304f4881e0e379eb02ed98933dde (diff)
vulkan,anv: Add a base object struct type
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Acked-by: Kristian H. Kristensen <hoegsberg@google.com> Acked-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4690>
Diffstat (limited to 'src/intel')
-rw-r--r--src/intel/vulkan/anv_cmd_buffer.c8
-rw-r--r--src/intel/vulkan/anv_descriptor_set.c25
-rw-r--r--src/intel/vulkan/anv_device.c18
-rw-r--r--src/intel/vulkan/anv_formats.c3
-rw-r--r--src/intel/vulkan/anv_image.c6
-rw-r--r--src/intel/vulkan/anv_pass.c3
-rw-r--r--src/intel/vulkan/anv_pipeline.c6
-rw-r--r--src/intel/vulkan/anv_pipeline_cache.c4
-rw-r--r--src/intel/vulkan/anv_private.h55
-rw-r--r--src/intel/vulkan/anv_queue.c10
-rw-r--r--src/intel/vulkan/genX_pipeline.c2
-rw-r--r--src/intel/vulkan/genX_query.c2
-rw-r--r--src/intel/vulkan/genX_state.c1
13 files changed, 132 insertions, 11 deletions
diff --git a/src/intel/vulkan/anv_cmd_buffer.c b/src/intel/vulkan/anv_cmd_buffer.c
index 03af604de4c..49c7334567f 100644
--- a/src/intel/vulkan/anv_cmd_buffer.c
+++ b/src/intel/vulkan/anv_cmd_buffer.c
@@ -203,9 +203,11 @@ static VkResult anv_create_cmd_buffer(
if (cmd_buffer == NULL)
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
+ vk_object_base_init(&device->vk, &cmd_buffer->base,
+ VK_OBJECT_TYPE_COMMAND_BUFFER);
+
cmd_buffer->batch.status = VK_SUCCESS;
- cmd_buffer->_loader_data.loaderMagic = ICD_LOADER_MAGIC;
cmd_buffer->device = device;
cmd_buffer->pool = pool;
cmd_buffer->level = level;
@@ -280,6 +282,7 @@ anv_cmd_buffer_destroy(struct anv_cmd_buffer *cmd_buffer)
anv_cmd_state_finish(cmd_buffer);
+ vk_object_base_finish(&cmd_buffer->base);
vk_free(&cmd_buffer->pool->alloc, cmd_buffer);
}
@@ -906,6 +909,8 @@ VkResult anv_CreateCommandPool(
if (pool == NULL)
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
+ vk_object_base_init(&device->vk, &pool->base, VK_OBJECT_TYPE_COMMAND_POOL);
+
if (pAllocator)
pool->alloc = *pAllocator;
else
@@ -934,6 +939,7 @@ void anv_DestroyCommandPool(
anv_cmd_buffer_destroy(cmd_buffer);
}
+ vk_object_base_finish(&pool->base);
vk_free2(&device->vk.alloc, pAllocator, pool);
}
diff --git a/src/intel/vulkan/anv_descriptor_set.c b/src/intel/vulkan/anv_descriptor_set.c
index ce6caafcf7a..d4676b23416 100644
--- a/src/intel/vulkan/anv_descriptor_set.c
+++ b/src/intel/vulkan/anv_descriptor_set.c
@@ -363,6 +363,8 @@ VkResult anv_CreateDescriptorSetLayout(
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
memset(set_layout, 0, sizeof(*set_layout));
+ vk_object_base_init(&device->vk, &set_layout->base,
+ VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT);
set_layout->ref_cnt = 1;
set_layout->binding_count = max_binding + 1;
@@ -509,6 +511,15 @@ VkResult anv_CreateDescriptorSetLayout(
return VK_SUCCESS;
}
+void
+anv_descriptor_set_layout_destroy(struct anv_device *device,
+ struct anv_descriptor_set_layout *layout)
+{
+ assert(layout->ref_cnt == 0);
+ vk_object_base_finish(&layout->base);
+ vk_free(&device->vk.alloc, layout);
+}
+
void anv_DestroyDescriptorSetLayout(
VkDevice _device,
VkDescriptorSetLayout _set_layout,
@@ -592,6 +603,8 @@ VkResult anv_CreatePipelineLayout(
if (layout == NULL)
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
+ vk_object_base_init(&device->vk, &layout->base,
+ VK_OBJECT_TYPE_PIPELINE_LAYOUT);
layout->num_sets = pCreateInfo->setLayoutCount;
unsigned dynamic_offset_count = 0;
@@ -641,6 +654,7 @@ void anv_DestroyPipelineLayout(
for (uint32_t i = 0; i < pipeline_layout->num_sets; i++)
anv_descriptor_set_layout_unref(device, pipeline_layout->set[i].layout);
+ vk_object_base_finish(&pipeline_layout->base);
vk_free2(&device->vk.alloc, pAllocator, pipeline_layout);
}
@@ -736,6 +750,8 @@ VkResult anv_CreateDescriptorPool(
if (!pool)
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
+ vk_object_base_init(&device->vk, &pool->base,
+ VK_OBJECT_TYPE_DESCRIPTOR_POOL);
pool->size = pool_size;
pool->next = 0;
pool->free_list = EMPTY;
@@ -788,6 +804,7 @@ void anv_DestroyDescriptorPool(
anv_device_release_bo(device, pool->bo);
anv_state_stream_finish(&pool->surface_state_stream);
+ vk_object_base_finish(&pool->base);
vk_free2(&device->vk.alloc, pAllocator, pool);
}
@@ -934,7 +951,7 @@ anv_descriptor_set_create(struct anv_device *device,
uint64_t pool_vma_offset =
util_vma_heap_alloc(&pool->bo_heap, set_buffer_size, 32);
if (pool_vma_offset == 0) {
- anv_descriptor_pool_free_set(pool, set);
+ vk_object_base_finish(&set->base);
return vk_error(VK_ERROR_FRAGMENTED_POOL);
}
assert(pool_vma_offset >= POOL_HEAP_OFFSET &&
@@ -956,6 +973,8 @@ anv_descriptor_set_create(struct anv_device *device,
set->desc_surface_state = ANV_STATE_NULL;
}
+ vk_object_base_init(&device->vk, &set->base,
+ VK_OBJECT_TYPE_DESCRIPTOR_SET);
set->pool = pool;
set->layout = layout;
anv_descriptor_set_layout_ref(layout);
@@ -1025,6 +1044,7 @@ anv_descriptor_set_destroy(struct anv_device *device,
list_del(&set->pool_link);
+ vk_object_base_finish(&set->base);
anv_descriptor_pool_free_set(pool, set);
}
@@ -1604,6 +1624,8 @@ VkResult anv_CreateDescriptorUpdateTemplate(
if (template == NULL)
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
+ vk_object_base_init(&device->vk, &template->base,
+ VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE);
template->bind_point = pCreateInfo->pipelineBindPoint;
if (pCreateInfo->templateType == VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET)
@@ -1639,6 +1661,7 @@ void anv_DestroyDescriptorUpdateTemplate(
ANV_FROM_HANDLE(anv_descriptor_update_template, template,
descriptorUpdateTemplate);
+ vk_object_base_finish(&template->base);
vk_free2(&device->vk.alloc, pAllocator, template);
}
diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c
index fd3b292dbbd..8b54408eff0 100644
--- a/src/intel/vulkan/anv_device.c
+++ b/src/intel/vulkan/anv_device.c
@@ -377,7 +377,7 @@ anv_physical_device_try_create(struct anv_instance *instance,
goto fail_fd;
}
- device->_loader_data.loaderMagic = ICD_LOADER_MAGIC;
+ vk_object_base_init(NULL, &device->base, VK_OBJECT_TYPE_PHYSICAL_DEVICE);
device->instance = instance;
assert(strlen(path) < ARRAY_SIZE(device->path));
@@ -595,6 +595,7 @@ anv_physical_device_destroy(struct anv_physical_device *device)
close(device->local_fd);
if (device->master_fd >= 0)
close(device->master_fd);
+ vk_object_base_finish(&device->base);
vk_free(&device->instance->alloc, device);
}
@@ -676,7 +677,7 @@ VkResult anv_CreateInstance(
if (!instance)
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
- instance->_loader_data.loaderMagic = ICD_LOADER_MAGIC;
+ vk_object_base_init(NULL, &instance->base, VK_OBJECT_TYPE_INSTANCE);
if (pAllocator)
instance->alloc = *pAllocator;
@@ -796,6 +797,7 @@ void anv_DestroyInstance(
driDestroyOptionCache(&instance->dri_options);
driDestroyOptionInfo(&instance->available_dri_options);
+ vk_object_base_finish(&instance->base);
vk_free(&instance->alloc, instance);
}
@@ -3360,6 +3362,7 @@ VkResult anv_AllocateMemory(
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
assert(pAllocateInfo->memoryTypeIndex < pdevice->memory.type_count);
+ vk_object_base_init(&device->vk, &mem->base, VK_OBJECT_TYPE_DEVICE_MEMORY);
mem->type = mem_type;
mem->map = NULL;
mem->map_size = 0;
@@ -3683,6 +3686,7 @@ void anv_FreeMemory(
AHardwareBuffer_release(mem->ahw);
#endif
+ vk_object_base_finish(&mem->base);
vk_free2(&device->vk.alloc, pAllocator, mem);
}
@@ -4087,6 +4091,7 @@ VkResult anv_CreateEvent(
if (event == NULL)
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
+ vk_object_base_init(&device->vk, &event->base, VK_OBJECT_TYPE_EVENT);
event->state = anv_state_pool_alloc(&device->dynamic_state_pool,
sizeof(uint64_t), 8);
*(uint64_t *)event->state.map = VK_EVENT_RESET;
@@ -4108,6 +4113,8 @@ void anv_DestroyEvent(
return;
anv_state_pool_free(&device->dynamic_state_pool, event->state);
+
+ vk_object_base_finish(&event->base);
vk_free2(&device->vk.alloc, pAllocator, event);
}
@@ -4172,6 +4179,7 @@ VkResult anv_CreateBuffer(
if (buffer == NULL)
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
+ vk_object_base_init(&device->vk, &buffer->base, VK_OBJECT_TYPE_BUFFER);
buffer->size = pCreateInfo->size;
buffer->usage = pCreateInfo->usage;
buffer->address = ANV_NULL_ADDRESS;
@@ -4192,6 +4200,7 @@ void anv_DestroyBuffer(
if (!buffer)
return;
+ vk_object_base_finish(&buffer->base);
vk_free2(&device->vk.alloc, pAllocator, buffer);
}
@@ -4257,6 +4266,7 @@ void anv_DestroySampler(
sampler->bindless_state);
}
+ vk_object_base_finish(&sampler->base);
vk_free2(&device->vk.alloc, pAllocator, sampler);
}
@@ -4299,6 +4309,9 @@ VkResult anv_CreateFramebuffer(
framebuffer->attachment_count = 0;
}
+ vk_object_base_init(&device->vk, &framebuffer->base,
+ VK_OBJECT_TYPE_FRAMEBUFFER);
+
framebuffer->width = pCreateInfo->width;
framebuffer->height = pCreateInfo->height;
framebuffer->layers = pCreateInfo->layers;
@@ -4319,6 +4332,7 @@ void anv_DestroyFramebuffer(
if (!fb)
return;
+ vk_object_base_finish(&fb->base);
vk_free2(&device->vk.alloc, pAllocator, fb);
}
diff --git a/src/intel/vulkan/anv_formats.c b/src/intel/vulkan/anv_formats.c
index db1ea3f1818..a3d25ebc3e6 100644
--- a/src/intel/vulkan/anv_formats.c
+++ b/src/intel/vulkan/anv_formats.c
@@ -1293,6 +1293,8 @@ VkResult anv_CreateSamplerYcbcrConversion(
memset(conversion, 0, sizeof(*conversion));
+ vk_object_base_init(&device->vk, &conversion->base,
+ VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION);
conversion->format = anv_get_format(pCreateInfo->format);
conversion->ycbcr_model = pCreateInfo->ycbcrModel;
conversion->ycbcr_range = pCreateInfo->ycbcrRange;
@@ -1342,5 +1344,6 @@ void anv_DestroySamplerYcbcrConversion(
if (!conversion)
return;
+ vk_object_base_finish(&conversion->base);
vk_free2(&device->vk.alloc, pAllocator, conversion);
}
diff --git a/src/intel/vulkan/anv_image.c b/src/intel/vulkan/anv_image.c
index 1f30ee12819..05b38f22661 100644
--- a/src/intel/vulkan/anv_image.c
+++ b/src/intel/vulkan/anv_image.c
@@ -695,6 +695,7 @@ anv_image_create(VkDevice _device,
if (!image)
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
+ vk_object_base_init(&device->vk, &image->base, VK_OBJECT_TYPE_IMAGE);
image->type = pCreateInfo->imageType;
image->extent = pCreateInfo->extent;
image->vk_format = pCreateInfo->format;
@@ -889,6 +890,7 @@ anv_DestroyImage(VkDevice _device, VkImage _image,
}
}
+ vk_object_base_finish(&image->base);
vk_free2(&device->vk.alloc, pAllocator, image);
}
@@ -1916,6 +1918,8 @@ anv_CreateImageView(VkDevice _device,
if (iview == NULL)
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
+ vk_object_base_init(&device->vk, &iview->base, VK_OBJECT_TYPE_IMAGE_VIEW);
+
const VkImageSubresourceRange *range = &pCreateInfo->subresourceRange;
assert(range->layerCount > 0);
@@ -2190,6 +2194,7 @@ anv_CreateBufferView(VkDevice _device,
/* TODO: Handle the format swizzle? */
+ vk_object_base_init(&device->vk, &view->base, VK_OBJECT_TYPE_BUFFER_VIEW);
view->format = anv_get_isl_format(&device->info, pCreateInfo->format,
VK_IMAGE_ASPECT_COLOR_BIT,
VK_IMAGE_TILING_LINEAR);
@@ -2267,5 +2272,6 @@ anv_DestroyBufferView(VkDevice _device, VkBufferView bufferView,
anv_state_pool_free(&device->surface_state_pool,
view->writeonly_storage_surface_state);
+ vk_object_base_finish(&view->base);
vk_free2(&device->vk.alloc, pAllocator, view);
}
diff --git a/src/intel/vulkan/anv_pass.c b/src/intel/vulkan/anv_pass.c
index b100bec929d..3820cbfe5dd 100644
--- a/src/intel/vulkan/anv_pass.c
+++ b/src/intel/vulkan/anv_pass.c
@@ -267,6 +267,7 @@ VkResult anv_CreateRenderPass(
* each array member of anv_subpass must be a valid pointer if not NULL.
*/
memset(pass, 0, ma.size);
+ vk_object_base_init(&device->vk, &pass->base, VK_OBJECT_TYPE_RENDER_PASS);
pass->attachment_count = pCreateInfo->attachmentCount;
pass->subpass_count = pCreateInfo->subpassCount;
pass->attachments = attachments;
@@ -441,6 +442,7 @@ VkResult anv_CreateRenderPass2(
* each array member of anv_subpass must be a valid pointer if not NULL.
*/
memset(pass, 0, ma.size);
+ vk_object_base_init(&device->vk, &pass->base, VK_OBJECT_TYPE_RENDER_PASS);
pass->attachment_count = pCreateInfo->attachmentCount;
pass->subpass_count = pCreateInfo->subpassCount;
pass->attachments = attachments;
@@ -591,6 +593,7 @@ void anv_DestroyRenderPass(
ANV_FROM_HANDLE(anv_device, device, _device);
ANV_FROM_HANDLE(anv_render_pass, pass, _pass);
+ vk_object_base_finish(&pass->base);
vk_free2(&device->vk.alloc, pAllocator, pass);
}
diff --git a/src/intel/vulkan/anv_pipeline.c b/src/intel/vulkan/anv_pipeline.c
index d3bbd06e061..88bc58f3771 100644
--- a/src/intel/vulkan/anv_pipeline.c
+++ b/src/intel/vulkan/anv_pipeline.c
@@ -61,6 +61,8 @@ VkResult anv_CreateShaderModule(
if (module == NULL)
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
+ vk_object_base_init(&device->vk, &module->base,
+ VK_OBJECT_TYPE_SHADER_MODULE);
module->size = pCreateInfo->codeSize;
memcpy(module->data, pCreateInfo->pCode, module->size);
@@ -82,6 +84,7 @@ void anv_DestroyShaderModule(
if (!module)
return;
+ vk_object_base_finish(&module->base);
vk_free2(&device->vk.alloc, pAllocator, module);
}
@@ -340,6 +343,7 @@ void anv_DestroyPipeline(
unreachable("invalid pipeline type");
}
+ vk_object_base_finish(&pipeline->base);
vk_free2(&device->vk.alloc, pAllocator, pipeline);
}
@@ -1981,6 +1985,8 @@ anv_pipeline_init(struct anv_graphics_pipeline *pipeline,
if (alloc == NULL)
alloc = &device->vk.alloc;
+ vk_object_base_init(&device->vk, &pipeline->base.base,
+ VK_OBJECT_TYPE_PIPELINE);
pipeline->base.device = device;
pipeline->base.type = ANV_PIPELINE_GRAPHICS;
diff --git a/src/intel/vulkan/anv_pipeline_cache.c b/src/intel/vulkan/anv_pipeline_cache.c
index 39df5f1ded5..bdbca77bc08 100644
--- a/src/intel/vulkan/anv_pipeline_cache.c
+++ b/src/intel/vulkan/anv_pipeline_cache.c
@@ -282,6 +282,8 @@ anv_pipeline_cache_init(struct anv_pipeline_cache *cache,
struct anv_device *device,
bool cache_enabled)
{
+ vk_object_base_init(&device->vk, &cache->base,
+ VK_OBJECT_TYPE_PIPELINE_CACHE);
cache->device = device;
pthread_mutex_init(&cache->mutex, NULL);
@@ -318,6 +320,8 @@ anv_pipeline_cache_finish(struct anv_pipeline_cache *cache)
_mesa_hash_table_destroy(cache->nir_cache, NULL);
}
+
+ vk_object_base_finish(&cache->base);
}
static struct anv_shader_bin *
diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h
index e39b328cca3..b778121951a 100644
--- a/src/intel/vulkan/anv_private.h
+++ b/src/intel/vulkan/anv_private.h
@@ -1007,7 +1007,7 @@ struct anv_memory_heap {
};
struct anv_physical_device {
- VK_LOADER_DATA _loader_data;
+ struct vk_object_base base;
/* Link in anv_instance::physical_devices */
struct list_head link;
@@ -1100,7 +1100,7 @@ struct anv_app_info {
};
struct anv_instance {
- VK_LOADER_DATA _loader_data;
+ struct vk_object_base base;
VkAllocationCallbacks alloc;
@@ -1177,7 +1177,7 @@ struct anv_queue_submit {
};
struct anv_queue {
- VK_LOADER_DATA _loader_data;
+ struct vk_object_base base;
struct anv_device * device;
@@ -1190,6 +1190,7 @@ struct anv_queue {
};
struct anv_pipeline_cache {
+ struct vk_object_base base;
struct anv_device * device;
pthread_mutex_t mutex;
@@ -1727,6 +1728,8 @@ _anv_combine_address(struct anv_batch *batch, void *location,
}))
struct anv_device_memory {
+ struct vk_object_base base;
+
struct list_head link;
struct anv_bo * bo;
@@ -1880,6 +1883,8 @@ bool anv_descriptor_requires_bindless(const struct anv_physical_device *pdevice,
bool sampler);
struct anv_descriptor_set_layout {
+ struct vk_object_base base;
+
/* Descriptor set layouts can be destroyed at almost any time */
uint32_t ref_cnt;
@@ -1908,6 +1913,9 @@ struct anv_descriptor_set_layout {
struct anv_descriptor_set_binding_layout binding[0];
};
+void anv_descriptor_set_layout_destroy(struct anv_device *device,
+ struct anv_descriptor_set_layout *layout);
+
static inline void
anv_descriptor_set_layout_ref(struct anv_descriptor_set_layout *layout)
{
@@ -1921,7 +1929,7 @@ anv_descriptor_set_layout_unref(struct anv_device *device,
{
assert(layout && layout->ref_cnt >= 1);
if (p_atomic_dec_zero(&layout->ref_cnt))
- vk_free(&device->vk.alloc, layout);
+ anv_descriptor_set_layout_destroy(device, layout);
}
struct anv_descriptor {
@@ -1945,6 +1953,8 @@ struct anv_descriptor {
};
struct anv_descriptor_set {
+ struct vk_object_base base;
+
struct anv_descriptor_pool *pool;
struct anv_descriptor_set_layout *layout;
uint32_t size;
@@ -1964,6 +1974,8 @@ struct anv_descriptor_set {
};
struct anv_buffer_view {
+ struct vk_object_base base;
+
enum isl_format format; /**< VkBufferViewCreateInfo::format */
uint64_t range; /**< VkBufferViewCreateInfo::range */
@@ -1992,6 +2004,8 @@ struct anv_push_descriptor_set {
};
struct anv_descriptor_pool {
+ struct vk_object_base base;
+
uint32_t size;
uint32_t next;
uint32_t free_list;
@@ -2034,6 +2048,8 @@ struct anv_descriptor_template_entry {
};
struct anv_descriptor_update_template {
+ struct vk_object_base base;
+
VkPipelineBindPoint bind_point;
/* The descriptor set this template corresponds to. This value is only
@@ -2164,6 +2180,8 @@ struct anv_push_range {
};
struct anv_pipeline_layout {
+ struct vk_object_base base;
+
struct {
struct anv_descriptor_set_layout *layout;
uint32_t dynamic_offset_start;
@@ -2175,6 +2193,8 @@ struct anv_pipeline_layout {
};
struct anv_buffer {
+ struct vk_object_base base;
+
struct anv_device * device;
VkDeviceSize size;
@@ -2764,6 +2784,7 @@ struct anv_cmd_state {
};
struct anv_cmd_pool {
+ struct vk_object_base base;
VkAllocationCallbacks alloc;
struct list_head cmd_buffers;
};
@@ -2779,7 +2800,7 @@ enum anv_cmd_buffer_exec_mode {
};
struct anv_cmd_buffer {
- VK_LOADER_DATA _loader_data;
+ struct vk_object_base base;
struct anv_device * device;
@@ -2946,6 +2967,8 @@ struct anv_fence_impl {
};
struct anv_fence {
+ struct vk_object_base base;
+
/* Permanent fence state. Every fence has some form of permanent state
* (type != ANV_SEMAPHORE_TYPE_NONE). This may be a BO to fence on (for
* cross-process fences) or it could just be a dummy for use internally.
@@ -2966,6 +2989,7 @@ void anv_fence_reset_temporary(struct anv_device *device,
struct anv_fence *fence);
struct anv_event {
+ struct vk_object_base base;
uint64_t semaphore;
struct anv_state state;
};
@@ -3038,6 +3062,8 @@ struct anv_semaphore_impl {
};
struct anv_semaphore {
+ struct vk_object_base base;
+
uint32_t refcount;
/* Permanent semaphore state. Every semaphore has some form of permanent
@@ -3061,6 +3087,8 @@ void anv_semaphore_reset_temporary(struct anv_device *device,
struct anv_semaphore *semaphore);
struct anv_shader_module {
+ struct vk_object_base base;
+
unsigned char sha1[20];
uint32_t size;
char data[0];
@@ -3175,6 +3203,8 @@ enum anv_pipeline_type {
};
struct anv_pipeline {
+ struct vk_object_base base;
+
struct anv_device * device;
struct anv_batch batch;
@@ -3462,6 +3492,8 @@ struct anv_surface {
};
struct anv_image {
+ struct vk_object_base base;
+
VkImageType type; /**< VkImageCreateInfo::imageType */
/* The original VkFormat provided by the client. This may not match any
* of the actual surface formats.
@@ -3878,6 +3910,8 @@ anv_image_aspects_compatible(VkImageAspectFlags aspects1,
}
struct anv_image_view {
+ struct vk_object_base base;
+
const struct anv_image *image; /**< VkImageViewCreateInfo::image */
VkImageAspectFlags aspect_mask;
@@ -4018,6 +4052,8 @@ anv_clear_color_from_att_state(union isl_color_value *clear_color,
struct anv_ycbcr_conversion {
+ struct vk_object_base base;
+
const struct anv_format * format;
VkSamplerYcbcrModelConversion ycbcr_model;
VkSamplerYcbcrRange ycbcr_range;
@@ -4028,6 +4064,8 @@ struct anv_ycbcr_conversion {
};
struct anv_sampler {
+ struct vk_object_base base;
+
uint32_t state[3][4];
uint32_t n_planes;
struct anv_ycbcr_conversion *conversion;
@@ -4039,6 +4077,8 @@ struct anv_sampler {
};
struct anv_framebuffer {
+ struct vk_object_base base;
+
uint32_t width;
uint32_t height;
uint32_t layers;
@@ -4112,6 +4152,8 @@ struct anv_render_pass_attachment {
};
struct anv_render_pass {
+ struct vk_object_base base;
+
uint32_t attachment_count;
uint32_t subpass_count;
/* An array of subpass_count+1 flushes, one per subpass boundary */
@@ -4123,6 +4165,8 @@ struct anv_render_pass {
#define ANV_PIPELINE_STATISTICS_MASK 0x000007ff
struct anv_query_pool {
+ struct vk_object_base base;
+
VkQueryType type;
VkQueryPipelineStatisticFlags pipeline_statistics;
/** Stride between slots, in bytes */
@@ -4244,7 +4288,6 @@ ANV_DEFINE_NONDISP_HANDLE_CASTS(anv_render_pass, VkRenderPass)
ANV_DEFINE_NONDISP_HANDLE_CASTS(anv_sampler, VkSampler)
ANV_DEFINE_NONDISP_HANDLE_CASTS(anv_semaphore, VkSemaphore)
ANV_DEFINE_NONDISP_HANDLE_CASTS(anv_shader_module, VkShaderModule)
-ANV_DEFINE_NONDISP_HANDLE_CASTS(vk_debug_report_callback, VkDebugReportCallbackEXT)
ANV_DEFINE_NONDISP_HANDLE_CASTS(anv_ycbcr_conversion, VkSamplerYcbcrConversion)
/* Gen-specific function declarations */
diff --git a/src/intel/vulkan/anv_queue.c b/src/intel/vulkan/anv_queue.c
index c2229e9fd0a..ebe3216dd02 100644
--- a/src/intel/vulkan/anv_queue.c
+++ b/src/intel/vulkan/anv_queue.c
@@ -381,7 +381,7 @@ _anv_queue_submit(struct anv_queue *queue, struct anv_queue_submit **_submit,
VkResult
anv_queue_init(struct anv_device *device, struct anv_queue *queue)
{
- queue->_loader_data.loaderMagic = ICD_LOADER_MAGIC;
+ vk_object_base_init(&device->vk, &queue->base, VK_OBJECT_TYPE_QUEUE);
queue->device = device;
queue->flags = 0;
@@ -393,6 +393,7 @@ anv_queue_init(struct anv_device *device, struct anv_queue *queue)
void
anv_queue_finish(struct anv_queue *queue)
{
+ vk_object_base_finish(&queue->base);
}
static VkResult
@@ -1105,6 +1106,8 @@ VkResult anv_CreateFence(
if (fence == NULL)
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
+ vk_object_base_init(&device->vk, &fence->base, VK_OBJECT_TYPE_FENCE);
+
if (device->physical->has_syncobj_wait) {
fence->permanent.type = ANV_FENCE_TYPE_SYNCOBJ;
@@ -1191,6 +1194,7 @@ void anv_DestroyFence(
anv_fence_impl_cleanup(device, &fence->temporary);
anv_fence_impl_cleanup(device, &fence->permanent);
+ vk_object_base_finish(&fence->base);
vk_free2(&device->vk.alloc, pAllocator, fence);
}
@@ -1787,6 +1791,8 @@ VkResult anv_CreateSemaphore(
if (semaphore == NULL)
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
+ vk_object_base_init(&device->vk, &semaphore->base, VK_OBJECT_TYPE_SEMAPHORE);
+
p_atomic_set(&semaphore->refcount, 1);
const VkExportSemaphoreCreateInfo *export =
@@ -1900,6 +1906,8 @@ anv_semaphore_unref(struct anv_device *device, struct anv_semaphore *semaphore)
anv_semaphore_impl_cleanup(device, &semaphore->temporary);
anv_semaphore_impl_cleanup(device, &semaphore->permanent);
+
+ vk_object_base_finish(&semaphore->base);
vk_free(&device->vk.alloc, semaphore);
}
diff --git a/src/intel/vulkan/genX_pipeline.c b/src/intel/vulkan/genX_pipeline.c
index 82d6793e66a..f3f9333cc76 100644
--- a/src/intel/vulkan/genX_pipeline.c
+++ b/src/intel/vulkan/genX_pipeline.c
@@ -2279,6 +2279,8 @@ compute_pipeline_create(
if (pipeline == NULL)
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
+ vk_object_base_init(&device->vk, &pipeline->base.base,
+ VK_OBJECT_TYPE_PIPELINE);
pipeline->base.device = device;
pipeline->base.type = ANV_PIPELINE_COMPUTE;
diff --git a/src/intel/vulkan/genX_query.c b/src/intel/vulkan/genX_query.c
index d5d6d6e2f91..c5009445d38 100644
--- a/src/intel/vulkan/genX_query.c
+++ b/src/intel/vulkan/genX_query.c
@@ -106,6 +106,7 @@ VkResult genX(CreateQueryPool)(
if (pool == NULL)
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
+ vk_object_base_init(&device->vk, &pool->base, VK_OBJECT_TYPE_QUERY_POOL);
pool->type = pCreateInfo->queryType;
pool->pipeline_statistics = pipeline_statistics;
pool->stride = uint64s_per_slot * sizeof(uint64_t);
@@ -152,6 +153,7 @@ void genX(DestroyQueryPool)(
return;
anv_device_release_bo(device, pool->bo);
+ vk_object_base_finish(&pool->base);
vk_free2(&device->vk.alloc, pAllocator, pool);
}
diff --git a/src/intel/vulkan/genX_state.c b/src/intel/vulkan/genX_state.c
index fd87954d100..ea953b7842b 100644
--- a/src/intel/vulkan/genX_state.c
+++ b/src/intel/vulkan/genX_state.c
@@ -363,6 +363,7 @@ VkResult genX(CreateSampler)(
if (!sampler)
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
+ vk_object_base_init(&device->vk, &sampler->base, VK_OBJECT_TYPE_SAMPLER);
sampler->n_planes = 1;
uint32_t border_color_stride = GEN_IS_HASWELL ? 512 : 64;