Commit 1fce3283 by Jamie Madill Committed by Commit Bot

Samples: Add command line flag to select renderer.

This gives us the ability to test Vulkan without a special recompile, and keeps the default setting to the default ANGLE renderer. Only implemented for the hello_triangle sample currently. Also includes an extra error message for missing EGL config, which is where the Vulkan init fails right now, due to missing depth/stencil support. Also includes a hack to get Vulkan samples running without depth/ stencil. BUG=angleproject:2167 Change-Id: I6925b9b84956fb69cbf602a828ea95d8c7125b68 Reviewed-on: https://chromium-review.googlesource.com/707688Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent a4810f71
...@@ -19,8 +19,8 @@ ...@@ -19,8 +19,8 @@
class HelloTriangleSample : public SampleApplication class HelloTriangleSample : public SampleApplication
{ {
public: public:
HelloTriangleSample() HelloTriangleSample(EGLint displayType)
: SampleApplication("HelloTriangle", 1280, 720) : SampleApplication("HelloTriangle", 1280, 720, 2, 0, displayType)
{ {
} }
...@@ -87,6 +87,13 @@ class HelloTriangleSample : public SampleApplication ...@@ -87,6 +87,13 @@ class HelloTriangleSample : public SampleApplication
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
HelloTriangleSample app; EGLint displayType = EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE;
if (argc > 1)
{
displayType = GetDisplayTypeFromArg(argv[1]);
}
HelloTriangleSample app(displayType);
return app.run(); return app.run();
} }
...@@ -8,6 +8,20 @@ ...@@ -8,6 +8,20 @@
#include "EGLWindow.h" #include "EGLWindow.h"
#include "random_utils.h" #include "random_utils.h"
#include "angle_gl.h"
#include <iostream>
namespace
{
using DisplayTypeInfo = std::pair<const char *, EGLint>;
constexpr 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}};
} // anonymous namespace
SampleApplication::SampleApplication(const std::string &name, SampleApplication::SampleApplication(const std::string &name,
size_t width, size_t width,
size_t height, size_t height,
...@@ -25,8 +39,19 @@ SampleApplication::SampleApplication(const std::string &name, ...@@ -25,8 +39,19 @@ SampleApplication::SampleApplication(const std::string &name,
mEGLWindow->setConfigGreenBits(8); mEGLWindow->setConfigGreenBits(8);
mEGLWindow->setConfigBlueBits(8); mEGLWindow->setConfigBlueBits(8);
mEGLWindow->setConfigAlphaBits(8); mEGLWindow->setConfigAlphaBits(8);
mEGLWindow->setConfigDepthBits(24);
mEGLWindow->setConfigStencilBits(8); // The Vulkan back-end currently does not support depth/stencil.
// TODO(jmadill): Remove this hack once Vulkan supports more configs.
if (requestedRenderer == EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE)
{
mEGLWindow->setConfigDepthBits(0);
mEGLWindow->setConfigStencilBits(0);
}
else
{
mEGLWindow->setConfigDepthBits(24);
mEGLWindow->setConfigStencilBits(8);
}
// Disable vsync // Disable vsync
mEGLWindow->setSwapInterval(0); mEGLWindow->setSwapInterval(0);
...@@ -156,3 +181,17 @@ bool SampleApplication::popEvent(Event *event) ...@@ -156,3 +181,17 @@ bool SampleApplication::popEvent(Event *event)
{ {
return mOSWindow->popEvent(event); return mOSWindow->popEvent(event);
} }
EGLint GetDisplayTypeFromArg(const char *displayTypeArg)
{
for (const auto &displayTypeInfo : kDisplayTypes)
{
if (strcmp(displayTypeInfo.first, displayTypeArg) == 0)
{
return displayTypeInfo.second;
}
}
std::cout << "Unknown ANGLE back-end API: " << displayTypeArg << std::endl;
return EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE;
}
...@@ -61,4 +61,6 @@ class SampleApplication ...@@ -61,4 +61,6 @@ class SampleApplication
std::unique_ptr<OSWindow> mOSWindow; std::unique_ptr<OSWindow> mOSWindow;
}; };
EGLint GetDisplayTypeFromArg(const char *displayTypeArg);
#endif // SAMPLE_UTIL_SAMPLE_APPLICATION_H #endif // SAMPLE_UTIL_SAMPLE_APPLICATION_H
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#include <string.h> #include <string.h>
#include <cassert> #include <cassert>
#include <iostream>
#include <vector> #include <vector>
#include "EGLWindow.h" #include "EGLWindow.h"
...@@ -258,6 +259,7 @@ bool EGLWindow::initializeDisplayAndSurface(OSWindow *osWindow) ...@@ -258,6 +259,7 @@ bool EGLWindow::initializeDisplayAndSurface(OSWindow *osWindow)
if (!FindEGLConfig(mDisplay, configAttributes.data(), &mConfig)) if (!FindEGLConfig(mDisplay, configAttributes.data(), &mConfig))
{ {
std::cout << "Could not find a suitable EGL config!" << std::endl;
destroyGL(); destroyGL();
return false; return false;
} }
......
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