vk.getBufferMemoryRequirements(vkDevice, *buffer, &memReqs); // get the proper size requirement
- if (size > memReqs.size)
+#ifdef CTS_USES_VULKANSC
+ if (m_context.getTestContext().getCommandLine().isSubProcess())
+#endif // CTS_USES_VULKANSC
{
- std::ostringstream errorMsg;
- errorMsg << "Requied memory size (" << memReqs.size << " bytes) smaller than the buffer's size (" << size << " bytes)!";
- return tcu::TestStatus::fail(errorMsg.str());
+ if (size > memReqs.size)
+ {
+ std::ostringstream errorMsg;
+ errorMsg << "Required memory size (" << memReqs.size << " bytes) smaller than the buffer's size (" << size << " bytes)!";
+ return tcu::TestStatus::fail(errorMsg.str());
+ }
}
// Allocate the memory
}
// Bind the memory
+#ifndef CTS_USES_VULKANSC
if ((m_testCase.flags & (VK_BUFFER_CREATE_SPARSE_BINDING_BIT | VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT | VK_BUFFER_CREATE_SPARSE_ALIASED_BIT)) != 0)
{
const VkQueue queue = m_context.getSparseQueue();
}
else if (vk.bindBufferMemory(vkDevice, *buffer, *memory, 0) != VK_SUCCESS)
return tcu::TestStatus::fail("Bind buffer memory failed! (requested memory size: " + de::toString(size) + ")");
+#else
+ if (vk.bindBufferMemory(vkDevice, *buffer, *memory, 0) != VK_SUCCESS)
+ return tcu::TestStatus::fail("Bind buffer memory failed! (requested memory size: " + de::toString(size) + ")");
+#endif // CTS_USES_VULKANSC
return tcu::TestStatus::pass("Pass");
}
1181,
15991,
16384,
+#ifndef CTS_USES_VULKANSC
~0ull, // try to exercise a very large buffer too (will be clamped to a sensible size later)
+#endif // CTS_USES_VULKANSC
};
for (int i = 0; i < DE_LENGTH_OF_ARRAY(testSizes); ++i)
return tcu::TestStatus::fail(errorMsg.str());
}
+ if(memReqs.memoryRequirements.memoryTypeBits == 0)
+ return tcu::TestStatus::fail("memoryTypeBits is 0");
+
const deUint32 heapTypeIndex = static_cast<deUint32>(deCtz32(memReqs.memoryRequirements.memoryTypeBits));
const VkMemoryType memoryType = memoryProperties.memoryTypes[heapTypeIndex];
const VkMemoryHeap memoryHeap = memoryProperties.memoryHeaps[memoryType.heapIndex];
const VkBufferCreateFlags bufferCreateFlags[] =
{
0,
+#ifndef CTS_USES_VULKANSC
VK_BUFFER_CREATE_SPARSE_BINDING_BIT,
VK_BUFFER_CREATE_SPARSE_BINDING_BIT | VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT,
VK_BUFFER_CREATE_SPARSE_BINDING_BIT | VK_BUFFER_CREATE_SPARSE_ALIASED_BIT,
VK_BUFFER_CREATE_SPARSE_BINDING_BIT | VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT | VK_BUFFER_CREATE_SPARSE_ALIASED_BIT,
+#endif // CTS_USES_VULKANSC
};
// Dedicated allocation does not support sparse feature
VkBufferCreateFlags flags;
};
+#ifndef CTS_USES_VULKANSC
tcu::TestStatus testLargeBuffer(Context& context, LargeBufferParameters params)
{
const DeviceInterface& vk = context.getDeviceInterface();
context.getPhysicalDevice()).limits;
VkBuffer rawBuffer = DE_NULL;
+#ifndef CTS_USES_VULKANSC
if (params.useMaxBufferSize)
params.bufferSize = context.getMaintenance4Properties().maxBufferSize;
+#endif // CTS_USES_VULKANSC
if ((params.flags & VK_BUFFER_CREATE_SPARSE_BINDING_BIT) != 0)
params.bufferSize = std::min(params.bufferSize, limits.sparseAddressSpaceSize);
return tcu::TestStatus::fail("Fail");
}
+#endif // CTS_USES_VULKANSC
+#ifndef CTS_USES_VULKANSC
void checkMaintenance4Support(Context& context, LargeBufferParameters params)
{
if (params.useMaxBufferSize)
if ((params.flags & VK_BUFFER_CREATE_SPARSE_BINDING_BIT) && !physicalDeviceFeatures.sparseBinding)
TCU_THROW(NotSupportedError, "Sparse bindings feature is not supported");
}
+#endif // CTS_USES_VULKANSC
} // anonymous
{
de::MovePtr<tcu::TestCaseGroup> basicTests(new tcu::TestCaseGroup(testCtx, "basic", "Basic buffer tests."));
+#ifndef CTS_USES_VULKANSC
addFunctionCase(basicTests.get(), "max_size", "Creating buffer using maxBufferSize limit.",
checkMaintenance4Support, testLargeBuffer, LargeBufferParameters
{
false,
0u
});
+#endif // CTS_USES_VULKANSC
buffersTests->addChild(basicTests.release());
}