SpecConstants noSpecConstants;
PushConstants noPushConstants;
vector<string> extensions;
- vector<string> features;
map<string, string> noFragments;
GraphicsResources noResources;
StageToSpecConstantMap specConstantMap;
noResources,
interfaces,
extensions,
- features,
requiredFeatures,
VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT,
QP_TEST_RESULT_FAIL,
SpecConstants noSpecConstants;
PushConstants noPushConstants;
vector<string> extensions;
- vector<string> features;
map<string, string> noFragments;
GraphicsResources noResources;
StageToSpecConstantMap specConstantMap;
noResources,
interfaces,
extensions,
- features,
requiredFeatures,
VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT,
QP_TEST_RESULT_FAIL,
SpecConstants noSpecConstants;
PushConstants noPushConstants;
GraphicsInterfaces noInterfaces;
- vector<string> noFeatures;
vector<string> noExtensions;
VulkanFeatures vulkanFeatures = VulkanFeatures();
vector<float> refData;
vulkanFeatures.coreFeatures.vertexPipelineStoresAndAtomics = DE_TRUE;
vulkanFeatures.coreFeatures.fragmentStoresAndAtomics = DE_FALSE;
createTestForStage(VK_SHADER_STAGE_VERTEX_BIT, (testName + "_vert").c_str(), defaultColors, defaultColors, fragments, noSpecConstants,
- noPushConstants, resources, noInterfaces, noExtensions, noFeatures, vulkanFeatures, group);
+ noPushConstants, resources, noInterfaces, noExtensions, vulkanFeatures, group);
createTestForStage(VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, (testName + "_tessc").c_str(), defaultColors, defaultColors, fragments, noSpecConstants,
- noPushConstants, resources, noInterfaces, noExtensions, noFeatures, vulkanFeatures, group);
+ noPushConstants, resources, noInterfaces, noExtensions, vulkanFeatures, group);
createTestForStage(VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, (testName + "_tesse").c_str(), defaultColors, defaultColors, fragments, noSpecConstants,
- noPushConstants, resources, noInterfaces, noExtensions, noFeatures, vulkanFeatures, group);
+ noPushConstants, resources, noInterfaces, noExtensions, vulkanFeatures, group);
createTestForStage(VK_SHADER_STAGE_GEOMETRY_BIT, (testName + "_geom").c_str(), defaultColors, defaultColors, fragments, noSpecConstants,
- noPushConstants, resources, noInterfaces, noExtensions, noFeatures, vulkanFeatures, group);
+ noPushConstants, resources, noInterfaces, noExtensions, vulkanFeatures, group);
vulkanFeatures.coreFeatures.vertexPipelineStoresAndAtomics = DE_FALSE;
vulkanFeatures.coreFeatures.fragmentStoresAndAtomics = DE_TRUE;
createTestForStage(VK_SHADER_STAGE_FRAGMENT_BIT, (testName + "_frag").c_str(), defaultColors, defaultColors, fragments, noSpecConstants,
- noPushConstants, resources, noInterfaces, noExtensions, noFeatures, vulkanFeatures, group);
+ noPushConstants, resources, noInterfaces, noExtensions, vulkanFeatures, group);
}
}
SpecConstants noSpecConstants;
PushConstants noPushConstants;
GraphicsInterfaces noInterfaces;
- vector<string> noFeatures;
vector<string> noExtensions;
VulkanFeatures vulkanFeatures = VulkanFeatures();
vector<float> identityData;
vulkanFeatures.coreFeatures.vertexPipelineStoresAndAtomics = DE_TRUE;
vulkanFeatures.coreFeatures.fragmentStoresAndAtomics = DE_FALSE;
createTestForStage(VK_SHADER_STAGE_VERTEX_BIT, (testName + "_vert").c_str(), defaultColors, defaultColors, fragments, noSpecConstants,
- noPushConstants, resources, noInterfaces, noExtensions, noFeatures, vulkanFeatures, group);
+ noPushConstants, resources, noInterfaces, noExtensions, vulkanFeatures, group);
createTestForStage(VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, (testName + "_tessc").c_str(), defaultColors, defaultColors, fragments, noSpecConstants,
- noPushConstants, resources, noInterfaces, noExtensions, noFeatures, vulkanFeatures, group);
+ noPushConstants, resources, noInterfaces, noExtensions, vulkanFeatures, group);
createTestForStage(VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, (testName + "_tesse").c_str(), defaultColors, defaultColors, fragments, noSpecConstants,
- noPushConstants, resources, noInterfaces, noExtensions, noFeatures, vulkanFeatures, group);
+ noPushConstants, resources, noInterfaces, noExtensions, vulkanFeatures, group);
createTestForStage(VK_SHADER_STAGE_GEOMETRY_BIT, (testName + "_geom").c_str(), defaultColors, defaultColors, fragments, noSpecConstants,
- noPushConstants, resources, noInterfaces, noExtensions, noFeatures, vulkanFeatures, group);
+ noPushConstants, resources, noInterfaces, noExtensions, vulkanFeatures, group);
vulkanFeatures.coreFeatures.vertexPipelineStoresAndAtomics = DE_FALSE;
vulkanFeatures.coreFeatures.fragmentStoresAndAtomics = DE_TRUE;
createTestForStage(VK_SHADER_STAGE_FRAGMENT_BIT, (testName + "_frag").c_str(), defaultColors, defaultColors, fragments, noSpecConstants,
- noPushConstants, resources, noInterfaces, noExtensions, noFeatures, vulkanFeatures, group);
+ noPushConstants, resources, noInterfaces, noExtensions, vulkanFeatures, group);
}
}
}
SpecConstants noSpecConstants;
PushConstants noPushConstants;
GraphicsInterfaces noInterfaces;
- vector<string> noFeatures;
vector<string> noExtensions;
VulkanFeatures vulkanFeatures = VulkanFeatures();
vector<float> identityData;
vulkanFeatures.coreFeatures.vertexPipelineStoresAndAtomics = DE_TRUE;
vulkanFeatures.coreFeatures.fragmentStoresAndAtomics = DE_FALSE;
createTestForStage(VK_SHADER_STAGE_VERTEX_BIT, (testName + "_vert").c_str(), defaultColors, defaultColors, fragments, noSpecConstants,
- noPushConstants, resources, noInterfaces, noExtensions, noFeatures, vulkanFeatures, group);
+ noPushConstants, resources, noInterfaces, noExtensions, vulkanFeatures, group);
createTestForStage(VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, (testName + "_tessc").c_str(), defaultColors, defaultColors, fragments, noSpecConstants,
- noPushConstants, resources, noInterfaces, noExtensions, noFeatures, vulkanFeatures, group);
+ noPushConstants, resources, noInterfaces, noExtensions, vulkanFeatures, group);
createTestForStage(VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, (testName + "_tesse").c_str(), defaultColors, defaultColors, fragments, noSpecConstants,
- noPushConstants, resources, noInterfaces, noExtensions, noFeatures, vulkanFeatures, group);
+ noPushConstants, resources, noInterfaces, noExtensions, vulkanFeatures, group);
createTestForStage(VK_SHADER_STAGE_GEOMETRY_BIT, (testName + "_geom").c_str(), defaultColors, defaultColors, fragments, noSpecConstants,
- noPushConstants, resources, noInterfaces, noExtensions, noFeatures, vulkanFeatures, group);
+ noPushConstants, resources, noInterfaces, noExtensions, vulkanFeatures, group);
vulkanFeatures.coreFeatures.vertexPipelineStoresAndAtomics = DE_FALSE;
vulkanFeatures.coreFeatures.fragmentStoresAndAtomics = DE_TRUE;
createTestForStage(VK_SHADER_STAGE_FRAGMENT_BIT, (testName + "_frag").c_str(), defaultColors, defaultColors, fragments, noSpecConstants,
- noPushConstants, resources, noInterfaces, noExtensions, noFeatures, vulkanFeatures, group);
+ noPushConstants, resources, noInterfaces, noExtensions, vulkanFeatures, group);
}
} // anonymous
resources.outputs.push_back(Resource(outBufferSp, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
resources.verifyIO = checkFloatsLUT[outFloatType];
- vector<string> features;
StageToSpecConstantMap noSpecConstants;
PushConstants noPushConstants;
GraphicsInterfaces noInterfaces;
resources,
noInterfaces,
extensions,
- features,
vulkanFeatures,
testedStage);
const GraphicsResources& resources_,
const GraphicsInterfaces& interfaces_,
const vector<string>& extensions_,
- const vector<string>& features_,
VulkanFeatures vulkanFeatures_,
VkShaderStageFlags customizedStages_)
: testCodeFragments (testCodeFragments_)
, hasTessellation (false)
, requiredStages (static_cast<VkShaderStageFlagBits>(0))
, requiredDeviceExtensions (extensions_)
- , requiredDeviceFeatures (features_)
, requestedFeatures (vulkanFeatures_)
, pushConstants (pushConsants_)
, customizedStages (customizedStages_)
, hasTessellation (other.hasTessellation)
, requiredStages (other.requiredStages)
, requiredDeviceExtensions (other.requiredDeviceExtensions)
- , requiredDeviceFeatures (other.requiredDeviceFeatures)
, requestedFeatures (other.requestedFeatures)
, pushConstants (other.pushConstants)
, customizedStages (other.customizedStages)
TCU_THROW(NotSupportedError, (std::string("Extension not supported: ") + *i).c_str());
}
- {
- for (deUint32 featureNdx = 0; featureNdx < instance.requiredDeviceFeatures.size(); ++featureNdx)
- {
- const string& feature = instance.requiredDeviceFeatures[featureNdx];
-
- if (feature == "shaderInt16")
- {
- if (features.shaderInt16 != VK_TRUE)
- TCU_THROW(NotSupportedError, "Device feature not supported: shaderInt16");
- }
- else if (feature == "shaderInt64")
- {
- if (features.shaderInt64 != VK_TRUE)
- TCU_THROW(NotSupportedError, "Device feature not supported: shaderInt64");
- }
- else if (feature == "shaderFloat64")
- {
- if (features.shaderFloat64 != VK_TRUE)
- TCU_THROW(NotSupportedError, "Device feature not supported: shaderFloat64");
- }
- else if (feature == "fragmentStoresAndAtomics")
- {
- if (features.fragmentStoresAndAtomics != VK_TRUE)
- TCU_THROW(NotSupportedError, "Device feature not supported: fragmentStoresAndAtomics");
- }
- else
- {
- TCU_THROW(InternalError, (std::string("Unimplemented physical device feature: ") + feature).c_str());
- }
- }
- }
-
// Core features
{
const VkShaderStageFlags vertexPipelineStoresAndAtomicsAffected = vk::VK_SHADER_STAGE_VERTEX_BIT
const GraphicsResources& resources,
const GraphicsInterfaces& interfaces,
const vector<string>& extensions,
- const vector<string>& features,
VulkanFeatures vulkanFeatures,
tcu::TestCaseGroup* tests,
const qpTestResult failResult,
if (!specConstants.empty())
specConstantMap[stage] = specConstants;
- InstanceContext ctx (inputColors, outputColors, testCodeFragments, specConstantMap, pushConstants, resources, interfaces, extensions, features, vulkanFeatures, stage);
+ InstanceContext ctx (inputColors, outputColors, testCodeFragments, specConstantMap, pushConstants, resources, interfaces, extensions, vulkanFeatures, stage);
for (size_t i = 0; i < pipeline.size(); ++i)
{
ctx.moduleMap[pipeline[i].moduleName].push_back(std::make_pair(pipeline[i].entryName, pipeline[i].stage));
const GraphicsResources& resources,
const GraphicsInterfaces& interfaces,
const vector<string>& extensions,
- const vector<string>& features,
VulkanFeatures vulkanFeatures,
tcu::TestCaseGroup* tests,
const qpTestResult failResult,
{
createTestForStage(VK_SHADER_STAGE_VERTEX_BIT, name + "_vert",
inputColors, outputColors, testCodeFragments, specConstants, pushConstants, resources,
- interfaces, extensions, features, vulkanFeatures, tests, failResult, failMessageTemplate);
+ interfaces, extensions, vulkanFeatures, tests, failResult, failMessageTemplate);
createTestForStage(VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, name + "_tessc",
inputColors, outputColors, testCodeFragments, specConstants, pushConstants, resources,
- interfaces, extensions, features, vulkanFeatures, tests, failResult, failMessageTemplate);
+ interfaces, extensions, vulkanFeatures, tests, failResult, failMessageTemplate);
createTestForStage(VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, name + "_tesse",
inputColors, outputColors, testCodeFragments, specConstants, pushConstants, resources,
- interfaces, extensions, features, vulkanFeatures, tests, failResult, failMessageTemplate);
+ interfaces, extensions, vulkanFeatures, tests, failResult, failMessageTemplate);
createTestForStage(VK_SHADER_STAGE_GEOMETRY_BIT, name + "_geom",
inputColors, outputColors, testCodeFragments, specConstants, pushConstants, resources,
- interfaces, extensions, features, vulkanFeatures, tests, failResult, failMessageTemplate);
+ interfaces, extensions, vulkanFeatures, tests, failResult, failMessageTemplate);
createTestForStage(VK_SHADER_STAGE_FRAGMENT_BIT, name + "_frag",
inputColors, outputColors, testCodeFragments, specConstants, pushConstants, resources,
- interfaces, extensions, features, vulkanFeatures, tests, failResult, failMessageTemplate);
+ interfaces, extensions, vulkanFeatures, tests, failResult, failMessageTemplate);
}
void addTessCtrlTest (tcu::TestCaseGroup* group, const char* name, const map<string, string>& fragments)
createTestForStage(VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, name,
defaultColors, defaultColors, fragments, SpecConstants(), PushConstants(), GraphicsResources(),
- GraphicsInterfaces(), vector<string>(), vector<string>(), VulkanFeatures(), group);
+ GraphicsInterfaces(), vector<string>(), VulkanFeatures(), group);
}
} // SpirVAssembly
bool hasTessellation;
vk::VkShaderStageFlagBits requiredStages;
std::vector<std::string> requiredDeviceExtensions;
- std::vector<std::string> requiredDeviceFeatures;
VulkanFeatures requestedFeatures;
PushConstants pushConstants;
// Specifies the (one or more) stages that use a customized shader code.
const GraphicsResources& resources_,
const GraphicsInterfaces& interfaces_,
const std::vector<std::string>& extensions_,
- const std::vector<std::string>& features_,
VulkanFeatures vulkanFeatures_,
VkShaderStageFlags customizedStages_);
const GraphicsResources& resources,
const GraphicsInterfaces& interfaces,
const std::vector<std::string>& extensions,
- const std::vector<std::string>& features,
VulkanFeatures vulkanFeatures,
VkShaderStageFlags customizedStages,
const qpTestResult failResult = QP_TEST_RESULT_FAIL,
const std::string& failMessageTemplate = std::string())
{
- InstanceContext ctx (inputColors, outputColors, testCodeFragments, specConstants, pushConstants, resources, interfaces, extensions, features, vulkanFeatures, customizedStages);
+ InstanceContext ctx (inputColors, outputColors, testCodeFragments, specConstants, pushConstants, resources, interfaces, extensions, vulkanFeatures, customizedStages);
for (size_t i = 0; i < N; ++i)
{
ctx.moduleMap[elements[i].moduleName].push_back(std::make_pair(elements[i].entryName, elements[i].stage));
{
return createInstanceContext(elements, inputColors, outputColors, testCodeFragments,
StageToSpecConstantMap(), PushConstants(), GraphicsResources(),
- GraphicsInterfaces(), std::vector<std::string>(), std::vector<std::string>(),
+ GraphicsInterfaces(), std::vector<std::string>(),
VulkanFeatures(), vk::VK_SHADER_STAGE_ALL);
}
const GraphicsResources& resources,
const GraphicsInterfaces& interfaces,
const std::vector<std::string>& extensions,
- const std::vector<std::string>& features,
VulkanFeatures vulkanFeatures,
tcu::TestCaseGroup* tests,
const qpTestResult failResult = QP_TEST_RESULT_FAIL,
const GraphicsResources& resources,
const GraphicsInterfaces& interfaces,
const std::vector<std::string>& extensions,
- const std::vector<std::string>& features,
VulkanFeatures vulkanFeatures,
tcu::TestCaseGroup* tests,
const qpTestResult failResult = QP_TEST_RESULT_FAIL,
GraphicsResources noResources;
GraphicsInterfaces noInterfaces;
std::vector<std::string> noExtensions;
- std::vector<std::string> noFeatures;
createTestsForAllStages(
name, inputColors, outputColors, testCodeFragments, noSpecConstants, noPushConstants,
- noResources, noInterfaces, noExtensions, noFeatures, VulkanFeatures(),
+ noResources, noInterfaces, noExtensions, VulkanFeatures(),
tests, failResult, failMessageTemplate);
}
GraphicsResources noResources;
GraphicsInterfaces noInterfaces;
std::vector<std::string> noExtensions;
- std::vector<std::string> noFeatures;
createTestsForAllStages(
name, inputColors, outputColors, testCodeFragments, specConstants, noPushConstants,
- noResources, noInterfaces, noExtensions, noFeatures, VulkanFeatures(),
+ noResources, noInterfaces, noExtensions, VulkanFeatures(),
tests, failResult, failMessageTemplate);
}
SpecConstants noSpecConstants;
PushConstants noPushConstants;
GraphicsInterfaces noInterfaces;
- std::vector<std::string> noFeatures;
createTestsForAllStages(
name, inputColors, outputColors, testCodeFragments, noSpecConstants, noPushConstants,
- resources, noInterfaces, extensions, noFeatures, vulkanFeatures,
- tests, failResult, failMessageTemplate);
-}
-
-inline void createTestsForAllStages (const std::string& name,
- const tcu::RGBA (&inputColors)[4],
- const tcu::RGBA (&outputColors)[4],
- const std::map<std::string, std::string>& testCodeFragments,
- const GraphicsResources& resources,
- const std::vector<std::string>& extensions,
- const std::vector<std::string>& features,
- tcu::TestCaseGroup* tests,
- VulkanFeatures vulkanFeatures = VulkanFeatures(),
- const qpTestResult failResult = QP_TEST_RESULT_FAIL,
- const std::string& failMessageTemplate = std::string())
-{
- SpecConstants noSpecConstants;
- PushConstants noPushConstants;
- GraphicsInterfaces noInterfaces;
-
- createTestsForAllStages(
- name, inputColors, outputColors, testCodeFragments, noSpecConstants, noPushConstants,
- resources, noInterfaces, extensions, features, vulkanFeatures,
+ resources, noInterfaces, extensions, vulkanFeatures,
tests, failResult, failMessageTemplate);
}
{
GraphicsResources noResources;
SpecConstants noSpecConstants;
- std::vector<std::string> noFeatures;
PushConstants noPushConstants;
createTestsForAllStages(
name, inputColors, outputColors, testCodeFragments, noSpecConstants, noPushConstants,
- noResources, interfaces, extensions, noFeatures, vulkanFeatures,
+ noResources, interfaces, extensions, vulkanFeatures,
tests, failResult, failMessageTemplate);
}
{
SpecConstants noSpecConstants;
GraphicsInterfaces noInterfaces;
- std::vector<std::string> noFeatures;
createTestsForAllStages(
name, inputColors, outputColors, testCodeFragments, noSpecConstants, pushConstants,
- resources, noInterfaces, extensions, noFeatures, vulkanFeatures,
+ resources, noInterfaces, extensions, vulkanFeatures,
tests, failResult, failMessageTemplate);
}
SpecConstants noSpecConstants;
PushConstants noPushConstants;
GraphicsInterfaces noInterfaces;
- std::vector<std::string> noFeatures;
std::vector<std::string> noExtensions;
VulkanFeatures vulkanFeatures = VulkanFeatures();
vulkanFeatures.coreFeatures.vertexPipelineStoresAndAtomics = DE_TRUE;
vulkanFeatures.coreFeatures.fragmentStoresAndAtomics = DE_FALSE;
createTestForStage(VK_SHADER_STAGE_VERTEX_BIT, "shader_vert", defaultColors, defaultColors, fragments, noSpecConstants,
- noPushConstants, resources, noInterfaces, noExtensions, noFeatures, vulkanFeatures, typeGroup.get());
+ noPushConstants, resources, noInterfaces, noExtensions, vulkanFeatures, typeGroup.get());
createTestForStage(VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, "shader_tessc", defaultColors, defaultColors, fragments, noSpecConstants,
- noPushConstants, resources, noInterfaces, noExtensions, noFeatures, vulkanFeatures, typeGroup.get());
+ noPushConstants, resources, noInterfaces, noExtensions, vulkanFeatures, typeGroup.get());
createTestForStage(VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, "shader_tesse", defaultColors, defaultColors, fragments, noSpecConstants,
- noPushConstants, resources, noInterfaces, noExtensions, noFeatures, vulkanFeatures, typeGroup.get());
+ noPushConstants, resources, noInterfaces, noExtensions, vulkanFeatures, typeGroup.get());
createTestForStage(VK_SHADER_STAGE_GEOMETRY_BIT, "shader_geom", defaultColors, defaultColors, fragments, noSpecConstants,
- noPushConstants, resources, noInterfaces, noExtensions, noFeatures, vulkanFeatures, typeGroup.get());
+ noPushConstants, resources, noInterfaces, noExtensions, vulkanFeatures, typeGroup.get());
vulkanFeatures.coreFeatures.vertexPipelineStoresAndAtomics = DE_FALSE;
vulkanFeatures.coreFeatures.fragmentStoresAndAtomics = DE_TRUE;
createTestForStage(VK_SHADER_STAGE_FRAGMENT_BIT, "shader_frag", defaultColors, defaultColors, fragments, noSpecConstants,
- noPushConstants, resources, noInterfaces, noExtensions, noFeatures, vulkanFeatures, typeGroup.get());
+ noPushConstants, resources, noInterfaces, noExtensions, vulkanFeatures, typeGroup.get());
if (testNdx == TESTTYPE_OPTYPEIMAGE_MISMATCH)
testtypeGroup->addChild(typeGroup.release());
SpecConstants noSpecConstants;
PushConstants noPushConstants;
GraphicsInterfaces noInterfaces;
- std::vector<std::string> noFeatures;
std::vector<std::string> noExtensions;
VulkanFeatures vulkanFeatures = VulkanFeatures();
getDefaultColors(defaultColors);
createTestForStage(VK_SHADER_STAGE_FRAGMENT_BIT, "shader_frag", defaultColors, defaultColors, fragments, noSpecConstants,
- noPushConstants, resources, noInterfaces, noExtensions, noFeatures, vulkanFeatures, descGroup.get());
+ noPushConstants, resources, noInterfaces, noExtensions, vulkanFeatures, descGroup.get());
readOpGroup->addChild(descGroup.release());
}
const string testName = chainOpTestNames[chainOpIdx] + string(sign == 0 ? "_u" : "_s") + de::toString(idxSize);
VulkanFeatures vulkanFeatures;
vector<string> extensions;
- vector<string> features;
SpecConstants noSpecConstants;
PushConstants noPushConstants;
GraphicsInterfaces noInterfaces;
if (idxSize == 16)
{
fragments["capability"] = "OpCapability Int16\n";
- features.push_back("shaderInt16");
+ vulkanFeatures.coreFeatures.shaderInt16 = VK_TRUE;
specs["convert"] = "OpUConvert";
specs["intdecl"] = " %u16 = OpTypeInt 16 0\n"
" %i16 = OpTypeInt 16 1\n";
else if (idxSize == 64)
{
fragments["capability"] = "OpCapability Int64\n";
- features.push_back("shaderInt64");
+ vulkanFeatures.coreFeatures.shaderInt64 = VK_TRUE;
specs["convert"] = "OpUConvert";
specs["intdecl"] = " %u64 = OpTypeInt 64 0\n"
" %i64 = OpTypeInt 64 1\n";
createTestsForAllStages(
testName.c_str(), defaultColors, defaultColors, fragments, noSpecConstants,
- noPushConstants, resources, noInterfaces, extensions, features, vulkanFeatures, structGroup.get());
+ noPushConstants, resources, noInterfaces, extensions, vulkanFeatures, structGroup.get());
}
}
}
map<string, string> specializations;
map<string, string> fragments;
SpecConstants specConstants;
- vector<string> features;
PushConstants noPushConstants;
GraphicsResources noResources;
GraphicsInterfaces noInterfaces;
std::vector<std::string> noExtensions;
+ VulkanFeatures requiredFeatures;
// Special SPIR-V code for SConvert-case
if (strcmp(cases[caseNdx].caseName, "sconvert") == 0)
{
- features.push_back("shaderInt16");
+ requiredFeatures.coreFeatures.shaderInt16 = VK_TRUE;
fragments["capability"] = "OpCapability Int16\n"; // Adds 16-bit integer capability
specializations["OPTYPE_DEFINITIONS"] = "%i16 = OpTypeInt 16 1\n"; // Adds 16-bit integer type
specializations["TYPE_CONVERT"] = "%sc_op32 = OpSConvert %i32 %sc_op\n"; // Converts 16-bit integer to 32-bit integer
// Special SPIR-V code for FConvert-case
if (strcmp(cases[caseNdx].caseName, "fconvert") == 0)
{
- features.push_back("shaderFloat64");
+ requiredFeatures.coreFeatures.shaderFloat64 = VK_TRUE;
fragments["capability"] = "OpCapability Float64\n"; // Adds 64-bit float capability
specializations["OPTYPE_DEFINITIONS"] = "%f64 = OpTypeFloat 64\n"; // Adds 64-bit float type
specializations["TYPE_CONVERT"] = "%sc_op32 = OpConvertFToS %i32 %sc_op\n"; // Converts 64-bit float to 32-bit integer
createTestsForAllStages(
cases[caseNdx].caseName, inputColors, cases[caseNdx].expectedColors, fragments, specConstants,
- noPushConstants, noResources, noInterfaces, noExtensions, features, VulkanFeatures(), group.get());
+ noPushConstants, noResources, noInterfaces, noExtensions, requiredFeatures, group.get());
}
const char decorations2[] =
for (vector<ConvertCase>::const_iterator test = testCases.begin(); test != testCases.end(); ++test)
{
map<string, string> fragments = getConvertCaseFragments(instruction, *test);
- vector<string> features;
VulkanFeatures vulkanFeatures;
GraphicsResources resources;
vector<string> extensions;
createTestsForAllStages(
test->m_name, defaultColors, defaultColors, fragments, noSpecConstants,
- noPushConstants, resources, noInterfaces, extensions, features, vulkanFeatures, group.get());
+ noPushConstants, resources, noInterfaces, extensions, vulkanFeatures, group.get());
}
return group.release();
}
SpecConstants noSpecConstants;
PushConstants noPushConstants;
GraphicsInterfaces noInterfaces;
- vector<string> noFeatures;
specs["op_code"] = testOp.opCode;
specs["num_data_points"] = de::toString(testOp.inputData.size() / N);
features.ext16BitStorage = EXT16BITSTORAGEFEATURES_UNIFORM_BUFFER_BLOCK;
createTestForStage(VK_SHADER_STAGE_FRAGMENT_BIT, testName.c_str(), defaultColors, defaultColors, fragments, noSpecConstants,
- noPushConstants, specResource, noInterfaces, extensions, noFeatures, features, testGroup.get(), QP_TEST_RESULT_FAIL, string(), true);
+ noPushConstants, specResource, noInterfaces, extensions, features, testGroup.get(), QP_TEST_RESULT_FAIL, string(), true);
}
return testGroup.release();
return str;
}
+static inline void requiredFeaturesFromStrings(const std::vector<std::string> &features, VulkanFeatures &requestedFeatures)
+{
+ for (deUint32 featureNdx = 0; featureNdx < features.size(); ++featureNdx)
+ {
+ const std::string& feature = features[featureNdx];
+
+ if (feature == "shaderInt16")
+ requestedFeatures.coreFeatures.shaderInt16 = VK_TRUE;
+ else if (feature == "shaderInt64")
+ requestedFeatures.coreFeatures.shaderInt64 = VK_TRUE;
+ else
+ DE_ASSERT(0); // Not implemented. Don't add to here. Just use VulkanFeatures
+ }
+}
+
template <class T>
class SpvAsmTypeTests : public tcu::TestCaseGroup
{
fragments["extension"] = spirvExtensions;
fragments["capability"] = spirvCapabilities;
- createTestsForAllStages(testName, defaultColors, defaultColors, fragments, resources, noExtensions, features, this, requiredFeatures);
+ requiredFeaturesFromStrings(features, requiredFeatures);
+
+ createTestsForAllStages(testName, defaultColors, defaultColors, fragments, resources, noExtensions, this, requiredFeatures);
}
template <class T>
fragments["extension"] = spirvExtensions;
fragments["capability"] = spirvCapabilities;
- createTestsForAllStages("switch", defaultColors, defaultColors, fragments, resources, noExtensions, features, this, requiredFeatures);
+ requiredFeaturesFromStrings(features, requiredFeatures);
+
+ createTestsForAllStages("switch", defaultColors, defaultColors, fragments, resources, noExtensions, this, requiredFeatures);
}
template <class T>
SpecConstants noSpecConstants;
PushConstants noPushConstants;
GraphicsInterfaces noInterfaces;
- std::vector<std::string> noFeatures;
std::vector<std::string> noExtensions;
VulkanFeatures vulkanFeatures = VulkanFeatures();
vulkanFeatures.coreFeatures.vertexPipelineStoresAndAtomics = DE_TRUE;
vulkanFeatures.coreFeatures.fragmentStoresAndAtomics = DE_FALSE;
createTestForStage(VK_SHADER_STAGE_VERTEX_BIT, "mat2x2_vert", defaultColors, defaultColors, fragments, noSpecConstants,
- noPushConstants, resources, noInterfaces, noExtensions, noFeatures, vulkanFeatures, group);
+ noPushConstants, resources, noInterfaces, noExtensions, vulkanFeatures, group);
createTestForStage(VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, "mat2x2_tessc", defaultColors, defaultColors, fragments, noSpecConstants,
- noPushConstants, resources, noInterfaces, noExtensions, noFeatures, vulkanFeatures, group);
+ noPushConstants, resources, noInterfaces, noExtensions, vulkanFeatures, group);
createTestForStage(VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, "mat2x2_tesse", defaultColors, defaultColors, fragments, noSpecConstants,
- noPushConstants, resources, noInterfaces, noExtensions, noFeatures, vulkanFeatures, group);
+ noPushConstants, resources, noInterfaces, noExtensions, vulkanFeatures, group);
createTestForStage(VK_SHADER_STAGE_GEOMETRY_BIT, "mat2x2_geom", defaultColors, defaultColors, fragments, noSpecConstants,
- noPushConstants, resources, noInterfaces, noExtensions, noFeatures, vulkanFeatures, group);
+ noPushConstants, resources, noInterfaces, noExtensions, vulkanFeatures, group);
vulkanFeatures.coreFeatures.vertexPipelineStoresAndAtomics = DE_FALSE;
vulkanFeatures.coreFeatures.fragmentStoresAndAtomics = DE_TRUE;
createTestForStage(VK_SHADER_STAGE_FRAGMENT_BIT, "mat2x2_frag", defaultColors, defaultColors, fragments, noSpecConstants,
- noPushConstants, resources, noInterfaces, noExtensions, noFeatures, vulkanFeatures, group);
+ noPushConstants, resources, noInterfaces, noExtensions, vulkanFeatures, group);
}
} // anonymous
PushConstants noPushConstants;
GraphicsInterfaces noInterfaces;
vector<string> extensions;
- vector<string> features;
map<string, string> noFragments;
StageToSpecConstantMap specConstantMap;
group->addChild(outputGroup);
- features.push_back("fragmentStoresAndAtomics");
+ VulkanFeatures requiredFeatures;
+ requiredFeatures.coreFeatures.fragmentStoresAndAtomics = VK_TRUE;
extensions.push_back("VK_KHR_storage_buffer_storage_class");
for (int paramIdx = 0; paramIdx < DE_LENGTH_OF_ARRAY(params); paramIdx++)
resources,
noInterfaces,
extensions,
- features,
- VulkanFeatures(),
+ requiredFeatures,
VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT,
QP_TEST_RESULT_FAIL,
string());
PushConstants noPushConstants;
GraphicsInterfaces noInterfaces;
vector<string> extensions;
- vector<string> features;
+ VulkanFeatures features;
map<string, string> noFragments;
StageToSpecConstantMap specConstantMap;
GraphicsResources resources;
getDefaultColors(defaultColors);
- features.push_back("fragmentStoresAndAtomics");
+ features.coreFeatures.fragmentStoresAndAtomics = VK_TRUE;
extensions.push_back("VK_KHR_storage_buffer_storage_class");
resources.outputs.push_back(Resource(BufferSp(new Float32Buffer(expectedOutput)), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));
noInterfaces,
extensions,
features,
- VulkanFeatures(),
VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT,
QP_TEST_RESULT_FAIL,
string());