From 53969722e24e7872417bad7ed5d89f05975b786a Mon Sep 17 00:00:00 2001 From: Andrew Fobel Date: Thu, 19 Jan 2023 19:54:39 -0500 Subject: [PATCH] Fix BufferView access tests for scaled types The way in which these tests were written assumes the input and output to the shaders are of the same type; however, for scaled types they are converted from integral to floating point before being processed in the shader. This change corrects that issue as well as adds the two missing scaled types to the framework. Affected tests: dEQP-VK.api.buffer_view.access.uniform_texel_buffer.* VK-GL-CTS Issue: 4239 Components: Vulkan Change-Id: I84f904648c6f2cf301111250dba28feabf782788 (cherry picked from commit 9145d71d6f8461c23af15ae09d8e846279270f44) --- .../vulkancts/framework/vulkan/vkImageUtil.cpp | 78 +++++++++++----------- .../vulkancts/framework/vulkan/vkImageUtil.hpp | 1 + .../vulkan/api/vktApiBufferViewAccessTests.cpp | 11 +-- 3 files changed, 47 insertions(+), 43 deletions(-) diff --git a/external/vulkancts/framework/vulkan/vkImageUtil.cpp b/external/vulkancts/framework/vulkan/vkImageUtil.cpp index 3fcbeeb..52f3df4 100644 --- a/external/vulkancts/framework/vulkan/vkImageUtil.cpp +++ b/external/vulkancts/framework/vulkan/vkImageUtil.cpp @@ -64,6 +64,46 @@ bool isUintFormat (VkFormat format) return tcu::getTextureChannelClass(mapVkFormat(format).type) == tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER; } +bool isScaledFormat (VkFormat format) +{ + // update this mapping if VkFormat changes + DE_STATIC_ASSERT(VK_CORE_FORMAT_LAST == 185); + + switch (format) + { + case VK_FORMAT_R8_USCALED: + case VK_FORMAT_R8_SSCALED: + case VK_FORMAT_R8G8_USCALED: + case VK_FORMAT_R8G8_SSCALED: + case VK_FORMAT_R8G8B8_USCALED: + case VK_FORMAT_R8G8B8_SSCALED: + case VK_FORMAT_R8G8B8A8_USCALED: + case VK_FORMAT_R8G8B8A8_SSCALED: + case VK_FORMAT_A2B10G10R10_USCALED_PACK32: + case VK_FORMAT_A2B10G10R10_SSCALED_PACK32: + case VK_FORMAT_R16_USCALED: + case VK_FORMAT_R16_SSCALED: + case VK_FORMAT_R16G16_USCALED: + case VK_FORMAT_R16G16_SSCALED: + case VK_FORMAT_R16G16B16_USCALED: + case VK_FORMAT_R16G16B16_SSCALED: + case VK_FORMAT_R16G16B16A16_USCALED: + case VK_FORMAT_R16G16B16A16_SSCALED: + case VK_FORMAT_B8G8R8_USCALED: + case VK_FORMAT_B8G8R8_SSCALED: + case VK_FORMAT_B8G8R8A8_USCALED: + case VK_FORMAT_B8G8R8A8_SSCALED: + case VK_FORMAT_A2R10G10B10_USCALED_PACK32: + case VK_FORMAT_A2R10G10B10_SSCALED_PACK32: + case VK_FORMAT_A8B8G8R8_USCALED_PACK32: + case VK_FORMAT_A8B8G8R8_SSCALED_PACK32: + return true; + + default: + return false; + } +} + bool isDepthStencilFormat (VkFormat format) { if (isCompressedFormat(format)) @@ -3276,44 +3316,6 @@ tcu::CompressedTexFormat mapVkCompressedFormat (VkFormat format) } } -static bool isScaledFormat (VkFormat format) -{ - // update this mapping if VkFormat changes - DE_STATIC_ASSERT(VK_CORE_FORMAT_LAST == 185); - - switch (format) - { - case VK_FORMAT_R8_USCALED: - case VK_FORMAT_R8_SSCALED: - case VK_FORMAT_R8G8_USCALED: - case VK_FORMAT_R8G8_SSCALED: - case VK_FORMAT_R8G8B8_USCALED: - case VK_FORMAT_R8G8B8_SSCALED: - case VK_FORMAT_R8G8B8A8_USCALED: - case VK_FORMAT_R8G8B8A8_SSCALED: - case VK_FORMAT_A2B10G10R10_USCALED_PACK32: - case VK_FORMAT_A2B10G10R10_SSCALED_PACK32: - case VK_FORMAT_R16_USCALED: - case VK_FORMAT_R16_SSCALED: - case VK_FORMAT_R16G16_USCALED: - case VK_FORMAT_R16G16_SSCALED: - case VK_FORMAT_R16G16B16_USCALED: - case VK_FORMAT_R16G16B16_SSCALED: - case VK_FORMAT_R16G16B16A16_USCALED: - case VK_FORMAT_R16G16B16A16_SSCALED: - case VK_FORMAT_B8G8R8_USCALED: - case VK_FORMAT_B8G8R8_SSCALED: - case VK_FORMAT_B8G8R8A8_USCALED: - case VK_FORMAT_B8G8R8A8_SSCALED: - case VK_FORMAT_A2R10G10B10_USCALED_PACK32: - case VK_FORMAT_A2R10G10B10_SSCALED_PACK32: - return true; - - default: - return false; - } -} - static bool fullTextureFormatRoundTripSupported (VkFormat format) { if (isScaledFormat(format)) diff --git a/external/vulkancts/framework/vulkan/vkImageUtil.hpp b/external/vulkancts/framework/vulkan/vkImageUtil.hpp index 1124193..1b4106c 100644 --- a/external/vulkancts/framework/vulkan/vkImageUtil.hpp +++ b/external/vulkancts/framework/vulkan/vkImageUtil.hpp @@ -45,6 +45,7 @@ bool isUnormFormat (VkFormat format); bool isSnormFormat (VkFormat format); bool isIntFormat (VkFormat format); bool isUintFormat (VkFormat format); +bool isScaledFormat (VkFormat format); bool isDepthStencilFormat (VkFormat format); bool isCompressedFormat (VkFormat format); bool isSrgbFormat (VkFormat format); diff --git a/external/vulkancts/modules/vulkan/api/vktApiBufferViewAccessTests.cpp b/external/vulkancts/modules/vulkan/api/vktApiBufferViewAccessTests.cpp index 39b4f0a..7427d8f 100644 --- a/external/vulkancts/modules/vulkan/api/vktApiBufferViewAccessTests.cpp +++ b/external/vulkancts/modules/vulkan/api/vktApiBufferViewAccessTests.cpp @@ -1011,11 +1011,12 @@ void BufferViewAllFormatsTestCase::initPrograms (SourceCollections& prog const char* const fmtLayout = isUniform ? "" : stringFmtLayout.c_str(); const char* const opName = isUniform ? "texelFetch" : "imageLoad"; const char* const outFormat = isIntFmt ? "i" : isUintFmt ? "u" : ""; + const char* const inFormat = vk::isScaledFormat(m_bufferViewTestInfo.format)? "" : outFormat; buf << "#version 440\n" << "#extension GL_EXT_texture_buffer : require\n" << "layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;\n" - << "layout(set = 0, binding = 1" << fmtLayout << ") uniform highp " << extraOption << outFormat << storageType << " texelBuffer;\n" + << "layout(set = 0, binding = 1" << fmtLayout << ") uniform highp " << extraOption << inFormat << storageType << " texelBuffer;\n" << "layout(set = 0, binding = 0, std140) writeonly buffer OutBuf\n" << "{\n" << " highp " << outFormat << "vec4 read_colors[4];\n" @@ -1026,13 +1027,13 @@ void BufferViewAllFormatsTestCase::initPrograms (SourceCollections& prog << " highp " << outFormat << "vec4 result_color;\n" << " result_color = " << outFormat << "vec4(0);\n" << " if (quadrant_id == 0)\n" - << " result_color += " << opName << "(texelBuffer, 6);\n" + << " result_color += " << outFormat << "vec4(" << opName << "(texelBuffer, 6));\n" << " else if (quadrant_id == 1)\n" - << " result_color += " << opName << "(texelBuffer, 51);\n" + << " result_color += " << outFormat << "vec4(" << opName << "(texelBuffer, 51));\n" << " else if (quadrant_id == 2)\n" - << " result_color += " << opName << "(texelBuffer, 42);\n" + << " result_color += " << outFormat << "vec4(" << opName << "(texelBuffer, 42));\n" << " else\n" - << " result_color += " << opName << "(texelBuffer, 25);\n" + << " result_color += " << outFormat << "vec4(" << opName << "(texelBuffer, 25));\n" << " b_out.read_colors[gl_WorkGroupID.x] = result_color;\n" << "}\n"; -- 2.7.4