// GENERATED FILE - DO NOT EDIT.
// Generated by gen_packed_gl_enums.py using data from packed_egl_enums.json.
//
// Copyright 2018 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// PackedEGLEnums_autogen.cpp:
//   Implements ANGLE-specific enums classes for EGLenums and functions operating
//   on them.

#include "common/PackedEGLEnums_autogen.h"
#include "common/debug.h"

namespace egl
{

template <>
MessageType FromEGLenum<MessageType>(EGLenum from)
{
    switch (from)
    {
        case EGL_DEBUG_MSG_CRITICAL_KHR:
            return MessageType::Critical;
        case EGL_DEBUG_MSG_ERROR_KHR:
            return MessageType::Error;
        case EGL_DEBUG_MSG_WARN_KHR:
            return MessageType::Warn;
        case EGL_DEBUG_MSG_INFO_KHR:
            return MessageType::Info;
        default:
            return MessageType::InvalidEnum;
    }
}

EGLenum ToEGLenum(MessageType from)
{
    switch (from)
    {
        case MessageType::Critical:
            return EGL_DEBUG_MSG_CRITICAL_KHR;
        case MessageType::Error:
            return EGL_DEBUG_MSG_ERROR_KHR;
        case MessageType::Warn:
            return EGL_DEBUG_MSG_WARN_KHR;
        case MessageType::Info:
            return EGL_DEBUG_MSG_INFO_KHR;
        default:
            UNREACHABLE();
            return 0;
    }
}

template <>
ObjectType FromEGLenum<ObjectType>(EGLenum from)
{
    switch (from)
    {
        case EGL_OBJECT_THREAD_KHR:
            return ObjectType::Thread;
        case EGL_OBJECT_DISPLAY_KHR:
            return ObjectType::Display;
        case EGL_OBJECT_CONTEXT_KHR:
            return ObjectType::Context;
        case EGL_OBJECT_SURFACE_KHR:
            return ObjectType::Surface;
        case EGL_OBJECT_IMAGE_KHR:
            return ObjectType::Image;
        case EGL_OBJECT_SYNC_KHR:
            return ObjectType::Sync;
        case EGL_OBJECT_STREAM_KHR:
            return ObjectType::Stream;
        default:
            return ObjectType::InvalidEnum;
    }
}

EGLenum ToEGLenum(ObjectType from)
{
    switch (from)
    {
        case ObjectType::Thread:
            return EGL_OBJECT_THREAD_KHR;
        case ObjectType::Display:
            return EGL_OBJECT_DISPLAY_KHR;
        case ObjectType::Context:
            return EGL_OBJECT_CONTEXT_KHR;
        case ObjectType::Surface:
            return EGL_OBJECT_SURFACE_KHR;
        case ObjectType::Image:
            return EGL_OBJECT_IMAGE_KHR;
        case ObjectType::Sync:
            return EGL_OBJECT_SYNC_KHR;
        case ObjectType::Stream:
            return EGL_OBJECT_STREAM_KHR;
        default:
            UNREACHABLE();
            return 0;
    }
}

template <>
TextureFormat FromEGLenum<TextureFormat>(EGLenum from)
{
    switch (from)
    {
        case EGL_NO_TEXTURE:
            return TextureFormat::NoTexture;
        case EGL_TEXTURE_RGB:
            return TextureFormat::RGB;
        case EGL_TEXTURE_RGBA:
            return TextureFormat::RGBA;
        default:
            return TextureFormat::InvalidEnum;
    }
}

EGLenum ToEGLenum(TextureFormat from)
{
    switch (from)
    {
        case TextureFormat::NoTexture:
            return EGL_NO_TEXTURE;
        case TextureFormat::RGB:
            return EGL_TEXTURE_RGB;
        case TextureFormat::RGBA:
            return EGL_TEXTURE_RGBA;
        default:
            UNREACHABLE();
            return 0;
    }
}

}  // namespace egl
