diff options
author | Jason Ekstrand <[email protected]> | 2016-10-07 22:14:03 -0700 |
---|---|---|
committer | Jason Ekstrand <[email protected]> | 2016-10-14 15:40:39 -0700 |
commit | 69b2e931d49ff0d0cac1aa39753a447c6d2c059a (patch) | |
tree | d7baaa38091429b9274316fb1cf86a2ab9cb1e50 | |
parent | 0a2c375af95953e5d36da243457f40d458077f50 (diff) |
anv/image: Create views directly in VkCreate*View
Without meta, we no longer need the _init helpers and the ability to back
an image view with surface states allocated out of the command buffer.
Signed-off-by: Jason Ekstrand <[email protected]>
-rw-r--r-- | src/intel/vulkan/anv_image.c | 90 | ||||
-rw-r--r-- | src/intel/vulkan/anv_private.h | 10 |
2 files changed, 34 insertions, 66 deletions
diff --git a/src/intel/vulkan/anv_image.c b/src/intel/vulkan/anv_image.c index c5b0f1c343c..6237551a1b7 100644 --- a/src/intel/vulkan/anv_image.c +++ b/src/intel/vulkan/anv_image.c @@ -376,14 +376,9 @@ void anv_GetImageSubresourceLayout( } static struct anv_state -alloc_surface_state(struct anv_device *device, - struct anv_cmd_buffer *cmd_buffer) +alloc_surface_state(struct anv_device *device) { - if (cmd_buffer) { - return anv_cmd_buffer_alloc_surface_state(cmd_buffer); - } else { - return anv_state_pool_alloc(&device->surface_state_pool, 64, 64); - } + return anv_state_pool_alloc(&device->surface_state_pool, 64, 64); } static enum isl_channel_select @@ -405,13 +400,22 @@ remap_swizzle(VkComponentSwizzle swizzle, VkComponentSwizzle component, } } -void -anv_image_view_init(struct anv_image_view *iview, - struct anv_device *device, - const VkImageViewCreateInfo* pCreateInfo, - struct anv_cmd_buffer *cmd_buffer) + +VkResult +anv_CreateImageView(VkDevice _device, + const VkImageViewCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkImageView *pView) { + ANV_FROM_HANDLE(anv_device, device, _device); ANV_FROM_HANDLE(anv_image, image, pCreateInfo->image); + struct anv_image_view *iview; + + iview = anv_alloc2(&device->alloc, pAllocator, sizeof(*iview), 8, + VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); + if (iview == NULL) + return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY); + const VkImageSubresourceRange *range = &pCreateInfo->subresourceRange; assert(range->layerCount > 0); @@ -484,7 +488,7 @@ anv_image_view_init(struct anv_image_view *iview, } if (image->usage & VK_IMAGE_USAGE_SAMPLED_BIT) { - iview->sampler_surface_state = alloc_surface_state(device, cmd_buffer); + iview->sampler_surface_state = alloc_surface_state(device); struct isl_view view = iview->isl; view.usage |= ISL_SURF_USAGE_TEXTURE_BIT; @@ -501,7 +505,7 @@ anv_image_view_init(struct anv_image_view *iview, } if (image->usage & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) { - iview->color_rt_surface_state = alloc_surface_state(device, cmd_buffer); + iview->color_rt_surface_state = alloc_surface_state(device); struct isl_view view = iview->isl; view.usage |= ISL_SURF_USAGE_RENDER_TARGET_BIT; @@ -519,7 +523,7 @@ anv_image_view_init(struct anv_image_view *iview, /* NOTE: This one needs to go last since it may stomp isl_view.format */ if (image->usage & VK_IMAGE_USAGE_STORAGE_BIT) { - iview->storage_surface_state = alloc_surface_state(device, cmd_buffer); + iview->storage_surface_state = alloc_surface_state(device); if (isl_has_matching_typed_storage_image_format(&device->info, format.isl_format)) { @@ -548,25 +552,8 @@ anv_image_view_init(struct anv_image_view *iview, } else { iview->storage_surface_state.alloc_size = 0; } -} - -VkResult -anv_CreateImageView(VkDevice _device, - const VkImageViewCreateInfo *pCreateInfo, - const VkAllocationCallbacks *pAllocator, - VkImageView *pView) -{ - ANV_FROM_HANDLE(anv_device, device, _device); - struct anv_image_view *view; - - view = anv_alloc2(&device->alloc, pAllocator, sizeof(*view), 8, - VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); - if (view == NULL) - return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY); - - anv_image_view_init(view, device, pCreateInfo, NULL); - *pView = anv_image_view_to_handle(view); + *pView = anv_image_view_to_handle(iview); return VK_SUCCESS; } @@ -597,12 +584,20 @@ anv_DestroyImageView(VkDevice _device, VkImageView _iview, } -void anv_buffer_view_init(struct anv_buffer_view *view, - struct anv_device *device, - const VkBufferViewCreateInfo* pCreateInfo, - struct anv_cmd_buffer *cmd_buffer) +VkResult +anv_CreateBufferView(VkDevice _device, + const VkBufferViewCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkBufferView *pView) { + ANV_FROM_HANDLE(anv_device, device, _device); ANV_FROM_HANDLE(anv_buffer, buffer, pCreateInfo->buffer); + struct anv_buffer_view *view; + + view = anv_alloc2(&device->alloc, pAllocator, sizeof(*view), 8, + VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); + if (!view) + return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY); /* TODO: Handle the format swizzle? */ @@ -617,7 +612,7 @@ void anv_buffer_view_init(struct anv_buffer_view *view, view->range = align_down_npot_u32(view->range, format_bs); if (buffer->usage & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT) { - view->surface_state = alloc_surface_state(device, cmd_buffer); + view->surface_state = alloc_surface_state(device); anv_fill_buffer_surface_state(device, view->surface_state, view->format, @@ -627,7 +622,7 @@ void anv_buffer_view_init(struct anv_buffer_view *view, } if (buffer->usage & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT) { - view->storage_surface_state = alloc_surface_state(device, cmd_buffer); + view->storage_surface_state = alloc_surface_state(device); enum isl_format storage_format = isl_has_matching_typed_storage_image_format(&device->info, @@ -647,23 +642,6 @@ void anv_buffer_view_init(struct anv_buffer_view *view, } else { view->storage_surface_state = (struct anv_state){ 0 }; } -} - -VkResult -anv_CreateBufferView(VkDevice _device, - const VkBufferViewCreateInfo *pCreateInfo, - const VkAllocationCallbacks *pAllocator, - VkBufferView *pView) -{ - ANV_FROM_HANDLE(anv_device, device, _device); - struct anv_buffer_view *view; - - view = anv_alloc2(&device->alloc, pAllocator, sizeof(*view), 8, - VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); - if (!view) - return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY); - - anv_buffer_view_init(view, device, pCreateInfo, NULL); *pView = anv_buffer_view_to_handle(view); diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index 1e391672d68..c9d102d4e1a 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -1669,11 +1669,6 @@ anv_image_has_hiz(const struct anv_image *image) image->hiz_surface.isl.size > 0; } -void anv_image_view_init(struct anv_image_view *view, - struct anv_device *device, - const VkImageViewCreateInfo* pCreateInfo, - struct anv_cmd_buffer *cmd_buffer); - struct anv_buffer_view { enum isl_format format; /**< VkBufferViewCreateInfo::format */ struct anv_bo *bo; @@ -1686,11 +1681,6 @@ struct anv_buffer_view { struct brw_image_param storage_image_param; }; -void anv_buffer_view_init(struct anv_buffer_view *view, - struct anv_device *device, - const VkBufferViewCreateInfo* pCreateInfo, - struct anv_cmd_buffer *cmd_buffer); - enum isl_format anv_isl_format_for_descriptor_type(VkDescriptorType type); |