diff --git a/src/gallium/drivers/zink/zink_resource.c b/src/gallium/drivers/zink/zink_resource.c index 8d3abdcc411..4abea44c708 100644 --- a/src/gallium/drivers/zink/zink_resource.c +++ b/src/gallium/drivers/zink/zink_resource.c @@ -331,8 +331,6 @@ create_ici(struct zink_screen *screen, const struct pipe_resource *templ, unsign case PIPE_TEXTURE_CUBE: case PIPE_TEXTURE_CUBE_ARRAY: - ici.flags |= VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT; - FALLTHROUGH; case PIPE_TEXTURE_2D: case PIPE_TEXTURE_2D_ARRAY: case PIPE_TEXTURE_RECT: @@ -385,6 +383,19 @@ create_ici(struct zink_screen *screen, const struct pipe_resource *templ, unsign if (!good) debug_printf("ZINK: failed to validate image creation\n"); + if (templ->target == PIPE_TEXTURE_CUBE || + templ->target == PIPE_TEXTURE_CUBE_ARRAY) { + VkImageFormatProperties props; + if (vkGetPhysicalDeviceImageFormatProperties(screen->pdev, ici.format, + ici.imageType, ici.tiling, + ici.usage, ici.flags | + VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, + &props) == VK_SUCCESS) { + if (props.sampleCounts & ici.samples) + ici.flags |= VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT; + } + } + ici.sharingMode = VK_SHARING_MODE_EXCLUSIVE; ici.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; return ici;