blob: b8f3a69dc198456495cab60d6708b40b1f95cb7a [file] [log] [blame]
/*------------------------------------------------------------------------
* Vulkan Conformance Tests
* ------------------------
*
* Copyright (c) 2022 The Khronos Group Inc.
* Copyright (c) 2022 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.
*
*//*!
* \file
* \brief Shader invocations tests
*//*--------------------------------------------------------------------*/
#include "vktDrawShaderInvocationTests.hpp"
#include "vktTestGroupUtil.hpp"
#include "amber/vktAmberTestCase.hpp"
#include "tcuTestCase.hpp"
using namespace vk;
namespace vkt
{
namespace Draw
{
namespace
{
void checkHelperInvocationTestSupport(Context& context, std::string testName)
{
DE_UNREF(testName);
if ((context.getSubgroupProperties().supportedOperations & VK_SUBGROUP_FEATURE_QUAD_BIT) == 0u)
{
TCU_THROW(NotSupportedError, "Device does not support subgroup quad operations");
}
if (!context.isDeviceFunctionalitySupported("VK_EXT_shader_demote_to_helper_invocation"))
{
TCU_THROW(NotSupportedError, "VK_EXT_shader_demote_to_helper_invocation not supported.");
}
}
void createTests(tcu::TestCaseGroup* testGroup)
{
tcu::TestContext& testCtx = testGroup->getTestContext();
static const char dataDir[] = "draw/shader_invocation";
cts_amber::AmberTestCase* testCase = cts_amber::createAmberTestCase(testCtx, "helper_invocation", "", dataDir, "helper_invocation.amber");
testCase->setCheckSupportCallback(checkHelperInvocationTestSupport);
testGroup->addChild(testCase);
}
} // anonymous
tcu::TestCaseGroup* createShaderInvocationTests(tcu::TestContext& testCtx)
{
return createTestGroup(testCtx, "shader_invocation", "Shader Invocation tests", createTests);
}
} // DrawTests
} // vkt