From cca468dd4a46bb3cf2c15972de9ba6f2b18a5cf7 Mon Sep 17 00:00:00 2001 From: Ari Suonpaa Date: Sat, 9 May 2020 11:28:09 +0300 Subject: [PATCH] Test negative value conversion to b10g11r11 float format. Added a test that verifies negative values are converted correctly to b10g11r11 packed float format. These values need to be clamped to zero. Also moved texture subgroup LOD Amber test files to a common directory shared by the new test. VK-GL-CTS Issue: 2271 New tests: dEQP-VK.texture.conversion.b10g11r11-negative-values Components: Vulkan Change-Id: Ide52844f1467f1e7c23d7510ba951d398a8814ac --- AndroidGen.mk | 1 + android/cts/master/vk-master-2020-03-01.txt | 1 + android/cts/master/vk-master.txt | 1 + .../b10g11r11-ufloat-pack32-negative-values.amber | 73 ++++++++++++++++++++++ .../subgroup_lod}/texel_fetch.amber | 0 .../subgroup_lod}/texture_grad.amber | 0 .../subgroup_lod}/texture_lod.amber | 0 .../modules/vulkan/texture/CMakeLists.txt | 2 + .../vulkan/texture/vktTextureConversionTests.cpp | 53 ++++++++++++++++ .../vulkan/texture/vktTextureConversionTests.hpp | 41 ++++++++++++ .../vulkan/texture/vktTextureSubgroupLodTests.cpp | 6 +- .../modules/vulkan/texture/vktTextureTests.cpp | 2 + external/vulkancts/mustpass/master/vk-default.txt | 1 + 13 files changed, 178 insertions(+), 3 deletions(-) create mode 100644 external/vulkancts/data/vulkan/amber/texture/conversion/b10g11r11-ufloat-pack32-negative-values.amber rename external/vulkancts/data/vulkan/amber/{texture_subgroup_lod => texture/subgroup_lod}/texel_fetch.amber (100%) rename external/vulkancts/data/vulkan/amber/{texture_subgroup_lod => texture/subgroup_lod}/texture_grad.amber (100%) rename external/vulkancts/data/vulkan/amber/{texture_subgroup_lod => texture/subgroup_lod}/texture_lod.amber (100%) create mode 100644 external/vulkancts/modules/vulkan/texture/vktTextureConversionTests.cpp create mode 100644 external/vulkancts/modules/vulkan/texture/vktTextureConversionTests.hpp diff --git a/AndroidGen.mk b/AndroidGen.mk index 1506d2f..3630977 100644 --- a/AndroidGen.mk +++ b/AndroidGen.mk @@ -405,6 +405,7 @@ LOCAL_SRC_FILES := \ external/vulkancts/modules/vulkan/texture/vktSampleVerifier.cpp \ external/vulkancts/modules/vulkan/texture/vktSampleVerifierUtil.cpp \ external/vulkancts/modules/vulkan/texture/vktTextureCompressedFormatTests.cpp \ + external/vulkancts/modules/vulkan/texture/vktTextureConversionTests.cpp \ external/vulkancts/modules/vulkan/texture/vktTextureFilteringAnisotropyTests.cpp \ external/vulkancts/modules/vulkan/texture/vktTextureFilteringExplicitLodTests.cpp \ external/vulkancts/modules/vulkan/texture/vktTextureFilteringTests.cpp \ diff --git a/android/cts/master/vk-master-2020-03-01.txt b/android/cts/master/vk-master-2020-03-01.txt index 8fd53db..40c63a2 100644 --- a/android/cts/master/vk-master-2020-03-01.txt +++ b/android/cts/master/vk-master-2020-03-01.txt @@ -165096,6 +165096,7 @@ dEQP-VK.texture.swizzle.texture_coordinate.astc_12x12_srgb_block_2d_npot_sparse_ dEQP-VK.texture.subgroup_lod.texturelod dEQP-VK.texture.subgroup_lod.texturegrad dEQP-VK.texture.subgroup_lod.texelfetch +dEQP-VK.texture.conversion.b10g11r11-negative-values dEQP-VK.geometry.layered.1d_array.64_1_4.render_to_default_layer dEQP-VK.geometry.layered.1d_array.64_1_4.render_to_one dEQP-VK.geometry.layered.1d_array.64_1_4.render_to_all diff --git a/android/cts/master/vk-master.txt b/android/cts/master/vk-master.txt index f3500a8..8a4ff8e 100644 --- a/android/cts/master/vk-master.txt +++ b/android/cts/master/vk-master.txt @@ -523590,6 +523590,7 @@ dEQP-VK.texture.swizzle.texture_coordinate.astc_12x12_srgb_block_2d_npot_sparse_ dEQP-VK.texture.subgroup_lod.texturelod dEQP-VK.texture.subgroup_lod.texturegrad dEQP-VK.texture.subgroup_lod.texelfetch +dEQP-VK.texture.conversion.b10g11r11-negative-values dEQP-VK.geometry.input.basic_primitive.points dEQP-VK.geometry.input.basic_primitive.lines dEQP-VK.geometry.input.basic_primitive.line_strip diff --git a/external/vulkancts/data/vulkan/amber/texture/conversion/b10g11r11-ufloat-pack32-negative-values.amber b/external/vulkancts/data/vulkan/amber/texture/conversion/b10g11r11-ufloat-pack32-negative-values.amber new file mode 100644 index 0000000..0a375d9 --- /dev/null +++ b/external/vulkancts/data/vulkan/amber/texture/conversion/b10g11r11-ufloat-pack32-negative-values.amber @@ -0,0 +1,73 @@ +#!amber +# Copyright 2020 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +SHADER compute compute_shader GLSL +#version 430 +layout(local_size_x=10, local_size_y=10) in; +uniform layout (set=0, binding=0, r11f_g11f_b10f) image2D texture; + +void main () +{ + ivec2 uv = ivec2(gl_GlobalInvocationID.xy); + vec4 color = vec4(uv.x - uv.y, uv.y, -uv.y, 1); + imageStore(texture, uv, color); +} +END + +SHADER compute compute_shader_verify GLSL +#version 430 +layout(local_size_x=1, local_size_y=1) in; +uniform layout (set=0, binding=0, r11f_g11f_b10f) image2D texture; +layout(binding = 1) buffer Buf1 +{ + int result; +}; + +void main () +{ + result = 1; + + for (int y = 0; y < 50; y++) + for (int x = 0; x < 50; x++) + { + ivec2 uv = ivec2(x, y); + vec4 color = imageLoad(texture, uv); + // Conversion to tiny float should clamp negative values to zero, + // thus the max operation here. + vec4 ref = max(vec4(uv.x - uv.y, uv.y, -uv.y, 1), vec4(0)); + + if (color != ref) + result = 0; + } +} +END + +IMAGE texture FORMAT B10G11R11_UFLOAT_PACK32 DIM_2D WIDTH 50 HEIGHT 50 FILL 0 +BUFFER result DATA_TYPE int32 SIZE 1 FILL 0 + +PIPELINE compute pipeline + ATTACH compute_shader + BIND BUFFER texture AS storage_image DESCRIPTOR_SET 0 BINDING 0 +END + +PIPELINE compute verify + ATTACH compute_shader_verify + BIND BUFFER texture AS storage_image DESCRIPTOR_SET 0 BINDING 0 + BIND BUFFER result AS storage DESCRIPTOR_SET 0 BINDING 1 +END + +RUN pipeline 5 5 1 +RUN verify 1 1 1 +EXPECT result IDX 0 EQ 1 diff --git a/external/vulkancts/data/vulkan/amber/texture_subgroup_lod/texel_fetch.amber b/external/vulkancts/data/vulkan/amber/texture/subgroup_lod/texel_fetch.amber similarity index 100% rename from external/vulkancts/data/vulkan/amber/texture_subgroup_lod/texel_fetch.amber rename to external/vulkancts/data/vulkan/amber/texture/subgroup_lod/texel_fetch.amber diff --git a/external/vulkancts/data/vulkan/amber/texture_subgroup_lod/texture_grad.amber b/external/vulkancts/data/vulkan/amber/texture/subgroup_lod/texture_grad.amber similarity index 100% rename from external/vulkancts/data/vulkan/amber/texture_subgroup_lod/texture_grad.amber rename to external/vulkancts/data/vulkan/amber/texture/subgroup_lod/texture_grad.amber diff --git a/external/vulkancts/data/vulkan/amber/texture_subgroup_lod/texture_lod.amber b/external/vulkancts/data/vulkan/amber/texture/subgroup_lod/texture_lod.amber similarity index 100% rename from external/vulkancts/data/vulkan/amber/texture_subgroup_lod/texture_lod.amber rename to external/vulkancts/data/vulkan/amber/texture/subgroup_lod/texture_lod.amber diff --git a/external/vulkancts/modules/vulkan/texture/CMakeLists.txt b/external/vulkancts/modules/vulkan/texture/CMakeLists.txt index 3ccd307..e2a5f44 100644 --- a/external/vulkancts/modules/vulkan/texture/CMakeLists.txt +++ b/external/vulkancts/modules/vulkan/texture/CMakeLists.txt @@ -15,6 +15,8 @@ set(DEQP_VK_TEXTURE_SRCS vktTextureTests.hpp vktTextureTestUtil.cpp vktTextureTestUtil.hpp + vktTextureConversionTests.cpp + vktTextureConversionTests.hpp vktTextureFilteringExplicitLodTests.cpp vktTextureFilteringExplicitLodTests.hpp vktTextureFilteringTests.cpp diff --git a/external/vulkancts/modules/vulkan/texture/vktTextureConversionTests.cpp b/external/vulkancts/modules/vulkan/texture/vktTextureConversionTests.cpp new file mode 100644 index 0000000..f061d39 --- /dev/null +++ b/external/vulkancts/modules/vulkan/texture/vktTextureConversionTests.cpp @@ -0,0 +1,53 @@ +/*------------------------------------------------------------------------ + * Vulkan Conformance Tests + * ------------------------ + * + * Copyright (c) 2020 The Khronos Group Inc. + * Copyright (c) 2020 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *//*! + * \file + * \brief Texture conversion tests. + *//*--------------------------------------------------------------------*/ + +#include "vktTextureConversionTests.hpp" +#include "vktAmberTestCase.hpp" +#include "vktTestGroupUtil.hpp" + +using namespace vk; + +namespace vkt +{ +namespace texture +{ +namespace +{ + +void populateTextureConversionTests (tcu::TestCaseGroup* group) +{ + tcu::TestContext& testCtx = group->getTestContext(); + + group->addChild(cts_amber::createAmberTestCase(testCtx, "b10g11r11-negative-values", "", "texture/conversion", "b10g11r11-ufloat-pack32-negative-values.amber")); +} + +} // anonymous + +tcu::TestCaseGroup* createTextureConversionTests (tcu::TestContext& testCtx) +{ + return createTestGroup(testCtx, "conversion", "Texture conversion tests.", populateTextureConversionTests); +} + +} // texture +} // vkt diff --git a/external/vulkancts/modules/vulkan/texture/vktTextureConversionTests.hpp b/external/vulkancts/modules/vulkan/texture/vktTextureConversionTests.hpp new file mode 100644 index 0000000..453a162 --- /dev/null +++ b/external/vulkancts/modules/vulkan/texture/vktTextureConversionTests.hpp @@ -0,0 +1,41 @@ +#ifndef _VKTTEXTURECONVERSIONTESTS_HPP +#define _VKTTEXTURECONVERSIONTESTS_HPP +/*------------------------------------------------------------------------ + * Vulkan Conformance Tests + * ------------------------ + * + * Copyright (c) 2020 The Khronos Group Inc. + * Copyright (c) 2020 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *//*! + * \file + * \brief Texture conversion tests. + *//*--------------------------------------------------------------------*/ + +#include "tcuDefs.hpp" +#include "tcuTestCase.hpp" +#include "vktTestCase.hpp" + +namespace vkt +{ +namespace texture +{ + +tcu::TestCaseGroup* createTextureConversionTests (tcu::TestContext& testCtx); + +} // texture +} // vkt + +#endif // _VKTTEXTURECONVERSIONTESTS_HPP diff --git a/external/vulkancts/modules/vulkan/texture/vktTextureSubgroupLodTests.cpp b/external/vulkancts/modules/vulkan/texture/vktTextureSubgroupLodTests.cpp index fb253c9..74575db 100644 --- a/external/vulkancts/modules/vulkan/texture/vktTextureSubgroupLodTests.cpp +++ b/external/vulkancts/modules/vulkan/texture/vktTextureSubgroupLodTests.cpp @@ -38,9 +38,9 @@ namespace void populateSubgroupLodTests (tcu::TestCaseGroup* group) { tcu::TestContext& testCtx = group->getTestContext(); - cts_amber::AmberTestCase* testCaseLod = cts_amber::createAmberTestCase(testCtx, "texturelod", "", "texture_subgroup_lod", "texture_lod.amber"); - cts_amber::AmberTestCase* testCaseGrad = cts_amber::createAmberTestCase(testCtx, "texturegrad", "", "texture_subgroup_lod", "texture_grad.amber"); - cts_amber::AmberTestCase* testCaseFetch = cts_amber::createAmberTestCase(testCtx, "texelfetch", "", "texture_subgroup_lod", "texel_fetch.amber"); + cts_amber::AmberTestCase* testCaseLod = cts_amber::createAmberTestCase(testCtx, "texturelod", "", "texture/subgroup_lod", "texture_lod.amber"); + cts_amber::AmberTestCase* testCaseGrad = cts_amber::createAmberTestCase(testCtx, "texturegrad", "", "texture/subgroup_lod", "texture_grad.amber"); + cts_amber::AmberTestCase* testCaseFetch = cts_amber::createAmberTestCase(testCtx, "texelfetch", "", "texture/subgroup_lod", "texel_fetch.amber"); group->addChild(testCaseLod); group->addChild(testCaseGrad); diff --git a/external/vulkancts/modules/vulkan/texture/vktTextureTests.cpp b/external/vulkancts/modules/vulkan/texture/vktTextureTests.cpp index 2bcfaa2..ed0d5f5 100644 --- a/external/vulkancts/modules/vulkan/texture/vktTextureTests.cpp +++ b/external/vulkancts/modules/vulkan/texture/vktTextureTests.cpp @@ -33,6 +33,7 @@ #include "vktTextureCompressedFormatTests.hpp" #include "vktTextureSwizzleTests.hpp" #include "vktTextureSubgroupLodTests.hpp" +#include "vktTextureConversionTests.hpp" namespace vkt { @@ -53,6 +54,7 @@ void createTextureTests (tcu::TestCaseGroup* textureTests) textureTests->addChild(createTextureCompressedFormatTests (testCtx)); textureTests->addChild(createTextureSwizzleTests (testCtx)); textureTests->addChild(createTextureSubgroupLodTests (testCtx)); + textureTests->addChild(createTextureConversionTests (testCtx)); } } // anonymous diff --git a/external/vulkancts/mustpass/master/vk-default.txt b/external/vulkancts/mustpass/master/vk-default.txt index a3f05ae..2f9ca3e 100644 --- a/external/vulkancts/mustpass/master/vk-default.txt +++ b/external/vulkancts/mustpass/master/vk-default.txt @@ -525746,6 +525746,7 @@ dEQP-VK.texture.swizzle.texture_coordinate.astc_12x12_srgb_block_2d_npot_sparse_ dEQP-VK.texture.subgroup_lod.texturelod dEQP-VK.texture.subgroup_lod.texturegrad dEQP-VK.texture.subgroup_lod.texelfetch +dEQP-VK.texture.conversion.b10g11r11-negative-values dEQP-VK.geometry.input.basic_primitive.points dEQP-VK.geometry.input.basic_primitive.lines dEQP-VK.geometry.input.basic_primitive.line_strip -- 2.7.4