I wrote a simple lanczosScale shader and run it. `
takes 120ms to run. I expect it less than 5 ms. Where am I wrong?
----------------------Initialization GL Context-------------------
eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
EGLint majorVersion;
EGLint minorVersion;
eglInitialize(eglDisplay, &majorVersion, &minorVersion);
SkAssertResult(eglBindAPI(EGL_OPENGL_ES_API));
EGLint numConfigs = 0;
EGLint eglSampleCnt = 1;
const EGLint configAttribs[] = {
EGL_SURFACE_TYPE, EGL_PBUFFER_BIT,
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
EGL_RED_SIZE, 8,
EGL_GREEN_SIZE, 8,
EGL_BLUE_SIZE, 8,
EGL_ALPHA_SIZE, 8,
EGL_STENCIL_SIZE, 8,
EGL_SAMPLE_BUFFERS, eglSampleCnt ? 1 : 0,
EGL_SAMPLES, eglSampleCnt,
EGL_NONE
};
EGLConfig surfaceConfig;
SkAssertResult(eglChooseConfig(eglDisplay, configAttribs, &surfaceConfig, 1, &numConfigs));
SkASSERT(numConfigs > 0);
static const EGLint kEGLContextAttribsForOpenGLES[] = {EGL_CONTEXT_CLIENT_VERSION, 3,EGL_NONE};
eglContext = eglCreateContext(eglDisplay, surfaceConfig, nullptr, kEGLContextAttribsForOpenGLES);
EGLint pbufferAttribs[] = {
EGL_WIDTH, 2048,
EGL_HEIGHT, 2048,
EGL_LARGEST_PBUFFER, EGL_TRUE,
EGL_NONE,
};
eglSurface = eglCreatePbufferSurface(eglDisplay, surfaceConfig, pbufferAttribs);
SkASSERT(EGL_NO_SURFACE != eglSurface);
eglMakeCurrent(eglDisplay, eglSurface, eglSurface, eglContext);
directContext = GrDirectContext::MakeGL();
float originalWH[2] = {
std::ceil(float(inputImage->imageInfo().width())),
std::ceil(float(inputImage->imageInfo().height()))
};
SkImageInfo scaledInfoH = SkImageInfo::Make(int(originalWH[0] * scale), int(originalWH[1]), kRGBA_F16_SkColorType, kPremul_SkAlphaType, nullptr);
SkSamplingOptions linear(SkFilterMode::kLinear, SkMipmapMode::kNone);
SkRuntimeShaderBuilder scaleBuild(lanzcosShader.at("scaleH"));
scaleBuild.child("child") = inputImage->makeShader(SkTileMode::kDecal, SkTileMode::kDecal, linear, nullptr);
scaleBuild.uniform("scale") = 1.0f / scale;
---------------This line takes 120 ms to run------------------
sk_sp<SkImage> tmpImage(scaleBuild.makeImage(context, nullptr, scaledInfoH, false));
---------------This line takes 120 ms to run------------------