Commit 911b85f8 by Alexis Hetu Committed by Alexis Hétu

Image type and view type compatibility check fix

Fixed ImageView::imageTypesMatch() according to the Vulkan Spec, Section 11.5. Image Views, Table 15. Image and image view parameter compatibility requirements. Also allowed already supported mip level parameters to be used in the clear function. Bug b/119620767 Tests: dEQP-VK.pipeline.render_to_image.core.cube.* Change-Id: I4785c4594ba82f8e97b40aaddce8c950d255c846 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/28748 Presubmit-Ready: Alexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <nicolascapens@google.com> Tested-by: 's avatarAlexis Hétu <sugoi@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
parent e5e33cdc
...@@ -669,12 +669,6 @@ uint32_t Image::getLastMipLevel(const VkImageSubresourceRange& subresourceRange) ...@@ -669,12 +669,6 @@ uint32_t Image::getLastMipLevel(const VkImageSubresourceRange& subresourceRange)
void Image::clear(void* pixelData, VkFormat pixelFormat, const vk::Format& viewFormat, const VkImageSubresourceRange& subresourceRange, const VkRect2D& renderArea) void Image::clear(void* pixelData, VkFormat pixelFormat, const vk::Format& viewFormat, const VkImageSubresourceRange& subresourceRange, const VkRect2D& renderArea)
{ {
if((subresourceRange.baseMipLevel != 0) ||
(subresourceRange.levelCount != 1))
{
UNIMPLEMENTED("subresourceRange");
}
device->getBlitter()->clear(pixelData, pixelFormat, this, viewFormat, subresourceRange, &renderArea); device->getBlitter()->clear(pixelData, pixelFormat, this, viewFormat, subresourceRange, &renderArea);
} }
...@@ -715,9 +709,7 @@ void Image::clear(const VkClearValue& clearValue, const vk::Format& viewFormat, ...@@ -715,9 +709,7 @@ void Image::clear(const VkClearValue& clearValue, const vk::Format& viewFormat,
{ {
if(!((subresourceRange.aspectMask == VK_IMAGE_ASPECT_COLOR_BIT) || if(!((subresourceRange.aspectMask == VK_IMAGE_ASPECT_COLOR_BIT) ||
(subresourceRange.aspectMask & (VK_IMAGE_ASPECT_DEPTH_BIT | (subresourceRange.aspectMask & (VK_IMAGE_ASPECT_DEPTH_BIT |
VK_IMAGE_ASPECT_STENCIL_BIT))) || VK_IMAGE_ASPECT_STENCIL_BIT))))
(subresourceRange.baseMipLevel != 0) ||
(subresourceRange.levelCount != 1))
{ {
UNIMPLEMENTED("subresourceRange"); UNIMPLEMENTED("subresourceRange");
} }
......
// Copyright 2018 The SwiftShader Authors. All Rights Reserved. // Copyright 2018 The SwiftShader Authors. All Rights Reserved.
// //
// Licensed under the Apache License, Version 2.0 (the "License"); // Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License. // you may not use this file except in compliance with the License.
...@@ -35,44 +35,38 @@ void ImageView::destroy(const VkAllocationCallbacks* pAllocator) ...@@ -35,44 +35,38 @@ void ImageView::destroy(const VkAllocationCallbacks* pAllocator)
bool ImageView::imageTypesMatch(VkImageType imageType) const bool ImageView::imageTypesMatch(VkImageType imageType) const
{ {
bool isCube = image->isCube(); uint32_t imageArrayLayers = image->getArrayLayers();
switch(imageType) switch(viewType)
{ {
case VK_IMAGE_TYPE_1D: case VK_IMAGE_VIEW_TYPE_1D:
switch(viewType) return (imageType == VK_IMAGE_TYPE_1D) &&
{ (subresourceRange.layerCount == 1);
case VK_IMAGE_VIEW_TYPE_1D: case VK_IMAGE_VIEW_TYPE_1D_ARRAY:
case VK_IMAGE_VIEW_TYPE_1D_ARRAY: return imageType == VK_IMAGE_TYPE_1D;
return true; case VK_IMAGE_VIEW_TYPE_2D:
default: return ((imageType == VK_IMAGE_TYPE_2D) ||
break; ((imageType == VK_IMAGE_TYPE_3D) &&
} (imageArrayLayers == 1))) &&
break; (subresourceRange.layerCount == 1);
case VK_IMAGE_TYPE_2D: case VK_IMAGE_VIEW_TYPE_2D_ARRAY:
switch(viewType) return (imageType == VK_IMAGE_TYPE_2D) ||
{ ((imageType == VK_IMAGE_TYPE_3D) &&
case VK_IMAGE_VIEW_TYPE_2D: (imageArrayLayers == 1));
case VK_IMAGE_VIEW_TYPE_2D_ARRAY: case VK_IMAGE_VIEW_TYPE_CUBE:
return !isCube; return image->isCube() &&
case VK_IMAGE_VIEW_TYPE_CUBE: (imageArrayLayers >= subresourceRange.layerCount) &&
case VK_IMAGE_VIEW_TYPE_CUBE_ARRAY: (subresourceRange.layerCount == 6);
return isCube; case VK_IMAGE_VIEW_TYPE_CUBE_ARRAY:
default: return image->isCube() &&
break; (imageArrayLayers >= subresourceRange.layerCount) &&
} (subresourceRange.layerCount >= 6);
break; case VK_IMAGE_VIEW_TYPE_3D:
case VK_IMAGE_TYPE_3D: return (imageType == VK_IMAGE_TYPE_3D) &&
switch(viewType) (imageArrayLayers == 1) &&
{ (subresourceRange.layerCount == 1);
case VK_IMAGE_VIEW_TYPE_3D:
return true;
default:
break;
}
break;
default: default:
break; UNREACHABLE("Unexpected viewType %d", (int)viewType);
} }
return false; return false;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment