vk/surface_view: Add a destructor

This commit is contained in:
Jason Ekstrand
2015-06-09 11:08:03 -07:00
parent e6162c2fef
commit 9d6f55dedf
3 changed files with 29 additions and 3 deletions

View File

@@ -1080,10 +1080,7 @@ VkResult anv_DestroyObject(
return VK_SUCCESS; return VK_SUCCESS;
case VK_OBJECT_TYPE_BUFFER: case VK_OBJECT_TYPE_BUFFER:
case VK_OBJECT_TYPE_BUFFER_VIEW:
case VK_OBJECT_TYPE_IMAGE: case VK_OBJECT_TYPE_IMAGE:
case VK_OBJECT_TYPE_IMAGE_VIEW:
case VK_OBJECT_TYPE_COLOR_ATTACHMENT_VIEW:
case VK_OBJECT_TYPE_DEPTH_STENCIL_VIEW: case VK_OBJECT_TYPE_DEPTH_STENCIL_VIEW:
case VK_OBJECT_TYPE_SHADER: case VK_OBJECT_TYPE_SHADER:
case VK_OBJECT_TYPE_PIPELINE_LAYOUT: case VK_OBJECT_TYPE_PIPELINE_LAYOUT:
@@ -1104,6 +1101,9 @@ VkResult anv_DestroyObject(
case VK_OBJECT_TYPE_FENCE: case VK_OBJECT_TYPE_FENCE:
case VK_OBJECT_TYPE_QUERY_POOL: case VK_OBJECT_TYPE_QUERY_POOL:
case VK_OBJECT_TYPE_FRAMEBUFFER: case VK_OBJECT_TYPE_FRAMEBUFFER:
case VK_OBJECT_TYPE_BUFFER_VIEW:
case VK_OBJECT_TYPE_IMAGE_VIEW:
case VK_OBJECT_TYPE_COLOR_ATTACHMENT_VIEW:
(object->destructor)(device, object, objType); (object->destructor)(device, object, objType);
return VK_SUCCESS; return VK_SUCCESS;
@@ -1542,6 +1542,8 @@ VkResult anv_CreateBufferView(
if (view == NULL) if (view == NULL)
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY); return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
view->base.destructor = anv_surface_view_destroy;
view->bo = buffer->bo; view->bo = buffer->bo;
view->offset = buffer->offset + pCreateInfo->offset; view->offset = buffer->offset + pCreateInfo->offset;
view->surface_state = view->surface_state =

View File

@@ -162,6 +162,21 @@ VkResult anv_GetImageSubresourceInfo(
stub_return(VK_UNSUPPORTED); stub_return(VK_UNSUPPORTED);
} }
void
anv_surface_view_destroy(struct anv_device *device,
struct anv_object *obj, VkObjectType obj_type)
{
struct anv_surface_view *view = (struct anv_surface_view *)obj;
assert(obj_type == VK_OBJECT_TYPE_BUFFER_VIEW ||
obj_type == VK_OBJECT_TYPE_IMAGE_VIEW ||
obj_type == VK_OBJECT_TYPE_COLOR_ATTACHMENT_VIEW);
anv_state_pool_free(&device->surface_state_pool, view->surface_state);
anv_device_free(device, view);
}
void void
anv_image_view_init(struct anv_surface_view *view, anv_image_view_init(struct anv_surface_view *view,
struct anv_device *device, struct anv_device *device,
@@ -268,6 +283,8 @@ VkResult anv_CreateImageView(
anv_image_view_init(view, device, pCreateInfo, NULL); anv_image_view_init(view, device, pCreateInfo, NULL);
view->base.destructor = anv_surface_view_destroy;
*pView = (VkImageView) view; *pView = (VkImageView) view;
return VK_SUCCESS; return VK_SUCCESS;
@@ -352,6 +369,8 @@ VkResult anv_CreateColorAttachmentView(
anv_color_attachment_view_init(view, device, pCreateInfo, NULL); anv_color_attachment_view_init(view, device, pCreateInfo, NULL);
view->base.destructor = anv_surface_view_destroy;
*pView = (VkColorAttachmentView) view; *pView = (VkColorAttachmentView) view;
return VK_SUCCESS; return VK_SUCCESS;

View File

@@ -756,6 +756,8 @@ struct anv_image {
}; };
struct anv_surface_view { struct anv_surface_view {
struct anv_object base;
struct anv_state surface_state; struct anv_state surface_state;
struct anv_bo * bo; struct anv_bo * bo;
uint32_t offset; uint32_t offset;
@@ -783,6 +785,9 @@ void anv_color_attachment_view_init(struct anv_surface_view *view,
const VkColorAttachmentViewCreateInfo* pCreateInfo, const VkColorAttachmentViewCreateInfo* pCreateInfo,
struct anv_cmd_buffer *cmd_buffer); struct anv_cmd_buffer *cmd_buffer);
void anv_surface_view_destroy(struct anv_device *device,
struct anv_object *obj, VkObjectType obj_type);
struct anv_sampler { struct anv_sampler {
uint32_t state[4]; uint32_t state[4];
}; };