v3dv: fix textureSize() for cube arrays

For these we want to divide the number of layers by 6.

Fixes:
dEQP-VK.glsl.texture_functions.query.texturesize.*samplercubearray*

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6766>
This commit is contained in:
Iago Toral Quiroga
2020-06-30 10:44:43 +02:00
committed by Marge Bot
parent b6c2fde4b9
commit 6053e85ee4
3 changed files with 8 additions and 1 deletions

View File

@@ -568,6 +568,7 @@ v3dv_CreateImageView(VkDevice _device,
iview->image = image;
iview->aspects = range->aspectMask;
iview->type = pCreateInfo->viewType;
iview->base_level = range->baseMipLevel;
iview->max_level = iview->base_level + v3dv_level_count(image, range) - 1;

View File

@@ -418,6 +418,7 @@ struct v3dv_image_view {
const struct v3dv_image *image;
VkImageAspectFlags aspects;
VkExtent3D extent;
VkImageViewType type;
VkFormat vk_format;
const struct v3dv_format *format;

View File

@@ -248,7 +248,12 @@ get_texture_size(struct v3dv_cmd_buffer *cmd_buffer,
return image_view->extent.depth;
case QUNIFORM_IMAGE_ARRAY_SIZE:
case QUNIFORM_TEXTURE_ARRAY_SIZE:
return image_view->last_layer - image_view->first_layer + 1;
if (image_view->type != VK_IMAGE_VIEW_TYPE_CUBE_ARRAY) {
return image_view->last_layer - image_view->first_layer + 1;
} else {
assert((image_view->last_layer - image_view->first_layer + 1) % 6 == 0);
return (image_view->last_layer - image_view->first_layer + 1) / 6;
}
case QUNIFORM_TEXTURE_LEVELS:
return image_view->max_level - image_view->base_level + 1;
default: