blob: 479923e1e121af92bdcc2ba714cd585bcf98d28d [file] [log] [blame]
// Copyright 2022 The Dawn Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include "dawn/native/opengl/UtilsEGL.h"
#include <string>
#include "dawn/native/opengl/EGLFunctions.h"
namespace dawn::native::opengl {
const char* EGLErrorAsString(EGLint error) {
switch (error) {
case EGL_SUCCESS:
return "EGL_SUCCESS";
case EGL_NOT_INITIALIZED:
return "EGL_NOT_INITIALIZED";
case EGL_BAD_ACCESS:
return "EGL_BAD_ACCESS";
case EGL_BAD_ALLOC:
return "EGL_BAD_ALLOC";
case EGL_BAD_ATTRIBUTE:
return "EGL_BAD_ATTRIBUTE";
case EGL_BAD_CONTEXT:
return "EGL_BAD_CONTEXT";
case EGL_BAD_CONFIG:
return "EGL_BAD_CONFIG";
case EGL_BAD_CURRENT_SURFACE:
return "EGL_BAD_CURRENT_SURFACE";
case EGL_BAD_DISPLAY:
return "EGL_BAD_DISPLAY";
case EGL_BAD_SURFACE:
return "EGL_BAD_SURFACE";
case EGL_BAD_MATCH:
return "EGL_BAD_MATCH";
case EGL_BAD_PARAMETER:
return "EGL_BAD_PARAMETER";
case EGL_BAD_NATIVE_PIXMAP:
return "EGL_BAD_NATIVE_PIXMAP";
case EGL_BAD_NATIVE_WINDOW:
return "EGL_BAD_NATIVE_WINDOW";
case EGL_CONTEXT_LOST:
return "EGL_CONTEXT_LOST";
default:
return "<Unknown EGL error>";
}
}
MaybeError CheckEGL(const EGLFunctions& egl, EGLBoolean result, const char* context) {
if (DAWN_LIKELY(result == EGL_TRUE)) {
return {};
}
EGLint error = egl.GetError();
std::string message = std::string(context) + " failed with " + EGLErrorAsString(error);
if (error == EGL_BAD_ALLOC) {
return DAWN_OUT_OF_MEMORY_ERROR(message);
} else if (error == EGL_CONTEXT_LOST) {
return DAWN_DEVICE_LOST_ERROR(message);
} else {
return DAWN_INTERNAL_ERROR(message);
}
}
} // namespace dawn::native::opengl