Test was using 10 views while min required view count is 6.
Also added tests for max_multi_view_view_count
Renamed dEQP-VK.multiview.*.1_2_4_8_16_32_64_128_256_512
to dEQP-VK.multiview.*.1_2_4_8_16_32
Affects:
dEQP-VK.multiview.*.1_2_4_8_16_32
New testcases:
dEQP-VK.multiview.*.max_multi_view_view_count
Components: Vulkan
VK-GL-CTS issue: 366
Change-Id: Ic97f0f3db52c79fb0c3bf3e14018c66fcfe2a071
dEQP-VK.multiview.masks.1_2_4_8
dEQP-VK.multiview.masks.15_15_15_15
dEQP-VK.multiview.masks.8_1_1_8
-dEQP-VK.multiview.masks.1_2_4_8_16_32_64_128_256_512
+dEQP-VK.multiview.masks.1_2_4_8_16_32
+dEQP-VK.multiview.masks.max_multi_view_view_count
dEQP-VK.multiview.index.vertex_shader.15
dEQP-VK.multiview.index.vertex_shader.8
dEQP-VK.multiview.index.vertex_shader.1_2_4_8
dEQP-VK.multiview.index.vertex_shader.15_15_15_15
dEQP-VK.multiview.index.vertex_shader.8_1_1_8
-dEQP-VK.multiview.index.vertex_shader.1_2_4_8_16_32_64_128_256_512
+dEQP-VK.multiview.index.vertex_shader.1_2_4_8_16_32
+dEQP-VK.multiview.index.vertex_shader.max_multi_view_view_count
dEQP-VK.multiview.index.fragment_shader.15
dEQP-VK.multiview.index.fragment_shader.8
dEQP-VK.multiview.index.fragment_shader.1_2_4_8
dEQP-VK.multiview.index.fragment_shader.15_15_15_15
dEQP-VK.multiview.index.fragment_shader.8_1_1_8
-dEQP-VK.multiview.index.fragment_shader.1_2_4_8_16_32_64_128_256_512
+dEQP-VK.multiview.index.fragment_shader.1_2_4_8_16_32
+dEQP-VK.multiview.index.fragment_shader.max_multi_view_view_count
dEQP-VK.multiview.index.geometry_shader.15
dEQP-VK.multiview.index.geometry_shader.8
dEQP-VK.multiview.index.geometry_shader.1_2_4_8
dEQP-VK.multiview.index.geometry_shader.15_15_15_15
dEQP-VK.multiview.index.geometry_shader.8_1_1_8
-dEQP-VK.multiview.index.geometry_shader.1_2_4_8_16_32_64_128_256_512
+dEQP-VK.multiview.index.geometry_shader.1_2_4_8_16_32
+dEQP-VK.multiview.index.geometry_shader.max_multi_view_view_count
dEQP-VK.multiview.index.tesellation_shader.15
dEQP-VK.multiview.index.tesellation_shader.8
dEQP-VK.multiview.index.tesellation_shader.1_2_4_8
dEQP-VK.multiview.index.tesellation_shader.15_15_15_15
dEQP-VK.multiview.index.tesellation_shader.8_1_1_8
-dEQP-VK.multiview.index.tesellation_shader.1_2_4_8_16_32_64_128_256_512
+dEQP-VK.multiview.index.tesellation_shader.1_2_4_8_16_32
+dEQP-VK.multiview.index.tesellation_shader.max_multi_view_view_count
};
tcu::TestStatus iterate (void);
+ TestParameters fillMissingParameters (const TestParameters& parameters);
void createMultiViewDevices (void);
void madeShaderModule (map<VkShaderStageFlagBits,ShaderModuleSP>& shaderModule, vector<VkPipelineShaderStageCreateInfo>& shaderStageParams);
Move<VkPipeline> makeGraphicsPipeline (const VkRenderPass renderPass,
void readImage (VkImage image, const tcu::PixelBufferAccess& dst);
bool checkImage (tcu::ConstPixelBufferAccess& dst);
- const TestParameters& m_parameters;
+ const TestParameters m_parameters;
VkFormat m_colorFormat;
const deUint32 m_squareCount;
Move<VkDevice> m_logicalDevice;
MultiViewRenderTestInstance::MultiViewRenderTestInstance (Context& context, const TestParameters& parameters)
: TestInstance (context)
- , m_parameters (parameters)
+ , m_parameters (fillMissingParameters(parameters))
, m_colorFormat (VK_FORMAT_R8G8B8A8_UNORM)
, m_squareCount (4u)
{
return tcu::TestStatus::pass("Pass");
}
+TestParameters MultiViewRenderTestInstance::fillMissingParameters (const TestParameters& parameters)
+{
+ if (!parameters.viewMasks.empty())
+ return parameters;
+ else
+ {
+ const InstanceInterface& instance = m_context.getInstanceInterface();
+ const VkPhysicalDevice physicalDevice = m_context.getPhysicalDevice();
+
+ VkPhysicalDeviceMultiviewPropertiesKHX multiviewProperties =
+ {
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHX, // VkStructureType sType;
+ DE_NULL, // void* pNext;
+ 0u, // deUint32 maxMultiviewViewCount;
+ 0u // deUint32 maxMultiviewInstanceIndex;
+ };
+
+ VkPhysicalDeviceProperties2KHR deviceProperties2;
+ deviceProperties2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR;
+ deviceProperties2.pNext = &multiviewProperties;
+
+ instance.getPhysicalDeviceProperties2KHR(physicalDevice, &deviceProperties2);
+
+ TestParameters newParameters = parameters;
+ newParameters.extent.depth = multiviewProperties.maxMultiviewViewCount;
+
+ const deUint32 maxViewMask = (1u << multiviewProperties.maxMultiviewViewCount) - 1u;
+
+ vector<deUint32> viewMasks;
+ for (deUint32 mask = 1u; mask <= maxViewMask; mask = mask << 1u)
+ viewMasks.push_back(mask);
+ newParameters.viewMasks = viewMasks;
+
+ return newParameters;
+ }
+}
+
void MultiViewRenderTestInstance::createMultiViewDevices (void)
{
const InstanceInterface& instance = m_context.getInstanceInterface();
viewMasks[4].push_back(1u); //0001
viewMasks[4].push_back(8u); //1000
- for(deUint32 mask = 1u; mask < 1024u; mask = mask << 1u)
+ const deUint32 minSupportedMultiviewViewCount = 6u;
+ const deUint32 maxViewMask = (1u << minSupportedMultiviewViewCount) - 1u;
+
+ for(deUint32 mask = 1u; mask <= maxViewMask; mask = mask << 1u)
viewMasks[5].push_back(mask);
for(int shaderTypeNdx = VIEW_INDEX_NOT_USE; shaderTypeNdx < VIEW_INDEX_LAST; ++shaderTypeNdx)
groupShader->addChild(new MultiViewRenderTestsCase(testCtx, masks.str().c_str(), "", parameters));
}
+ // maxMultiviewViewCount case
+ {
+ const VkExtent3D incompleteExtent3D = { 16u, 16u, 0u };
+ const vector<deUint32> dummyMasks;
+ const TestParameters parameters = { incompleteExtent3D, dummyMasks, (ViewIndex)shaderTypeNdx };
+
+ groupShader->addChild(new MultiViewRenderTestsCase(testCtx, "max_multi_view_view_count", "", parameters));
+ }
+
if (VIEW_INDEX_NOT_USE == shaderTypeNdx)
group->addChild(groupShader.release());
else
dEQP-VK.multiview.masks.1_2_4_8
dEQP-VK.multiview.masks.15_15_15_15
dEQP-VK.multiview.masks.8_1_1_8
-dEQP-VK.multiview.masks.1_2_4_8_16_32_64_128_256_512
+dEQP-VK.multiview.masks.1_2_4_8_16_32
+dEQP-VK.multiview.masks.max_multi_view_view_count
dEQP-VK.multiview.index.vertex_shader.15
dEQP-VK.multiview.index.vertex_shader.8
dEQP-VK.multiview.index.vertex_shader.1_2_4_8
dEQP-VK.multiview.index.vertex_shader.15_15_15_15
dEQP-VK.multiview.index.vertex_shader.8_1_1_8
-dEQP-VK.multiview.index.vertex_shader.1_2_4_8_16_32_64_128_256_512
+dEQP-VK.multiview.index.vertex_shader.1_2_4_8_16_32
+dEQP-VK.multiview.index.vertex_shader.max_multi_view_view_count
dEQP-VK.multiview.index.fragment_shader.15
dEQP-VK.multiview.index.fragment_shader.8
dEQP-VK.multiview.index.fragment_shader.1_2_4_8
dEQP-VK.multiview.index.fragment_shader.15_15_15_15
dEQP-VK.multiview.index.fragment_shader.8_1_1_8
-dEQP-VK.multiview.index.fragment_shader.1_2_4_8_16_32_64_128_256_512
+dEQP-VK.multiview.index.fragment_shader.1_2_4_8_16_32
+dEQP-VK.multiview.index.fragment_shader.max_multi_view_view_count
dEQP-VK.multiview.index.geometry_shader.15
dEQP-VK.multiview.index.geometry_shader.8
dEQP-VK.multiview.index.geometry_shader.1_2_4_8
dEQP-VK.multiview.index.geometry_shader.15_15_15_15
dEQP-VK.multiview.index.geometry_shader.8_1_1_8
-dEQP-VK.multiview.index.geometry_shader.1_2_4_8_16_32_64_128_256_512
+dEQP-VK.multiview.index.geometry_shader.1_2_4_8_16_32
+dEQP-VK.multiview.index.geometry_shader.max_multi_view_view_count
dEQP-VK.multiview.index.tesellation_shader.15
dEQP-VK.multiview.index.tesellation_shader.8
dEQP-VK.multiview.index.tesellation_shader.1_2_4_8
dEQP-VK.multiview.index.tesellation_shader.15_15_15_15
dEQP-VK.multiview.index.tesellation_shader.8_1_1_8
-dEQP-VK.multiview.index.tesellation_shader.1_2_4_8_16_32_64_128_256_512
+dEQP-VK.multiview.index.tesellation_shader.1_2_4_8_16_32
+dEQP-VK.multiview.index.tesellation_shader.max_multi_view_view_count