Implement missing EGL surface queries.
Fixes dEQP-EGL.functional.query_surface.* tests.
Change-Id: I9d0d2dee83140613af24471d350777959ee37565
Reviewed-on: https://swiftshader-review.googlesource.com/18488
Tested-by: Nicolas Capens <nicolascapens@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
diff --git a/src/OpenGL/libEGL/libEGL.cpp b/src/OpenGL/libEGL/libEGL.cpp
index 74510df..8e0be66 100644
--- a/src/OpenGL/libEGL/libEGL.cpp
+++ b/src/OpenGL/libEGL/libEGL.cpp
@@ -392,10 +392,10 @@
switch(attribute)
{
case EGL_VG_ALPHA_FORMAT:
- UNIMPLEMENTED(); // FIXME
+ *value = EGL_VG_ALPHA_FORMAT_NONPRE; // Default
break;
case EGL_VG_COLORSPACE:
- UNIMPLEMENTED(); // FIXME
+ *value = EGL_VG_COLORSPACE_sRGB; // Default
break;
case EGL_CONFIG_ID:
*value = eglSurface->getConfigID();
@@ -404,7 +404,7 @@
*value = eglSurface->getHeight();
break;
case EGL_HORIZONTAL_RESOLUTION:
- UNIMPLEMENTED(); // FIXME
+ *value = EGL_UNKNOWN;
break;
case EGL_LARGEST_PBUFFER:
if(eglSurface->isPBufferSurface()) // For a window or pixmap surface, the contents of *value are not modified.
@@ -413,13 +413,19 @@
}
break;
case EGL_MIPMAP_TEXTURE:
- UNIMPLEMENTED(); // FIXME
+ if(eglSurface->isPBufferSurface()) // For a window or pixmap surface, the contents of *value are not modified.
+ {
+ *value = EGL_FALSE; // UNIMPLEMENTED
+ }
break;
case EGL_MIPMAP_LEVEL:
- UNIMPLEMENTED(); // FIXME
+ if(eglSurface->isPBufferSurface()) // For a window or pixmap surface, the contents of *value are not modified.
+ {
+ *value = eglSurface->getMipmapLevel();
+ }
break;
case EGL_MULTISAMPLE_RESOLVE:
- UNIMPLEMENTED(); // FIXME
+ *value = eglSurface->getMultisampleResolve();
break;
case EGL_PIXEL_ASPECT_RATIO:
*value = eglSurface->getPixelAspectRatio();
@@ -431,13 +437,19 @@
*value = eglSurface->getSwapBehavior();
break;
case EGL_TEXTURE_FORMAT:
- *value = eglSurface->getTextureFormat();
+ if(eglSurface->isPBufferSurface()) // For a window or pixmap surface, the contents of *value are not modified.
+ {
+ *value = eglSurface->getTextureFormat();
+ }
break;
case EGL_TEXTURE_TARGET:
- *value = eglSurface->getTextureTarget();
+ if(eglSurface->isPBufferSurface()) // For a window or pixmap surface, the contents of *value are not modified.
+ {
+ *value = eglSurface->getTextureTarget();
+ }
break;
case EGL_VERTICAL_RESOLUTION:
- UNIMPLEMENTED(); // FIXME
+ *value = EGL_UNKNOWN;
break;
case EGL_WIDTH:
*value = eglSurface->getWidth();
@@ -544,22 +556,43 @@
switch(attribute)
{
- case EGL_SWAP_BEHAVIOR:
- if(value == EGL_BUFFER_PRESERVED)
+ case EGL_MIPMAP_LEVEL:
+ eglSurface->setMipmapLevel(value);
+ break;
+ case EGL_MULTISAMPLE_RESOLVE:
+ switch(value)
{
+ case EGL_MULTISAMPLE_RESOLVE_DEFAULT:
+ break;
+ case EGL_MULTISAMPLE_RESOLVE_BOX:
+ if(!(eglSurface->getSurfaceType() & EGL_MULTISAMPLE_RESOLVE_BOX_BIT))
+ {
+ return error(EGL_BAD_MATCH, EGL_FALSE);
+ }
+ break;
+ default:
+ return error(EGL_BAD_PARAMETER, EGL_FALSE);
+ }
+ eglSurface->setMultisampleResolve(value);
+ break;
+ case EGL_SWAP_BEHAVIOR:
+ switch(value)
+ {
+ case EGL_BUFFER_DESTROYED:
+ break;
+ case EGL_BUFFER_PRESERVED:
if(!(eglSurface->getSurfaceType() & EGL_SWAP_BEHAVIOR_PRESERVED_BIT))
{
return error(EGL_BAD_MATCH, EGL_FALSE);
}
- }
- else if(value != EGL_BUFFER_DESTROYED)
- {
+ break;
+ default:
return error(EGL_BAD_PARAMETER, EGL_FALSE);
}
eglSurface->setSwapBehavior(value);
break;
default:
- UNIMPLEMENTED(); // FIXME
+ return error(EGL_BAD_PARAMETER, EGL_FALSE);
}
return success(EGL_TRUE);