aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYahan Zhou <yahan@google.com>2018-05-07 13:45:10 -0700
committerYahan Zhou <yahan@google.com>2018-05-07 13:55:50 -0700
commit794b7971fa1e293633ba0fafcbd3df6c97e1a5b6 (patch)
treecb4e6bfcd994d3f1131365cb9772d41fffa5a832
parent068717010e0481268c3abc23068cd7ec436f1253 (diff)
downloaddevice_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.cpp30
-rw-r--r--system/GLESv2/gl2.cpp28
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;
}