webdino / gecko-embedded

Main (meta) repository for Project GEM (Gecko Embedded)
https://gecko-embedded.org
22 stars 2 forks source link

RZ/G1E + VLP 2.1.0 or later + Gecko 60 で WebGL が正常動作しない #90

Open dynamis opened 5 years ago

dynamis commented 5 years ago

RZ/G1 シリーズの Gecko 60 では WebGL をサポートしているが、RZ/G1E + VLP 2.1.0 + Gecko 60 環境でのみ WebGL が動作しない問題が報告されている。

RZ/G1M 最新 VLP や、RZ/G1E の古い VLP では正常動作ているし、不具合のある環境でも about:config や https://webglreport.com/ などではサポートしていると表示されるため、API 有効化的には問題ないが何らかのエラーで WebGL コンテンツが正常出来ない。

まずはもう少し詳細な症状と原因の調査を行う必要がある。現時点ではプラリオリティ設定は無し。

ashie commented 5 years ago

私の方ではこの問題を追う時間を取れなさそうですが、meta-gecko-embeddedapitraceのレシピを入れてあるので、これを使うと(OpenGLのAPIコールにおいて)どの辺りで問題が発生しているか追いやすいです。ブラウザ側のリビルド無しで使用できます。apitraceを実機向けにビルドして、以下のような感じで実行します。

$ apitrace trace --api=egl --output=/tmp/dump.trace firefox

過去に別の問題で調べたときには、例えば以下のような感じのトレースを取れています(長いので先頭の一部のみ)。 動く条件でのトレースと動かない条件でのトレースをとり、止まっているところのC++のコードを探すと問題を把握しやすいです。

// process.name = "/usr/lib/firefox/firefox"
0 eglGetDisplay(display_id = 0xb6921120) = 0x1
1 eglInitialize(dpy = 0x1, major = NULL, minor = NULL) = EGL_TRUE
9 eglChooseConfig(dpy = 0x1, attrib_list = {EGL_SURFACE_TYPE, EGL_WINDOW_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_NONE}, configs = {0x2, 0x1, 0x3}, config_size = 64, num_config = &3) = EGL_TRUE
14 eglCreateWindowSurface(dpy = 0x1, config = 0x2, win = 0x93e7ba90, attrib_list = {}) = 0x93c4b400
15 eglBindAPI(api = EGL_OPENGL_ES_API) = EGL_TRUE
16 eglCreateContext(dpy = 0x1, config = 0x2, share_context = NULL, attrib_list = {EGL_CONTEXT_MAJOR_VERSION, 2, EGL_NONE}) = 0x93e29700
140 eglGetCurrentContext() = NULL
141 eglMakeCurrent(dpy = 0x1, draw = 0x93c4b400, read = 0x93c4b400, ctx = 0x93e29700) = EGL_TRUE
142 glViewport(x = 0, y = 0, width = 668, height = 343) // fake
143 glScissor(x = 0, y = 0, width = 668, height = 343) // fake
202 glGetIntegerv(pname = GL_VIEWPORT, params = {0, 0, 668, 343})
203 glGetIntegerv(pname = GL_SCISSOR_BOX, params = {0, 0, 668, 343})
204 glGetIntegerv(pname = GL_MAX_TEXTURE_SIZE, params = &4096)
205 glGetIntegerv(pname = GL_MAX_CUBE_MAP_TEXTURE_SIZE, params = &4096)
206 glGetIntegerv(pname = GL_MAX_RENDERBUFFER_SIZE, params = &4096)
207 glGetIntegerv(pname = GL_MAX_VIEWPORT_DIMS, params = {4096, 4096})
208 glGetIntegerv(pname = GL_MAX_SAMPLES, params = &4)
209 glBindFramebuffer(target = GL_FRAMEBUFFER, framebuffer = 0)
210 eglGetCurrentContext() = 0x93e29700
211 eglGetCurrentContext() = 0x93e29700
212 eglGetCurrentContext() = 0x93e29700
213 glBlendFuncSeparate(sfactorRGB = GL_ONE, dfactorRGB = GL_ONE_MINUS_SRC_ALPHA, sfactorAlpha = GL_ONE, dfactorAlpha = GL_ONE_MINUS_SRC_ALPHA)
214 glEnable(cap = GL_BLEND)
215 glCreateShader(type = GL_VERTEX_SHADER) = 70001
216 glShaderSource(shader = 70001, count = 1, string = &"#ifdef GL_ES

#5027@ClearCode

ashie commented 5 years ago

qapitraceというGUIツールもあって、PC上で実機のダンプを読み込ませることもできます。 このツールである程度描画をPC上で再現させることもできます。

dynamis commented 5 years ago

デバッグツール情報ありがとうございますっ! まだタイミングなどは未決定ですが、調査を始める際にはこちら参考にさせて頂きます。

cosmo0920 commented 5 years ago

実際にapitraceを使用する際に僕は以下のようにしてデバッグしました。

これらの記事の方がまとまっていて概要は掴みやすいと思います。