Commit a3f1981d by Jamie Madill Committed by Commit Bot

Add SwiftShader to command line arguments.

Also adds parsing SwiftShader to the test expectations code. Bug: angleproject:3876 Change-Id: I70e1475b62f86160d5a150218e792801fb0259bc Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1817109Reviewed-by: 's avatarAlexis Hétu <sugoi@chromium.org> Reviewed-by: 's avatarYuly Novikov <ynovikov@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent 35f01546
......@@ -22,9 +22,14 @@ const char *kUseAngleArg = "--use-angle=";
using DisplayTypeInfo = std::pair<const char *, EGLint>;
const DisplayTypeInfo kDisplayTypes[] = {
{"d3d9", EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE}, {"d3d11", EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE},
{"gl", EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE}, {"gles", EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE},
{"null", EGL_PLATFORM_ANGLE_TYPE_NULL_ANGLE}, {"vulkan", EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE}};
{"d3d9", EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE},
{"d3d11", EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE},
{"gl", EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE},
{"gles", EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE},
{"null", EGL_PLATFORM_ANGLE_TYPE_NULL_ANGLE},
{"vulkan", EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE},
{"swiftshader", EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE},
};
EGLint GetDisplayTypeFromArg(const char *displayTypeArg)
{
......@@ -40,6 +45,18 @@ EGLint GetDisplayTypeFromArg(const char *displayTypeArg)
std::cout << "Unknown ANGLE back-end API: " << displayTypeArg << std::endl;
return EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE;
}
EGLint GetDeviceTypeFromArg(const char *displayTypeArg)
{
if (strcmp(displayTypeArg, "swiftshader") == 0)
{
return EGL_PLATFORM_ANGLE_DEVICE_TYPE_SWIFTSHADER_ANGLE;
}
else
{
return EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE;
}
}
} // anonymous namespace
SampleApplication::SampleApplication(std::string name,
......@@ -60,7 +77,9 @@ SampleApplication::SampleApplication(std::string name,
if (argc > 1 && strncmp(argv[1], kUseAngleArg, strlen(kUseAngleArg)) == 0)
{
mPlatformParams.renderer = GetDisplayTypeFromArg(argv[1] + strlen(kUseAngleArg));
const char *arg = argv[1] + strlen(kUseAngleArg);
mPlatformParams.renderer = GetDisplayTypeFromArg(arg);
mPlatformParams.deviceType = GetDeviceTypeFromArg(arg);
}
// Load EGL library so we can initialize the display.
......
......@@ -90,15 +90,19 @@ const char *gTestExpectationsFiles[] = {
using APIInfo = std::pair<const char *, GPUTestConfig::API>;
const APIInfo gEGLDisplayAPIs[] = {
{"angle-d3d9", GPUTestConfig::kAPID3D9}, {"angle-d3d11", GPUTestConfig::kAPID3D11},
{"angle-gl", GPUTestConfig::kAPIGLDesktop}, {"angle-gles", GPUTestConfig::kAPIGLES},
{"angle-null", GPUTestConfig::kAPIUnknown}, {"angle-vulkan", GPUTestConfig::kAPIVulkan},
constexpr APIInfo kEGLDisplayAPIs[] = {
{"angle-d3d9", GPUTestConfig::kAPID3D9},
{"angle-d3d11", GPUTestConfig::kAPID3D11},
{"angle-gl", GPUTestConfig::kAPIGLDesktop},
{"angle-gles", GPUTestConfig::kAPIGLES},
{"angle-null", GPUTestConfig::kAPIUnknown},
{"angle-vulkan", GPUTestConfig::kAPIVulkan},
{"angle-swiftshader", GPUTestConfig::kAPISwiftShader},
};
const char *gdEQPEGLString = "--deqp-egl-display-type=";
const char *gANGLEEGLString = "--use-angle=";
const char *gdEQPCaseString = "--deqp-case=";
constexpr char kdEQPEGLString[] = "--deqp-egl-display-type=";
constexpr char kANGLEEGLString[] = "--use-angle=";
constexpr char kdEQPCaseString[] = "--deqp-case=";
std::array<char, 500> gCaseStringBuffer;
......@@ -125,7 +129,7 @@ const char *GetDefaultAPIName()
const APIInfo *FindAPIInfo(const std::string &arg)
{
for (auto &displayAPI : gEGLDisplayAPIs)
for (auto &displayAPI : kEGLDisplayAPIs)
{
if (arg == displayAPI.first)
{
......@@ -487,7 +491,7 @@ void dEQPTest<TestModuleIndex>::SetUpTestCase()
// Add init api.
const char *targetApi = gInitAPI ? gInitAPI->first : GetDefaultAPIName();
std::string apiArgString = std::string(gdEQPEGLString) + targetApi;
std::string apiArgString = std::string(kdEQPEGLString) + targetApi;
argv.push_back(apiArgString.c_str());
// Add config name
......@@ -616,14 +620,14 @@ void InitTestHarness(int *argc, char **argv)
int argIndex = 0;
while (argIndex < *argc)
{
if (strncmp(argv[argIndex], gdEQPEGLString, strlen(gdEQPEGLString)) == 0)
if (strncmp(argv[argIndex], kdEQPEGLString, strlen(kdEQPEGLString)) == 0)
{
HandleDisplayType(argv[argIndex] + strlen(gdEQPEGLString));
HandleDisplayType(argv[argIndex] + strlen(kdEQPEGLString));
DeleteArg(argc, argIndex, argv);
}
else if (strncmp(argv[argIndex], gANGLEEGLString, strlen(gANGLEEGLString)) == 0)
else if (strncmp(argv[argIndex], kANGLEEGLString, strlen(kANGLEEGLString)) == 0)
{
HandleDisplayType(argv[argIndex] + strlen(gANGLEEGLString));
HandleDisplayType(argv[argIndex] + strlen(kANGLEEGLString));
DeleteArg(argc, argIndex, argv);
}
else if (strncmp(argv[argIndex], gdEQPEGLConfigNameString,
......@@ -632,9 +636,9 @@ void InitTestHarness(int *argc, char **argv)
HandleEGLConfigName(argv[argIndex] + strlen(gdEQPEGLConfigNameString));
DeleteArg(argc, argIndex, argv);
}
else if (strncmp(argv[argIndex], gdEQPCaseString, strlen(gdEQPCaseString)) == 0)
else if (strncmp(argv[argIndex], kdEQPCaseString, strlen(kdEQPCaseString)) == 0)
{
HandleCaseName(argv[argIndex] + strlen(gdEQPCaseString), argc, argIndex, argv);
HandleCaseName(argv[argIndex] + strlen(kdEQPCaseString), argc, argIndex, argv);
argIndex++;
}
else
......
......@@ -97,6 +97,15 @@ ANGLEPlatform::ANGLEPlatform(angle::LogErrorFunc logErrorFunc)
}
#endif
#if (DE_OS == DE_OS_WIN32) || (DE_OS == DE_OS_UNIX)
{
std::vector<eglw::EGLAttrib> swsAttribs = initAttribs(
EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE, EGL_PLATFORM_ANGLE_DEVICE_TYPE_SWIFTSHADER_ANGLE);
m_nativeDisplayFactoryRegistry.registerFactory(new ANGLENativeDisplayFactory(
"angle-swiftshader", "ANGLE SwiftShader Display", swsAttribs, &mEvents));
}
#endif
{
std::vector<eglw::EGLAttrib> nullAttribs = initAttribs(EGL_PLATFORM_ANGLE_TYPE_NULL_ANGLE);
......
......@@ -509,7 +509,12 @@ inline bool IsGLES(const GPUTestConfig::API &api)
// Check whether the backend API has been set to Vulkan in the constructor
inline bool IsVulkan(const GPUTestConfig::API &api)
{
return (api == GPUTestConfig::kAPIVulkan);
return (api == GPUTestConfig::kAPIVulkan) || (api == GPUTestConfig::kAPISwiftShader);
}
inline bool IsSwiftShader(const GPUTestConfig::API &api)
{
return (api == GPUTestConfig::kAPISwiftShader);
}
} // anonymous namespace
......@@ -549,6 +554,7 @@ GPUTestConfig::GPUTestConfig()
mConditions[kConditionGLDesktop] = true;
mConditions[kConditionGLES] = true;
mConditions[kConditionVulkan] = true;
mConditions[kConditionSwiftShader] = true;
mConditions[kConditionNexus5X] = IsNexus5X();
mConditions[kConditionPixel2] = IsPixel2();
......@@ -563,6 +569,7 @@ GPUTestConfig::GPUTestConfig(const API &api) : GPUTestConfig()
mConditions[kConditionGLDesktop] = IsGLDesktop(api);
mConditions[kConditionGLES] = IsGLES(api);
mConditions[kConditionVulkan] = IsVulkan(api);
mConditions[kConditionSwiftShader] = IsSwiftShader(api);
}
// Return a const reference to the list of all pre-calculated conditions.
......
......@@ -23,6 +23,7 @@ struct GPUTestConfig
kAPIGLDesktop,
kAPIGLES,
kAPIVulkan,
kAPISwiftShader,
};
enum Condition
......@@ -61,6 +62,7 @@ struct GPUTestConfig
kConditionNexus5X,
kConditionPixel2,
kConditionNVIDIAQuadroP400,
kConditionSwiftShader,
kNumberOfConditions,
};
......
......@@ -70,6 +70,7 @@ enum Token
kConfigGLDesktop,
kConfigGLES,
kConfigVulkan,
kConfigSwiftShader,
// Android devices
kConfigNexus5X,
kConfigPixel2,
......@@ -144,6 +145,7 @@ const TokenInfo kTokenData[kNumberOfTokens] = {
{"opengl", GPUTestConfig::kConditionGLDesktop},
{"gles", GPUTestConfig::kConditionGLES},
{"vulkan", GPUTestConfig::kConditionVulkan},
{"swiftshader", GPUTestConfig::kConditionSwiftShader},
{"nexus5x", GPUTestConfig::kConditionNexus5X},
{"pixel2", GPUTestConfig::kConditionPixel2},
{"quadrop400", GPUTestConfig::kConditionNVIDIAQuadroP400},
......@@ -392,6 +394,7 @@ bool GPUTestExpectationsParser::parseLine(const GPUTestConfig &config,
case kConfigGLDesktop:
case kConfigGLES:
case kConfigVulkan:
case kConfigSwiftShader:
case kConfigNexus5X:
case kConfigPixel2:
case kConfigNVIDIAQuadroP400:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment