Merge vk-gl-cts/vulkan-cts-1.3.1 into vk-gl-cts/vulkan-cts-1.3.2
Change-Id: Iab357d9f9a46d2bbe710bd116003c8da423c9709
diff --git a/external/vulkancts/data/vulkan/amber/builtin/precision/square_matrix/determinant_compute_fp64_mat_3x3.amber b/external/vulkancts/data/vulkan/amber/builtin/precision/square_matrix/determinant_compute_fp64_mat_3x3.amber
index 1ed071a..be69f94 100644
--- a/external/vulkancts/data/vulkan/amber/builtin/precision/square_matrix/determinant_compute_fp64_mat_3x3.amber
+++ b/external/vulkancts/data/vulkan/amber/builtin/precision/square_matrix/determinant_compute_fp64_mat_3x3.amber
@@ -112,7 +112,7 @@
EXPECT bufOut IDX 32 TOLERANCE 0.000000000001818989403546 EQ -4572.819874970912419629875268
# Decimals between 32768 and 65536: 7.275957614e-12
-EXPECT bufOut IDX 40 TOLERANCE 0.0000000000072759576 EQ 39409.657530142280652696
+EXPECT bufOut IDX 40 TOLERANCE 0.0000000000072759576141834259 EQ 39409.657530142280652696
# Decimals between 1.407374884e+14 and 2.814749767e+14: 0.03125
EXPECT bufOut IDX 48 TOLERANCE 0.125 EQ 193279112353655.781250
@@ -121,7 +121,7 @@
EXPECT bufOut IDX 56 TOLERANCE 0.00000000023283064365387 EQ 1056597.50481621926485282276659
# Decimals between 0.000244140625 and 0.00048828125: 0.00048828125
-EXPECT bufOut IDX 64 TOLERANCE 0.00048828125 EQ -2382539145823.611328125
+EXPECT bufOut IDX 64 TOLERANCE 0.00048828125000000001 EQ -2382539145823.611328125
# Decimals between 131072 and 262144: 2.910383046e-11
EXPECT bufOut IDX 72 TOLERANCE 0.00000000002910383046 EQ -194083.93092791094919429
diff --git a/external/vulkancts/framework/vulkan/vkDeviceFeatures2.inl b/external/vulkancts/framework/vulkan/vkDeviceFeatures2.inl
index dd49368..33eaa34 100644
--- a/external/vulkancts/framework/vulkan/vkDeviceFeatures2.inl
+++ b/external/vulkancts/framework/vulkan/vkDeviceFeatures2.inl
@@ -134,7 +134,7 @@
const bool isSubgroupSizeControlFeatures = checkExtension(properties, "VK_EXT_subgroup_size_control") || context.contextSupports(vk::ApiVersion(1, 3, 0));
const bool isSynchronization2Features = checkExtension(properties, "VK_KHR_synchronization2") || context.contextSupports(vk::ApiVersion(1, 3, 0));
const bool isFragmentShaderInterlockFeaturesEXT = checkExtension(properties, "VK_EXT_fragment_shader_interlock");
-const bool isTexelBufferAlignmentFeaturesEXT = checkExtension(properties, "VK_EXT_texel_buffer_alignment") || context.contextSupports(vk::ApiVersion(1, 3, 0));
+const bool isTexelBufferAlignmentFeaturesEXT = checkExtension(properties, "VK_EXT_texel_buffer_alignment");
const bool isTextureCompressionASTCHDRFeatures = checkExtension(properties, "VK_EXT_texture_compression_astc_hdr") || context.contextSupports(vk::ApiVersion(1, 3, 0));
const bool isTimelineSemaphoreFeatures = checkExtension(properties, "VK_KHR_timeline_semaphore") || context.contextSupports(vk::ApiVersion(1, 2, 0));
const bool isTransformFeedbackFeaturesEXT = checkExtension(properties, "VK_EXT_transform_feedback");
diff --git a/external/vulkancts/framework/vulkan/vkDeviceUtil.cpp b/external/vulkancts/framework/vulkan/vkDeviceUtil.cpp
index 3b397ba..0c86dd8 100644
--- a/external/vulkancts/framework/vulkan/vkDeviceUtil.cpp
+++ b/external/vulkancts/framework/vulkan/vkDeviceUtil.cpp
@@ -48,10 +48,13 @@
bool validationEnabled = (!enabledLayers.empty());
vector<string> actualExtensions = enabledExtensions;
+ // Enumerate once, pass it in to the various functions that require the list of available extensions
+ vector<vk::VkExtensionProperties> availableExtensions = enumerateInstanceExtensionProperties(vkPlatform, DE_NULL);
+
if (validationEnabled)
{
// Make sure the debug report extension is enabled when validation is enabled.
- if (!isDebugReportSupported(vkPlatform))
+ if (!isExtensionSupported(availableExtensions, RequiredExtension("VK_EXT_debug_report")))
TCU_THROW(NotSupportedError, "VK_EXT_debug_report is not supported");
if (!de::contains(begin(actualExtensions), end(actualExtensions), "VK_EXT_debug_report"))
@@ -60,6 +63,13 @@
DE_ASSERT(recorder);
}
+ // Make sure portability enumeration is enabled whenever it is available
+ bool portability_enumeration_available = isExtensionSupported(availableExtensions, RequiredExtension("VK_KHR_portability_enumeration"));
+ if (portability_enumeration_available)
+ {
+ actualExtensions.push_back("VK_KHR_portability_enumeration");
+ }
+
vector<const char*> layerNamePtrs (enabledLayers.size());
vector<const char*> extensionNamePtrs (actualExtensions.size());
diff --git a/external/vulkancts/framework/vulkan/vkInstanceExtensions.inl b/external/vulkancts/framework/vulkan/vkInstanceExtensions.inl
index 2bf3c7e..33f253b 100644
--- a/external/vulkancts/framework/vulkan/vkInstanceExtensions.inl
+++ b/external/vulkancts/framework/vulkan/vkInstanceExtensions.inl
@@ -14,6 +14,7 @@
"VK_KHR_get_physical_device_properties2",
"VK_KHR_get_surface_capabilities2",
"VK_KHR_mir_surface",
+ "VK_KHR_portability_enumeration",
"VK_KHR_surface",
"VK_KHR_surface_protected_capabilities",
"VK_KHR_wayland_surface",
diff --git a/external/vulkancts/framework/vulkan/vkSupportedExtensions.inl b/external/vulkancts/framework/vulkan/vkSupportedExtensions.inl
index 373fc97..febbb39 100644
--- a/external/vulkancts/framework/vulkan/vkSupportedExtensions.inl
+++ b/external/vulkancts/framework/vulkan/vkSupportedExtensions.inl
@@ -50,7 +50,6 @@
dst.push_back("VK_EXT_tooling_info");
dst.push_back("VK_EXT_extended_dynamic_state");
dst.push_back("VK_EXT_shader_demote_to_helper_invocation");
- dst.push_back("VK_EXT_texel_buffer_alignment");
dst.push_back("VK_EXT_private_data");
dst.push_back("VK_EXT_pipeline_creation_cache_control");
dst.push_back("VK_EXT_image_robustness");
diff --git a/external/vulkancts/modules/vulkan/api/vktApiExternalMemoryTests.cpp b/external/vulkancts/modules/vulkan/api/vktApiExternalMemoryTests.cpp
index 7ea72e6..b7843c6 100644
--- a/external/vulkancts/modules/vulkan/api/vktApiExternalMemoryTests.cpp
+++ b/external/vulkancts/modules/vulkan/api/vktApiExternalMemoryTests.cpp
@@ -1214,6 +1214,7 @@
const vk::Unique<vk::VkSemaphore> semaphore (createAndImportSemaphore(vkd, *device, config.externalType, handle, flags));
submitEmptyWait(vkd, queue, *semaphore);
+ VK_CHECK(vkd.queueWaitIdle(queue));
return tcu::TestStatus::pass("Pass");
}
diff --git a/external/vulkancts/modules/vulkan/renderpass/vktRenderPassTests.cpp b/external/vulkancts/modules/vulkan/renderpass/vktRenderPassTests.cpp
index 8d4356f..4ab1faa 100644
--- a/external/vulkancts/modules/vulkan/renderpass/vktRenderPassTests.cpp
+++ b/external/vulkancts/modules/vulkan/renderpass/vktRenderPassTests.cpp
@@ -6189,7 +6189,7 @@
| VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT,
VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
- VK_ACCESS_COLOR_ATTACHMENT_READ_BIT,
+ (VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_INPUT_ATTACHMENT_READ_BIT),
byRegion ? (VkDependencyFlags)VK_DEPENDENCY_BY_REGION_BIT : 0u));
}
diff --git a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmTrinaryMinMaxTests.cpp b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmTrinaryMinMaxTests.cpp
index 49440ae..6daffa8 100644
--- a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmTrinaryMinMaxTests.cpp
+++ b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmTrinaryMinMaxTests.cpp
@@ -719,7 +719,7 @@
vk::BufferWithMemory inputBuffer {vkd, device, allocator, inputBufferInfo, vk::MemoryRequirement::HostVisible};
vk::BufferWithMemory outputBuffer {vkd, device, allocator, outputBufferInfo, vk::MemoryRequirement::HostVisible};
- std::unique_ptr<char[]> referenceBuffer {new char[kOutputBufferSize]};
+ std::unique_ptr<char[]> referenceBuffer {new char[static_cast<size_t>(kOutputBufferSize)]};
// Fill buffers with initial contents.
auto& inputAlloc = inputBuffer.getAllocation();
diff --git a/external/vulkancts/modules/vulkan/ssbo/vktSSBOLayoutTests.cpp b/external/vulkancts/modules/vulkan/ssbo/vktSSBOLayoutTests.cpp
index eb95f04..fcd4862 100644
--- a/external/vulkancts/modules/vulkan/ssbo/vktSSBOLayoutTests.cpp
+++ b/external/vulkancts/modules/vulkan/ssbo/vktSSBOLayoutTests.cpp
@@ -93,12 +93,13 @@
private:
void generateBlock (de::Random& rnd, deUint32 layoutFlags);
void generateBufferVar (de::Random& rnd, BufferBlock& block, bool isLastMember);
- glu::VarType generateType (de::Random& rnd, int typeDepth, bool arrayOk, bool unusedArrayOk);
+ glu::VarType generateType (de::Random& rnd, int structDepth, int arrayDepth, bool arrayOk, bool unusedArrayOk);
deUint32 m_features;
int m_maxBlocks;
int m_maxInstances;
int m_maxArrayLength;
+ int m_maxArrayDepth;
int m_maxStructDepth;
int m_maxBlockMembers;
int m_maxStructMembers;
@@ -115,6 +116,7 @@
, m_maxBlocks ((features & FEATURE_DESCRIPTOR_INDEXING) ? 1 : 4)
, m_maxInstances ((features & FEATURE_INSTANCE_ARRAYS) ? 3 : 0)
, m_maxArrayLength ((features & FEATURE_ARRAYS) ? 8 : 1)
+ , m_maxArrayDepth ((features& FEATURE_ARRAYS_OF_ARRAYS) ? 2 : 0)
, m_maxStructDepth ((features & FEATURE_STRUCTS) ? 2 : 0)
, m_maxBlockMembers (5)
, m_maxStructMembers (4)
@@ -232,7 +234,7 @@
const float accessWeight = 0.85f;
const bool unusedOk = (m_features & FEATURE_UNUSED_VARS) != 0;
const std::string name = genName('a', 'z', m_bufferVarNdx);
- const glu::VarType type = generateType(rnd, 0, true, isLastMember && (m_features & FEATURE_UNSIZED_ARRAYS));
+ const glu::VarType type = generateType(rnd, 0, 0, true, isLastMember && (m_features & FEATURE_UNSIZED_ARRAYS));
const bool access = !unusedOk || (rnd.getFloat() < accessWeight);
const bool read = access ? (rnd.getFloat() < readWeight) : false;
const bool write = access ? (!read || (rnd.getFloat() < writeWeight)) : false;
@@ -243,7 +245,7 @@
m_bufferVarNdx += 1;
}
-glu::VarType RandomSSBOLayoutCase::generateType (de::Random& rnd, int typeDepth, bool arrayOk, bool unsizedArrayOk)
+glu::VarType RandomSSBOLayoutCase::generateType (de::Random& rnd, int structDepth, int arrayDepth, bool arrayOk, bool unsizedArrayOk)
{
const float structWeight = 0.1f;
const float arrayWeight = 0.1f;
@@ -253,18 +255,19 @@
if (unsizedArrayOk && (rnd.getFloat() < unsizedArrayWeight))
{
- const bool childArrayOk = (m_features & FEATURE_ARRAYS_OF_ARRAYS) != 0;
- const glu::VarType elementType = generateType(rnd, typeDepth, childArrayOk, false);
+ const bool childArrayOk = ((m_features & FEATURE_ARRAYS_OF_ARRAYS) != 0) &&
+ (arrayDepth < m_maxArrayDepth);
+ const glu::VarType elementType = generateType(rnd, structDepth, arrayDepth + 1, childArrayOk, false);
return glu::VarType(elementType, glu::VarType::UNSIZED_ARRAY);
}
- else if (typeDepth < m_maxStructDepth && rnd.getFloat() < structWeight)
+ else if (structDepth < m_maxStructDepth && rnd.getFloat() < structWeight)
{
vector<glu::VarType> memberTypes;
int numMembers = rnd.getInt(1, m_maxStructMembers);
// Generate members first so nested struct declarations are in correct order.
for (int ndx = 0; ndx < numMembers; ndx++)
- memberTypes.push_back(generateType(rnd, typeDepth+1, true, false));
+ memberTypes.push_back(generateType(rnd, structDepth + 1, arrayDepth, (arrayDepth < m_maxArrayDepth), false));
glu::StructType& structType = m_interface.allocStruct((string("s") + genName('A', 'Z', m_structNdx)).c_str());
m_structNdx += 1;
@@ -280,8 +283,9 @@
else if (m_maxArrayLength > 0 && arrayOk && rnd.getFloat() < arrayWeight)
{
const int arrayLength = rnd.getInt(1, m_maxArrayLength);
- const bool childArrayOk = (m_features & FEATURE_ARRAYS_OF_ARRAYS) != 0;
- const glu::VarType elementType = generateType(rnd, typeDepth, childArrayOk, false);
+ const bool childArrayOk = ((m_features & FEATURE_ARRAYS_OF_ARRAYS) != 0) &&
+ (arrayDepth < m_maxArrayDepth);
+ const glu::VarType elementType = generateType(rnd, structDepth, arrayDepth + 1, childArrayOk, false);
return glu::VarType(elementType, arrayLength);
}
diff --git a/external/vulkancts/mustpass/main/src/excluded-tests.txt b/external/vulkancts/mustpass/main/src/excluded-tests.txt
index 4e0402a..22e5374 100644
--- a/external/vulkancts/mustpass/main/src/excluded-tests.txt
+++ b/external/vulkancts/mustpass/main/src/excluded-tests.txt
@@ -2,10 +2,7 @@
dEQP-VK.glsl.texture_functions.texturegrad.sparse_samplercubeshadow_fragment
dEQP-VK.glsl.texture_functions.texturegrad.sparse_samplercubeshadow_vertex
-# VK-GL-CTS 1829
-# Test shader length is excessive, excluding until such time as the test case can be re-visited.
-dEQP-VK.ssbo.layout.random.scalar.75
-
# VK-GL-CTS 3005
dEQP-VK.ray_tracing_pipeline.build.cpuht*1048576_1_1
dEQP-VK.ray_tracing_pipeline.build.cpuht*65536_4_4
+
diff --git a/external/vulkancts/mustpass/main/vk-default/ssbo.txt b/external/vulkancts/mustpass/main/vk-default/ssbo.txt
index 557f87e..ad51e0a 100644
--- a/external/vulkancts/mustpass/main/vk-default/ssbo.txt
+++ b/external/vulkancts/mustpass/main/vk-default/ssbo.txt
@@ -3927,6 +3927,7 @@
dEQP-VK.ssbo.layout.random.scalar.72
dEQP-VK.ssbo.layout.random.scalar.73
dEQP-VK.ssbo.layout.random.scalar.74
+dEQP-VK.ssbo.layout.random.scalar.75
dEQP-VK.ssbo.layout.random.scalar.76
dEQP-VK.ssbo.layout.random.scalar.77
dEQP-VK.ssbo.layout.random.scalar.78
diff --git a/external/vulkancts/scripts/src/extensions/VK_EXT_texel_buffer_alignment.json b/external/vulkancts/scripts/src/extensions/VK_EXT_texel_buffer_alignment.json
index 3d59d74..b607f64 100644
--- a/external/vulkancts/scripts/src/extensions/VK_EXT_texel_buffer_alignment.json
+++ b/external/vulkancts/scripts/src/extensions/VK_EXT_texel_buffer_alignment.json
@@ -2,7 +2,8 @@
"register_extension":
{
"type": "device",
- "core": "1.3.0"
+ "core": "",
+ "note": "Partial promotion, only the properties structure was promoted to vk1.3, the feature structure was not promoted"
},
"mandatory_features":
{
diff --git a/external/vulkancts/scripts/src/extensions/VK_KHR_portability_enumeration.json b/external/vulkancts/scripts/src/extensions/VK_KHR_portability_enumeration.json
new file mode 100644
index 0000000..cf6a384
--- /dev/null
+++ b/external/vulkancts/scripts/src/extensions/VK_KHR_portability_enumeration.json
@@ -0,0 +1,7 @@
+{
+ "register_extension":
+ {
+ "type": "instance",
+ "core": ""
+ }
+}
\ No newline at end of file
diff --git a/framework/platform/android/tcuAndroidPlatform.cpp b/framework/platform/android/tcuAndroidPlatform.cpp
index 41fdfb2..a86e6d0 100644
--- a/framework/platform/android/tcuAndroidPlatform.cpp
+++ b/framework/platform/android/tcuAndroidPlatform.cpp
@@ -337,7 +337,20 @@
// Worst-case estimates
const size_t MiB = (size_t)(1<<20);
const size_t baseMemUsage = 400*MiB;
+
+#if (DE_PTR_SIZE == 4)
+ // Some tests, such as:
+ //
+ // dEQP-VK.api.object_management.max_concurrent.*
+ // dEQP-VK.memory.allocation.random.*
+ //
+ // when run in succession, can lead to system memory fragmentation. It depends on the allocator, and on some 32-bit
+ // systems can lead to out of memory errors. As a workaround, we use a smaller amount of memory on 32-bit systems,
+ // as this typically avoids out of memory errors caused by fragmentation.
+ const double safeUsageRatio = 0.1;
+#else
const double safeUsageRatio = 0.25;
+#endif
limits.totalSystemMemory = de::max((size_t)(double(deInt64(m_totalSystemMemory)-deInt64(baseMemUsage)) * safeUsageRatio), 16*MiB);