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="; ...@@ -22,9 +22,14 @@ const char *kUseAngleArg = "--use-angle=";
using DisplayTypeInfo = std::pair<const char *, EGLint>; using DisplayTypeInfo = std::pair<const char *, EGLint>;
const DisplayTypeInfo kDisplayTypes[] = { const DisplayTypeInfo kDisplayTypes[] = {
{"d3d9", EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE}, {"d3d11", EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE}, {"d3d9", EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE},
{"gl", EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE}, {"gles", EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE}, {"d3d11", EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE},
{"null", EGL_PLATFORM_ANGLE_TYPE_NULL_ANGLE}, {"vulkan", EGL_PLATFORM_ANGLE_TYPE_VULKAN_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) EGLint GetDisplayTypeFromArg(const char *displayTypeArg)
{ {
...@@ -40,6 +45,18 @@ EGLint GetDisplayTypeFromArg(const char *displayTypeArg) ...@@ -40,6 +45,18 @@ EGLint GetDisplayTypeFromArg(const char *displayTypeArg)
std::cout << "Unknown ANGLE back-end API: " << displayTypeArg << std::endl; std::cout << "Unknown ANGLE back-end API: " << displayTypeArg << std::endl;
return EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE; 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 } // anonymous namespace
SampleApplication::SampleApplication(std::string name, SampleApplication::SampleApplication(std::string name,
...@@ -60,7 +77,9 @@ SampleApplication::SampleApplication(std::string name, ...@@ -60,7 +77,9 @@ SampleApplication::SampleApplication(std::string name,
if (argc > 1 && strncmp(argv[1], kUseAngleArg, strlen(kUseAngleArg)) == 0) 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. // Load EGL library so we can initialize the display.
......
...@@ -90,15 +90,19 @@ const char *gTestExpectationsFiles[] = { ...@@ -90,15 +90,19 @@ const char *gTestExpectationsFiles[] = {
using APIInfo = std::pair<const char *, GPUTestConfig::API>; using APIInfo = std::pair<const char *, GPUTestConfig::API>;
const APIInfo gEGLDisplayAPIs[] = { constexpr APIInfo kEGLDisplayAPIs[] = {
{"angle-d3d9", GPUTestConfig::kAPID3D9}, {"angle-d3d11", GPUTestConfig::kAPID3D11}, {"angle-d3d9", GPUTestConfig::kAPID3D9},
{"angle-gl", GPUTestConfig::kAPIGLDesktop}, {"angle-gles", GPUTestConfig::kAPIGLES}, {"angle-d3d11", GPUTestConfig::kAPID3D11},
{"angle-null", GPUTestConfig::kAPIUnknown}, {"angle-vulkan", GPUTestConfig::kAPIVulkan}, {"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="; constexpr char kdEQPEGLString[] = "--deqp-egl-display-type=";
const char *gANGLEEGLString = "--use-angle="; constexpr char kANGLEEGLString[] = "--use-angle=";
const char *gdEQPCaseString = "--deqp-case="; constexpr char kdEQPCaseString[] = "--deqp-case=";
std::array<char, 500> gCaseStringBuffer; std::array<char, 500> gCaseStringBuffer;
...@@ -125,7 +129,7 @@ const char *GetDefaultAPIName() ...@@ -125,7 +129,7 @@ const char *GetDefaultAPIName()
const APIInfo *FindAPIInfo(const std::string &arg) const APIInfo *FindAPIInfo(const std::string &arg)
{ {
for (auto &displayAPI : gEGLDisplayAPIs) for (auto &displayAPI : kEGLDisplayAPIs)
{ {
if (arg == displayAPI.first) if (arg == displayAPI.first)
{ {
...@@ -487,7 +491,7 @@ void dEQPTest<TestModuleIndex>::SetUpTestCase() ...@@ -487,7 +491,7 @@ void dEQPTest<TestModuleIndex>::SetUpTestCase()
// Add init api. // Add init api.
const char *targetApi = gInitAPI ? gInitAPI->first : GetDefaultAPIName(); 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()); argv.push_back(apiArgString.c_str());
// Add config name // Add config name
...@@ -616,14 +620,14 @@ void InitTestHarness(int *argc, char **argv) ...@@ -616,14 +620,14 @@ void InitTestHarness(int *argc, char **argv)
int argIndex = 0; int argIndex = 0;
while (argIndex < *argc) 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); 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); DeleteArg(argc, argIndex, argv);
} }
else if (strncmp(argv[argIndex], gdEQPEGLConfigNameString, else if (strncmp(argv[argIndex], gdEQPEGLConfigNameString,
...@@ -632,9 +636,9 @@ void InitTestHarness(int *argc, char **argv) ...@@ -632,9 +636,9 @@ void InitTestHarness(int *argc, char **argv)
HandleEGLConfigName(argv[argIndex] + strlen(gdEQPEGLConfigNameString)); HandleEGLConfigName(argv[argIndex] + strlen(gdEQPEGLConfigNameString));
DeleteArg(argc, argIndex, argv); 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++; argIndex++;
} }
else else
......
...@@ -97,6 +97,15 @@ ANGLEPlatform::ANGLEPlatform(angle::LogErrorFunc logErrorFunc) ...@@ -97,6 +97,15 @@ ANGLEPlatform::ANGLEPlatform(angle::LogErrorFunc logErrorFunc)
} }
#endif #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); std::vector<eglw::EGLAttrib> nullAttribs = initAttribs(EGL_PLATFORM_ANGLE_TYPE_NULL_ANGLE);
......
...@@ -509,7 +509,12 @@ inline bool IsGLES(const GPUTestConfig::API &api) ...@@ -509,7 +509,12 @@ inline bool IsGLES(const GPUTestConfig::API &api)
// Check whether the backend API has been set to Vulkan in the constructor // Check whether the backend API has been set to Vulkan in the constructor
inline bool IsVulkan(const GPUTestConfig::API &api) 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 } // anonymous namespace
...@@ -549,6 +554,7 @@ GPUTestConfig::GPUTestConfig() ...@@ -549,6 +554,7 @@ GPUTestConfig::GPUTestConfig()
mConditions[kConditionGLDesktop] = true; mConditions[kConditionGLDesktop] = true;
mConditions[kConditionGLES] = true; mConditions[kConditionGLES] = true;
mConditions[kConditionVulkan] = true; mConditions[kConditionVulkan] = true;
mConditions[kConditionSwiftShader] = true;
mConditions[kConditionNexus5X] = IsNexus5X(); mConditions[kConditionNexus5X] = IsNexus5X();
mConditions[kConditionPixel2] = IsPixel2(); mConditions[kConditionPixel2] = IsPixel2();
...@@ -563,6 +569,7 @@ GPUTestConfig::GPUTestConfig(const API &api) : GPUTestConfig() ...@@ -563,6 +569,7 @@ GPUTestConfig::GPUTestConfig(const API &api) : GPUTestConfig()
mConditions[kConditionGLDesktop] = IsGLDesktop(api); mConditions[kConditionGLDesktop] = IsGLDesktop(api);
mConditions[kConditionGLES] = IsGLES(api); mConditions[kConditionGLES] = IsGLES(api);
mConditions[kConditionVulkan] = IsVulkan(api); mConditions[kConditionVulkan] = IsVulkan(api);
mConditions[kConditionSwiftShader] = IsSwiftShader(api);
} }
// Return a const reference to the list of all pre-calculated conditions. // Return a const reference to the list of all pre-calculated conditions.
......
...@@ -23,6 +23,7 @@ struct GPUTestConfig ...@@ -23,6 +23,7 @@ struct GPUTestConfig
kAPIGLDesktop, kAPIGLDesktop,
kAPIGLES, kAPIGLES,
kAPIVulkan, kAPIVulkan,
kAPISwiftShader,
}; };
enum Condition enum Condition
...@@ -61,6 +62,7 @@ struct GPUTestConfig ...@@ -61,6 +62,7 @@ struct GPUTestConfig
kConditionNexus5X, kConditionNexus5X,
kConditionPixel2, kConditionPixel2,
kConditionNVIDIAQuadroP400, kConditionNVIDIAQuadroP400,
kConditionSwiftShader,
kNumberOfConditions, kNumberOfConditions,
}; };
......
...@@ -70,6 +70,7 @@ enum Token ...@@ -70,6 +70,7 @@ enum Token
kConfigGLDesktop, kConfigGLDesktop,
kConfigGLES, kConfigGLES,
kConfigVulkan, kConfigVulkan,
kConfigSwiftShader,
// Android devices // Android devices
kConfigNexus5X, kConfigNexus5X,
kConfigPixel2, kConfigPixel2,
...@@ -144,6 +145,7 @@ const TokenInfo kTokenData[kNumberOfTokens] = { ...@@ -144,6 +145,7 @@ const TokenInfo kTokenData[kNumberOfTokens] = {
{"opengl", GPUTestConfig::kConditionGLDesktop}, {"opengl", GPUTestConfig::kConditionGLDesktop},
{"gles", GPUTestConfig::kConditionGLES}, {"gles", GPUTestConfig::kConditionGLES},
{"vulkan", GPUTestConfig::kConditionVulkan}, {"vulkan", GPUTestConfig::kConditionVulkan},
{"swiftshader", GPUTestConfig::kConditionSwiftShader},
{"nexus5x", GPUTestConfig::kConditionNexus5X}, {"nexus5x", GPUTestConfig::kConditionNexus5X},
{"pixel2", GPUTestConfig::kConditionPixel2}, {"pixel2", GPUTestConfig::kConditionPixel2},
{"quadrop400", GPUTestConfig::kConditionNVIDIAQuadroP400}, {"quadrop400", GPUTestConfig::kConditionNVIDIAQuadroP400},
...@@ -392,6 +394,7 @@ bool GPUTestExpectationsParser::parseLine(const GPUTestConfig &config, ...@@ -392,6 +394,7 @@ bool GPUTestExpectationsParser::parseLine(const GPUTestConfig &config,
case kConfigGLDesktop: case kConfigGLDesktop:
case kConfigGLES: case kConfigGLES:
case kConfigVulkan: case kConfigVulkan:
case kConfigSwiftShader:
case kConfigNexus5X: case kConfigNexus5X:
case kConfigPixel2: case kConfigPixel2:
case kConfigNVIDIAQuadroP400: 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