vk/image: Simplify stencil case for anv_image_create()

Stop creating a temporary VkImageCreateInfo with overriden
format=VK_FORMAT_S8_UINT. Instead, just pass the format override
directly to anv_image_make_surface().
This commit is contained in:
Chad Versace 2015-08-17 13:50:43 -07:00
parent a9c36daa83
commit 5a6b2e6df0

View file

@ -123,8 +123,14 @@ anv_image_choose_tile_mode(const struct anv_image_create_info *anv_info)
}
}
/**
* The \a format argument is required and overrides any format in
* struct anv_image_create_info.
*/
static VkResult
anv_image_make_surface(const struct anv_image_create_info *create_info,
const struct anv_format *format,
uint64_t *inout_image_size,
uint32_t *inout_image_alignment,
struct anv_surface *out_surface)
@ -142,9 +148,6 @@ anv_image_make_surface(const struct anv_image_create_info *create_info,
const struct anv_tile_info *tile_info =
&anv_tile_info_table[tile_mode];
const struct anv_format *format_info =
anv_format_for_vk_format(create_info->vk_info->format);
const uint32_t i = 4; /* FINISHME: Stop hardcoding subimage alignment */
const uint32_t j = 4; /* FINISHME: Stop hardcoding subimage alignment */
const uint32_t w0 = align_u32(extent->width, i);
@ -181,7 +184,7 @@ anv_image_make_surface(const struct anv_image_create_info *create_info,
*/
assert(anv_is_aligned(qpitch, j));
uint32_t stride = align_u32(mt_width * format_info->cpp, tile_info->width);
uint32_t stride = align_u32(mt_width * format->cpp, tile_info->width);
if (create_info->stride > 0)
stride = create_info->stride;
@ -257,7 +260,8 @@ anv_image_create(VkDevice _device,
if (likely(!image->format->has_stencil || image->format->depth_format)) {
/* The image's primary surface is a color or depth surface. */
r = anv_image_make_surface(create_info, &image->size, &image->alignment,
r = anv_image_make_surface(create_info, image->format,
&image->size, &image->alignment,
&image->primary_surface);
if (r != VK_SUCCESS)
goto fail;
@ -269,15 +273,9 @@ anv_image_create(VkDevice _device,
* stencil reside in the same image. To satisfy Vulkan and the GPU, we
* place the depth and stencil buffers in the same bo.
*/
VkImageCreateInfo stencil_info = *pCreateInfo;
stencil_info.format = VK_FORMAT_S8_UINT;
r = anv_image_make_surface(
&(struct anv_image_create_info) {
.vk_info = &stencil_info,
},
&image->size, &image->alignment, &image->stencil_surface);
r = anv_image_make_surface(create_info, anv_format_s8_uint,
&image->size, &image->alignment,
&image->stencil_surface);
if (r != VK_SUCCESS)
goto fail;
}