diff options
author | Yahan Zhou <yahan@google.com> | 2018-05-07 13:45:10 -0700 |
---|---|---|
committer | Yahan Zhou <yahan@google.com> | 2018-05-07 13:55:50 -0700 |
commit | 794b7971fa1e293633ba0fafcbd3df6c97e1a5b6 (patch) | |
tree | cb4e6bfcd994d3f1131365cb9772d41fffa5a832 | |
parent | 068717010e0481268c3abc23068cd7ec436f1253 (diff) | |
download | device_generic_goldfish-opengl-794b7971fa1e293633ba0fafcbd3df6c97e1a5b6.tar.gz device_generic_goldfish-opengl-794b7971fa1e293633ba0fafcbd3df6c97e1a5b6.tar.bz2 device_generic_goldfish-opengl-794b7971fa1e293633ba0fafcbd3df6c97e1a5b6.zip |
Fix EGL image regressions in CTS dEQP
We got a crash when calling glEGLImageTargetRenderbufferStorageOES with
a texture backed EGL image. In fact, we never support this use case
correctly.
This CL fixes the crash. The real support will be left for future work.
This cl does not impact real devices.
BUG: 78918794
Test: atest CtsDeqpTestCases
Change-Id: I33ce76401bc390cba129583edffa581d68d45b68
-rw-r--r-- | system/GLESv1/gl.cpp | 30 | ||||
-rw-r--r-- | system/GLESv2/gl2.cpp | 28 |
2 files changed, 34 insertions, 24 deletions
diff --git a/system/GLESv1/gl.cpp b/system/GLESv1/gl.cpp index 2020a725..6e07004e 100644 --- a/system/GLESv1/gl.cpp +++ b/system/GLESv1/gl.cpp @@ -86,27 +86,31 @@ void glEGLImageTargetTexture2DOES(void * self, GLenum target, GLeglImageOES img) } } -void glEGLImageTargetRenderbufferStorageOES(void *self, GLenum target, GLeglImageOES image) +void glEGLImageTargetRenderbufferStorageOES(void *self, GLenum target, GLeglImageOES img) { (void)self; (void)target; - DBG("glEGLImageTargetRenderbufferStorageOES v1 target=%#x image=%p", - target, image); + DBG("glEGLImageTargetRenderbufferStorageOES v1 image=%p\n", img); //TODO: check error - we don't have a way to set gl error - android_native_buffer_t* native_buffer = ((EGLImage_t*)image)->native_buffer; + EGLImage_t *image = (EGLImage_t*)img; - if (native_buffer->common.magic != ANDROID_NATIVE_BUFFER_MAGIC) { - return; - } + if (image->target == EGL_NATIVE_BUFFER_ANDROID) { + android_native_buffer_t* native_buffer = ((EGLImage_t*)image)->native_buffer; - if (native_buffer->common.version != sizeof(android_native_buffer_t)) { - return; - } + if (native_buffer->common.magic != ANDROID_NATIVE_BUFFER_MAGIC) { + return; + } - DEFINE_AND_VALIDATE_HOST_CONNECTION(); - rcEnc->rcBindRenderbuffer(rcEnc, - ((cb_handle_t *)(native_buffer->handle))->hostHandle); + if (native_buffer->common.version != sizeof(android_native_buffer_t)) { + return; + } + + DEFINE_AND_VALIDATE_HOST_CONNECTION(); + rcEnc->rcBindRenderbuffer(rcEnc, ((cb_handle_t *)(native_buffer->handle))->hostHandle); + } else { + //TODO + } return; } diff --git a/system/GLESv2/gl2.cpp b/system/GLESv2/gl2.cpp index 283bd95f..331da78a 100644 --- a/system/GLESv2/gl2.cpp +++ b/system/GLESv2/gl2.cpp @@ -88,25 +88,31 @@ void glEGLImageTargetTexture2DOES(void * self, GLenum target, GLeglImageOES img) } } -void glEGLImageTargetRenderbufferStorageOES(void *self, GLenum target, GLeglImageOES image) +void glEGLImageTargetRenderbufferStorageOES(void *self, GLenum target, GLeglImageOES img) { (void)self; (void)target; - DBG("glEGLImageTargetRenderbufferStorageOES v2 image=%p\n", image); + DBG("glEGLImageTargetRenderbufferStorageOES v2 image=%p\n", img); //TODO: check error - we don't have a way to set gl error - android_native_buffer_t* native_buffer = ((EGLImage_t*)image)->native_buffer; + EGLImage_t *image = (EGLImage_t*)img; - if (native_buffer->common.magic != ANDROID_NATIVE_BUFFER_MAGIC) { - return; - } + if (image->target == EGL_NATIVE_BUFFER_ANDROID) { + android_native_buffer_t* native_buffer = ((EGLImage_t*)image)->native_buffer; - if (native_buffer->common.version != sizeof(android_native_buffer_t)) { - return; - } + if (native_buffer->common.magic != ANDROID_NATIVE_BUFFER_MAGIC) { + return; + } - DEFINE_AND_VALIDATE_HOST_CONNECTION(); - rcEnc->rcBindRenderbuffer(rcEnc, ((cb_handle_t *)(native_buffer->handle))->hostHandle); + if (native_buffer->common.version != sizeof(android_native_buffer_t)) { + return; + } + + DEFINE_AND_VALIDATE_HOST_CONNECTION(); + rcEnc->rcBindRenderbuffer(rcEnc, ((cb_handle_t *)(native_buffer->handle))->hostHandle); + } else { + //TODO + } return; } |