+ switch (type) {
+ case EGL_WINDOW_BIT:
+ func = "eglCreateWindowSurface";
+ swapBehavior = EGL_BUFFER_DESTROYED;
+ break;
+ case EGL_PIXMAP_BIT:
+ func = "eglCreatePixmapSurface";
+ renderBuffer = EGL_SINGLE_BUFFER;
+ break;
+ case EGL_PBUFFER_BIT:
+ func = "eglCreatePBufferSurface";
+ break;
+ default:
+ _eglLog(_EGL_WARNING, "Bad type in _eglInitSurface");
+ return EGL_FALSE;
+ }
+
+ if ((conf->SurfaceType & type) == 0)
+ /* The config can't be used to create a surface of this type */
+ return _eglError(EGL_BAD_MATCH, func);
+
+ _eglInitResource(&surf->Resource, sizeof(*surf), disp);
+ surf->Type = type;
+ surf->Config = conf;
+ surf->Lost = EGL_FALSE;
+
+ surf->Width = 0;
+ surf->Height = 0;
+ surf->TextureFormat = EGL_NO_TEXTURE;
+ surf->TextureTarget = EGL_NO_TEXTURE;
+ surf->MipmapTexture = EGL_FALSE;
+ surf->LargestPbuffer = EGL_FALSE;
+ surf->RequestedRenderBuffer = renderBuffer;
+ surf->ActiveRenderBuffer = renderBuffer;
+ surf->VGAlphaFormat = EGL_VG_ALPHA_FORMAT_NONPRE;
+ surf->VGColorspace = EGL_VG_COLORSPACE_sRGB;
+ surf->GLColorspace = EGL_GL_COLORSPACE_LINEAR_KHR;
+
+ surf->MipmapLevel = 0;
+ surf->MultisampleResolve = EGL_MULTISAMPLE_RESOLVE_DEFAULT;
+ surf->SwapBehavior = swapBehavior;
+
+ surf->HorizontalResolution = EGL_UNKNOWN;
+ surf->VerticalResolution = EGL_UNKNOWN;
+ surf->AspectRatio = EGL_UNKNOWN;
+
+ surf->PostSubBufferSupportedNV = EGL_FALSE;
+ surf->SetDamageRegionCalled = EGL_FALSE;
+ surf->BufferAgeRead = EGL_FALSE;
+
+ /* the default swap interval is 1 */
+ surf->SwapInterval = 1;
+
+ surf->HdrMetadata.display_primary_r.x = EGL_DONT_CARE;
+ surf->HdrMetadata.display_primary_r.y = EGL_DONT_CARE;
+ surf->HdrMetadata.display_primary_g.x = EGL_DONT_CARE;
+ surf->HdrMetadata.display_primary_g.y = EGL_DONT_CARE;
+ surf->HdrMetadata.display_primary_b.x = EGL_DONT_CARE;
+ surf->HdrMetadata.display_primary_b.y = EGL_DONT_CARE;
+ surf->HdrMetadata.white_point.x = EGL_DONT_CARE;
+ surf->HdrMetadata.white_point.y = EGL_DONT_CARE;
+ surf->HdrMetadata.max_luminance = EGL_DONT_CARE;
+ surf->HdrMetadata.min_luminance = EGL_DONT_CARE;
+ surf->HdrMetadata.max_cll = EGL_DONT_CARE;
+ surf->HdrMetadata.max_fall = EGL_DONT_CARE;
+
+ err = _eglParseSurfaceAttribList(surf, attrib_list);
+ if (err != EGL_SUCCESS)
+ return _eglError(err, func);
+
+ /* if EGL_LARGEST_PBUFFER in use, clamp width and height */
+ if (surf->LargestPbuffer) {
+ surf->Width = MIN2(surf->Width, _EGL_MAX_PBUFFER_WIDTH);
+ surf->Height = MIN2(surf->Height, _EGL_MAX_PBUFFER_HEIGHT);
+ }
+
+ surf->NativeSurface = native_surface;
+
+ return EGL_TRUE;