From 190a43d83ad513106c03983656289f0402353b1d Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Thu, 21 Jan 2021 16:20:41 -0600 Subject: [PATCH] Test FragCoord with per-sample input variable Tests this spec language for a pipeline that doesn't use sampleShadingEnable, but does use gl_SampleID to enable sample shading: 'When Sample Shading is enabled, the x and y components of FragCoord reflect the location of one of the samples corresponding to the shader invocation.' Component: Vulkan Affects: dEQP-VK.glsl.builtin_var.fragcoord_msaa.* Change-Id: Ia5d423b6310b956f721cfd9f9d069b97a8fa3319 --- android/cts/master/vk-master-2020-03-01.txt | 7 +++++++ android/cts/master/vk-master.txt | 7 +++++++ .../vktShaderRenderBuiltinVarTests.cpp | 23 +++++++++++++++------- external/vulkancts/mustpass/master/vk-default.txt | 7 +++++++ 4 files changed, 37 insertions(+), 7 deletions(-) diff --git a/android/cts/master/vk-master-2020-03-01.txt b/android/cts/master/vk-master-2020-03-01.txt index a3a798a..90219ba 100644 --- a/android/cts/master/vk-master-2020-03-01.txt +++ b/android/cts/master/vk-master-2020-03-01.txt @@ -179192,6 +179192,13 @@ dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.base_lev dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.base_level.sparse_level_2_amd_bias dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.base_level.level_2_amd_lod dEQP-VK.glsl.texture_gather.offsets.min_required_offset.2d_array.rgba8i.base_level.sparse_level_2_amd_lod +dEQP-VK.glsl.builtin_var.fragcoord_msaa_input.1_bit +dEQP-VK.glsl.builtin_var.fragcoord_msaa_input.2_bit +dEQP-VK.glsl.builtin_var.fragcoord_msaa_input.4_bit +dEQP-VK.glsl.builtin_var.fragcoord_msaa_input.8_bit +dEQP-VK.glsl.builtin_var.fragcoord_msaa_input.16_bit +dEQP-VK.glsl.builtin_var.fragcoord_msaa_input.32_bit +dEQP-VK.glsl.builtin_var.fragcoord_msaa_input.64_bit dEQP-VK.glsl.builtin_var.simple.pointcoord_uniform_frag dEQP-VK.glsl.builtin_var.simple.pointcoord_uniform_vert dEQP-VK.glsl.builtin.function.common.isnan.double_compute diff --git a/android/cts/master/vk-master.txt b/android/cts/master/vk-master.txt index 2005086..c9a2d89 100644 --- a/android/cts/master/vk-master.txt +++ b/android/cts/master/vk-master.txt @@ -454203,6 +454203,13 @@ dEQP-VK.glsl.builtin_var.fragcoord_msaa.8_bit dEQP-VK.glsl.builtin_var.fragcoord_msaa.16_bit dEQP-VK.glsl.builtin_var.fragcoord_msaa.32_bit dEQP-VK.glsl.builtin_var.fragcoord_msaa.64_bit +dEQP-VK.glsl.builtin_var.fragcoord_msaa_input.1_bit +dEQP-VK.glsl.builtin_var.fragcoord_msaa_input.2_bit +dEQP-VK.glsl.builtin_var.fragcoord_msaa_input.4_bit +dEQP-VK.glsl.builtin_var.fragcoord_msaa_input.8_bit +dEQP-VK.glsl.builtin_var.fragcoord_msaa_input.16_bit +dEQP-VK.glsl.builtin_var.fragcoord_msaa_input.32_bit +dEQP-VK.glsl.builtin_var.fragcoord_msaa_input.64_bit dEQP-VK.glsl.builtin_var.simple.fragcoord_xyz dEQP-VK.glsl.builtin_var.simple.fragcoord_w dEQP-VK.glsl.builtin_var.simple.pointcoord diff --git a/external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderBuiltinVarTests.cpp b/external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderBuiltinVarTests.cpp index 541894a..1067de0 100644 --- a/external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderBuiltinVarTests.cpp +++ b/external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderBuiltinVarTests.cpp @@ -1017,19 +1017,21 @@ public: RENDERWIDTH = 16, RENDERHEIGHT = 16 }; - BuiltinFragCoordMsaaCaseInstance (Context& context, VkSampleCountFlagBits sampleCount); + BuiltinFragCoordMsaaCaseInstance (Context& context, VkSampleCountFlagBits sampleCount, bool useEnable); TestStatus iterate (void); private: bool validateSampleLocations (const ConstPixelBufferAccess& sampleLocationBuffer) const; const tcu::UVec2 m_renderSize; const VkSampleCountFlagBits m_sampleCount; + const bool m_useEnable; }; -BuiltinFragCoordMsaaCaseInstance::BuiltinFragCoordMsaaCaseInstance (Context& context, VkSampleCountFlagBits sampleCount) +BuiltinFragCoordMsaaCaseInstance::BuiltinFragCoordMsaaCaseInstance (Context& context, VkSampleCountFlagBits sampleCount, bool useEnable) : TestInstance (context) , m_renderSize (RENDERWIDTH, RENDERHEIGHT) , m_sampleCount (sampleCount) + , m_useEnable (useEnable) { const InstanceInterface& vki = m_context.getInstanceInterface(); const VkPhysicalDevice physicalDevice = m_context.getPhysicalDevice(); @@ -1262,7 +1264,7 @@ TestStatus BuiltinFragCoordMsaaCaseInstance::iterate (void) VulkanProgram vulkanProgram(shaders); frameBufferState.numSamples = m_sampleCount; - pipelineState.sampleShadingEnable = true; + pipelineState.sampleShadingEnable = m_useEnable; // When m_useEnable is false, we rely on the gl_SampleID input to enable sample shading vulkanProgram.descriptorSetLayout = *descriptorSetLayout; vulkanProgram.descriptorSet = *descriptorSet; @@ -1417,17 +1419,19 @@ bool BuiltinFragCoordMsaaCaseInstance::validateSampleLocations (const ConstPixel class BuiltinFragCoordMsaaTestCase : public TestCase { public: - BuiltinFragCoordMsaaTestCase (TestContext& testCtx, const char* name, const char* description, VkSampleCountFlagBits sampleCount); + BuiltinFragCoordMsaaTestCase (TestContext& testCtx, const char* name, const char* description, VkSampleCountFlagBits sampleCount, bool useEnable); virtual ~BuiltinFragCoordMsaaTestCase (void); void initPrograms (SourceCollections& sourceCollections) const; TestInstance* createInstance (Context& context) const; private: const VkSampleCountFlagBits m_sampleCount; + const bool m_useEnable; }; -BuiltinFragCoordMsaaTestCase::BuiltinFragCoordMsaaTestCase (TestContext& testCtx, const char* name, const char* description, VkSampleCountFlagBits sampleCount) +BuiltinFragCoordMsaaTestCase::BuiltinFragCoordMsaaTestCase (TestContext& testCtx, const char* name, const char* description, VkSampleCountFlagBits sampleCount, bool useEnable) : TestCase (testCtx, name, description) , m_sampleCount (sampleCount) + , m_useEnable (useEnable) { } @@ -1468,7 +1472,7 @@ void BuiltinFragCoordMsaaTestCase::initPrograms (SourceCollections& programColle TestInstance* BuiltinFragCoordMsaaTestCase::createInstance (Context& context) const { - return new BuiltinFragCoordMsaaCaseInstance(context, m_sampleCount); + return new BuiltinFragCoordMsaaCaseInstance(context, m_sampleCount, m_useEnable); } class BuiltinFragDepthCase : public TestCase @@ -2320,6 +2324,7 @@ TestCaseGroup* createBuiltinVarTests (TestContext& testCtx) de::MovePtr frontFacingGroup (new TestCaseGroup(testCtx, "frontfacing", "Test gl_Frontfacing keyword.")); de::MovePtr fragDepthGroup (new TestCaseGroup(testCtx, "fragdepth", "Test gl_FragDepth keyword.")); de::MovePtr fragCoordMsaaGroup (new TestCaseGroup(testCtx, "fragcoord_msaa", "Test interation between gl_FragCoord and msaa")); + de::MovePtr fragCoordMsaaInputGroup (new TestCaseGroup(testCtx, "fragcoord_msaa_input", "Test interation between gl_FragCoord and msaa")); simpleGroup->addChild(new BuiltinGlFragCoordXYZCase(testCtx, "fragcoord_xyz", "FragCoord xyz test")); simpleGroup->addChild(new BuiltinGlFragCoordWCase(testCtx, "fragcoord_w", "FragCoord w test")); @@ -2346,7 +2351,10 @@ TestCaseGroup* createBuiltinVarTests (TestContext& testCtx) }; for (deUint32 caseNdx = 0; caseNdx < DE_LENGTH_OF_ARRAY(fragCoordMsaaCaseList); caseNdx++) - fragCoordMsaaGroup->addChild(new BuiltinFragCoordMsaaTestCase(testCtx, fragCoordMsaaCaseList[caseNdx].name, fragCoordMsaaCaseList[caseNdx].description, fragCoordMsaaCaseList[caseNdx].sampleCount)); + { + fragCoordMsaaGroup->addChild(new BuiltinFragCoordMsaaTestCase(testCtx, fragCoordMsaaCaseList[caseNdx].name, fragCoordMsaaCaseList[caseNdx].description, fragCoordMsaaCaseList[caseNdx].sampleCount, true)); + fragCoordMsaaInputGroup->addChild(new BuiltinFragCoordMsaaTestCase(testCtx, fragCoordMsaaCaseList[caseNdx].name, fragCoordMsaaCaseList[caseNdx].description, fragCoordMsaaCaseList[caseNdx].sampleCount, false)); + } } // gl_FrontFacing tests @@ -2421,6 +2429,7 @@ TestCaseGroup* createBuiltinVarTests (TestContext& testCtx) builtinGroup->addChild(frontFacingGroup.release()); builtinGroup->addChild(fragDepthGroup.release()); builtinGroup->addChild(fragCoordMsaaGroup.release()); + builtinGroup->addChild(fragCoordMsaaInputGroup.release()); builtinGroup->addChild(simpleGroup.release()); for (deUint16 shaderType = 0; shaderType <= (SHADER_INPUT_BUILTIN_BIT | SHADER_INPUT_VARYING_BIT | SHADER_INPUT_CONSTANT_BIT); ++shaderType) diff --git a/external/vulkancts/mustpass/master/vk-default.txt b/external/vulkancts/mustpass/master/vk-default.txt index 16da807..4feb566 100644 --- a/external/vulkancts/mustpass/master/vk-default.txt +++ b/external/vulkancts/mustpass/master/vk-default.txt @@ -454237,6 +454237,13 @@ dEQP-VK.glsl.builtin_var.fragcoord_msaa.8_bit dEQP-VK.glsl.builtin_var.fragcoord_msaa.16_bit dEQP-VK.glsl.builtin_var.fragcoord_msaa.32_bit dEQP-VK.glsl.builtin_var.fragcoord_msaa.64_bit +dEQP-VK.glsl.builtin_var.fragcoord_msaa_input.1_bit +dEQP-VK.glsl.builtin_var.fragcoord_msaa_input.2_bit +dEQP-VK.glsl.builtin_var.fragcoord_msaa_input.4_bit +dEQP-VK.glsl.builtin_var.fragcoord_msaa_input.8_bit +dEQP-VK.glsl.builtin_var.fragcoord_msaa_input.16_bit +dEQP-VK.glsl.builtin_var.fragcoord_msaa_input.32_bit +dEQP-VK.glsl.builtin_var.fragcoord_msaa_input.64_bit dEQP-VK.glsl.builtin_var.simple.fragcoord_xyz dEQP-VK.glsl.builtin_var.simple.fragcoord_w dEQP-VK.glsl.builtin_var.simple.pointcoord -- 2.7.4