anv/image: Fix choose_isl_surf_usage()

Don't translate VkImageCreateInfo::usage into an isl_surf_usage bitmask.
Instead, translate anv_image::usage, which is a superset of
VkImageCreateInfo::usage.

For-Issue: https://gitlab.khronos.org/vulkan/mesa/issues/26
This commit is contained in:
Chad Versace 2016-02-09 12:35:39 -08:00
parent bdab29a312
commit 2f4bb00c2b

View file

@ -34,28 +34,27 @@
* anv_image_create_info. Exactly one bit must be set in \a aspect.
*/
static isl_surf_usage_flags_t
choose_isl_surf_usage(const struct anv_image_create_info *info,
choose_isl_surf_usage(VkImageUsageFlags vk_usage,
VkImageAspectFlags aspect)
{
const VkImageCreateInfo *vk_info = info->vk_info;
isl_surf_usage_flags_t isl_flags = 0;
/* FINISHME: Support aux surfaces */
isl_flags |= ISL_SURF_USAGE_DISABLE_AUX_BIT;
if (vk_info->usage & VK_IMAGE_USAGE_SAMPLED_BIT)
if (vk_usage & VK_IMAGE_USAGE_SAMPLED_BIT)
isl_flags |= ISL_SURF_USAGE_TEXTURE_BIT;
if (vk_info->usage & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)
if (vk_usage & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)
isl_flags |= ISL_SURF_USAGE_TEXTURE_BIT;
if (vk_info->usage & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
if (vk_usage & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
isl_flags |= ISL_SURF_USAGE_RENDER_TARGET_BIT;
if (vk_info->flags & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
if (vk_usage & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
isl_flags |= ISL_SURF_USAGE_CUBE_BIT;
if (vk_info->usage & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT) {
if (vk_usage & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT) {
switch (aspect) {
default:
unreachable("bad VkImageAspect");
@ -68,12 +67,12 @@ choose_isl_surf_usage(const struct anv_image_create_info *info,
}
}
if (vk_info->usage & VK_IMAGE_USAGE_TRANSFER_SRC_BIT) {
if (vk_usage & VK_IMAGE_USAGE_TRANSFER_SRC_BIT) {
/* Meta implements transfers by sampling from the source image. */
isl_flags |= ISL_SURF_USAGE_TEXTURE_BIT;
}
if (vk_info->usage & VK_IMAGE_USAGE_TRANSFER_DST_BIT) {
if (vk_usage & VK_IMAGE_USAGE_TRANSFER_DST_BIT) {
/* Meta implements transfers by rendering into the destination image. */
isl_flags |= ISL_SURF_USAGE_RENDER_TARGET_BIT;
}
@ -138,7 +137,7 @@ make_surface(const struct anv_device *dev,
.samples = vk_info->samples,
.min_alignment = 0,
.min_pitch = 0,
.usage = choose_isl_surf_usage(anv_info, aspect),
.usage = choose_isl_surf_usage(image->usage, aspect),
.tiling_flags = tiling_flags);
/* isl_surf_init() will fail only if provided invalid input. Invalid input