aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Joe Gregorio <jcgregorio@google.com>2018-05-29 13:56:27 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-05-29 18:20:46 +0000
commit8e9810ce0ff205f921e44e257adadecb7074386a (patch)
treeef511a6c8554c17f4030650f547454a4db542e4b
parentbfe959872ec7895d4aa6878a9fe189c37dffc99f (diff)
[fiddle] Init gpu using the GLTestContext.
The previous way was failing with SwiftShader. Bug: skia: Change-Id: I6f3937d4d3bc36851476e29be891dc0a38871ef0 Reviewed-on: https://skia-review.googlesource.com/130325 Commit-Queue: Joe Gregorio <jcgregorio@google.com> Reviewed-by: Brian Salomon <bsalomon@google.com> Reviewed-by: Mike Klein <mtklein@google.com>
-rw-r--r--docker/skia-release/Dockerfile17
-rw-r--r--tools/fiddle/egl_context.cpp76
-rw-r--r--tools/fiddle/fiddle_main.cpp6
-rw-r--r--tools/fiddle/fiddle_main.h8
-rw-r--r--tools/fiddle/null_context.cpp3
5 files changed, 38 insertions, 72 deletions
diff --git a/docker/skia-release/Dockerfile b/docker/skia-release/Dockerfile
index fcf9f6d61c..6c7e6ff642 100644
--- a/docker/skia-release/Dockerfile
+++ b/docker/skia-release/Dockerfile
@@ -17,11 +17,11 @@ ADD --chown=skia:skia https://storage.googleapis.com/swiftshader-binaries/OpenGL
ADD --chown=skia:skia https://storage.googleapis.com/swiftshader-binaries/OpenGL_ES/Latest/Linux/libEGL.so /usr/local/lib/libEGL.so
RUN cd /tmp \
&& git clone 'https://chromium.googlesource.com/chromium/tools/depot_tools.git' \
- && export PATH="/tmp/depot_tools:${PATH}" \
&& git clone https://swiftshader.googlesource.com/SwiftShader swiftshader \
&& mkdir -p /tmp/skia \
&& cd /tmp/skia \
- && fetch skia
+ && /tmp/depot_tools/fetch skia \
+ && cd skia
RUN mkdir -p /tmp/skia/skia/out/Static
RUN echo ' \n\
@@ -42,9 +42,14 @@ extra_ldflags = [ \n\
] ' > /tmp/skia/skia/out/Static/args.gn
RUN cd /tmp/skia/skia \
- && export PATH="/tmp/depot_tools:${PATH}" \
&& python tools/git-sync-deps \
&& ./bin/fetch-gn \
- && gn gen out/Static \
- && ninja -C out/Static \
- && cd out/Static \
+ && ./bin/gn gen out/Static \
+ && /tmp/depot_tools/ninja -C out/Static
+
+# Uncomment the lines below and update the ref to patch in a CL.
+#
+#RUN cd /tmp/skia/skia \
+# && git fetch https://skia.googlesource.com/skia refs/changes/25/130325/15 \
+# && git checkout FETCH_HEAD \
+# && /tmp/depot_tools/ninja -C out/Static
diff --git a/tools/fiddle/egl_context.cpp b/tools/fiddle/egl_context.cpp
index 7994b01a67..1dac076b66 100644
--- a/tools/fiddle/egl_context.cpp
+++ b/tools/fiddle/egl_context.cpp
@@ -9,78 +9,32 @@
#include "SkRefCnt.h"
#include "gl/GrGLFunctions.h"
#include "gl/GrGLInterface.h"
+#include "gl/GLTestContext.h"
#include <EGL/egl.h>
#include <GLES2/gl2.h>
#include <sstream>
-static const EGLint configAttribs[] = {
- EGL_SURFACE_TYPE, EGL_PBUFFER_BIT,
- EGL_BLUE_SIZE, 8,
- EGL_GREEN_SIZE, 8,
- EGL_RED_SIZE, 8,
- EGL_DEPTH_SIZE, 8,
- EGL_RENDERABLE_TYPE, EGL_OPENGL_BIT,
- EGL_NONE
-};
-
-static const int pbufferWidth = 9;
-static const int pbufferHeight = 9;
-
-static const EGLint pbufferAttribs[] = {
- EGL_WIDTH, pbufferWidth,
- EGL_HEIGHT, pbufferHeight,
- EGL_NONE,
-};
-
// create_grcontext implementation for EGL.
-sk_sp<GrContext> create_grcontext(std::ostringstream &driverinfo) {
- EGLDisplay eglDpy = eglGetDisplay(EGL_DEFAULT_DISPLAY);
- if (EGL_NO_DISPLAY == eglDpy) {
+sk_sp<GrContext> create_grcontext(std::ostringstream& driverinfo,
+ std::unique_ptr<sk_gpu_test::GLTestContext>* glContext) {
+ // We are leaking tc, but that's OK because fiddle is a short lived proces.
+ glContext->reset(sk_gpu_test::CreatePlatformGLTestContext(kGLES_GrGLStandard));
+ if (!glContext) {
return nullptr;
}
-
- EGLint major, minor;
- if (EGL_TRUE != eglInitialize(eglDpy, &major, &minor)) {
+ (*glContext)->makeCurrent();
+ sk_sp<GrContext> result = (*glContext)->makeGrContext(GrContextOptions());
+ if (!result) {
+ glContext->reset();
return nullptr;
}
- EGLint numConfigs;
- EGLConfig eglCfg;
- if (EGL_TRUE != eglChooseConfig(eglDpy, configAttribs, &eglCfg, 1, &numConfigs)) {
- return nullptr;
- }
-
- EGLSurface eglSurf = eglCreatePbufferSurface(eglDpy, eglCfg, pbufferAttribs);
- if (EGL_NO_SURFACE == eglSurf) {
- return nullptr;
- }
-
- if (EGL_TRUE != eglBindAPI(EGL_OPENGL_API)) {
- return nullptr;
- }
-
- EGLContext eglCtx = eglCreateContext(eglDpy, eglCfg, EGL_NO_CONTEXT, nullptr);
- if (EGL_NO_CONTEXT == eglCtx) {
- return nullptr;
- }
- if (EGL_FALSE == eglMakeCurrent(eglDpy, eglSurf, eglSurf, eglCtx)) {
- return nullptr;
- }
-
- driverinfo << "EGL " << major << "." << minor << "\n";
- GrGLGetStringProc getString = (GrGLGetStringProc )eglGetProcAddress("glGetString");
- driverinfo << "GL Versionr: " << getString(GL_VERSION) << "\n";
- driverinfo << "GL Vendor: " << getString(GL_VENDOR) << "\n";
- driverinfo << "GL Renderer: " << getString(GL_RENDERER) << "\n";
- driverinfo << "GL Extensions: " << getString(GL_EXTENSIONS) << "\n";
-
- auto interface = GrGLMakeNativeInterface();
- if (!interface) {
- return nullptr;
- }
- eglTerminate(eglDpy);
+ driverinfo << "GL Version: " << glGetString(GL_VERSION) << "\n";
+ driverinfo << "GL Vendor: " << glGetString(GL_VENDOR) << "\n";
+ driverinfo << "GL Renderer: " << glGetString(GL_RENDERER) << "\n";
+ driverinfo << "GL Extensions: " << glGetString(GL_EXTENSIONS) << "\n";
- return sk_sp<GrContext>(GrContext::MakeGL(interface));
+ return result;
}
diff --git a/tools/fiddle/fiddle_main.cpp b/tools/fiddle/fiddle_main.cpp
index 578f7cbf0c..f000025e6a 100644
--- a/tools/fiddle/fiddle_main.cpp
+++ b/tools/fiddle/fiddle_main.cpp
@@ -23,9 +23,8 @@ DEFINE_double(frame, 1.0, "A double value in [0, 1] that specifies the point in
#include "GrBackendSurface.h"
#include "GrContextPriv.h"
#include "GrGpu.h"
-
#include "GrTest.h"
-
+#include "gl/GLTestContext.h"
// Globals externed in fiddle_main.h
sk_sp<GrTexture> backingTexture; // not externed
@@ -283,7 +282,8 @@ int main(int argc, char** argv) {
rasterData = encode_snapshot(rasterSurface);
}
if (options.gpu) {
- sk_sp<GrContext> grContext = create_grcontext(gGLDriverInfo);
+ std::unique_ptr<sk_gpu_test::GLTestContext> glContext;
+ sk_sp<GrContext> grContext = create_grcontext(gGLDriverInfo, &glContext);
if (!grContext) {
fputs("Unable to get GrContext.\n", stderr);
} else {
diff --git a/tools/fiddle/fiddle_main.h b/tools/fiddle/fiddle_main.h
index 5492a424ea..ca41998cba 100644
--- a/tools/fiddle/fiddle_main.h
+++ b/tools/fiddle/fiddle_main.h
@@ -20,6 +20,7 @@
#include "skia.h"
#endif
+#include <memory>
#include <sstream>
extern GrBackendTexture backEndTexture;
@@ -30,6 +31,10 @@ extern sk_sp<SkImage> image;
extern double duration; // The total duration of the animation in seconds.
extern double frame; // A value in [0, 1] of where we are in the animation.
+namespace sk_gpu_test {
+class GLTestContext;
+}
+
struct DrawOptions {
DrawOptions(int w, int h, bool r, bool g, bool p, bool k, bool srgb, bool f16,
bool textOnly, const char* s,
@@ -86,6 +91,7 @@ extern void draw(SkCanvas*);
// There are different implementations of create_grcontext() for EGL, Mesa,
// and a fallback to a null context.
-extern sk_sp<GrContext> create_grcontext(std::ostringstream &driverinfo);
+extern sk_sp<GrContext> create_grcontext(std::ostringstream& driverinfo,
+ std::unique_ptr<sk_gpu_test::GLTestContext>* glContext);
#endif // fiddle_main_DEFINED
diff --git a/tools/fiddle/null_context.cpp b/tools/fiddle/null_context.cpp
index 3fe0054ecc..903ae10418 100644
--- a/tools/fiddle/null_context.cpp
+++ b/tools/fiddle/null_context.cpp
@@ -8,7 +8,8 @@
#include "fiddle_main.h"
// create_grcontext for when neither Mesa nor EGL are available.
-sk_sp<GrContext> create_grcontext(std::ostringstream &driverinfo) {
+sk_sp<GrContext> create_grcontext(std::ostringstream& driverinfo,
+ std::unique_ptr<sk_gpu_test::GLTestContext>* glContext) {
driverinfo << "(no GL driver available)";
return nullptr;
}