// 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 <>
CompositorTiming FromEGLenum<CompositorTiming>(EGLenum from)
{
    switch (from)
    {
        case EGL_COMPOSITE_DEADLINE_ANDROID:
            return CompositorTiming::CompositeDeadline;
        case EGL_COMPOSITE_INTERVAL_ANDROID:
            return CompositorTiming::CompositInterval;
        case EGL_COMPOSITE_TO_PRESENT_LATENCY_ANDROID:
            return CompositorTiming::CompositToPresentLatency;
        default:
            return CompositorTiming::InvalidEnum;
    }
}

EGLenum ToEGLenum(CompositorTiming from)
{
    switch (from)
    {
        case CompositorTiming::CompositeDeadline:
            return EGL_COMPOSITE_DEADLINE_ANDROID;
        case CompositorTiming::CompositInterval:
            return EGL_COMPOSITE_INTERVAL_ANDROID;
        case CompositorTiming::CompositToPresentLatency:
            return EGL_COMPOSITE_TO_PRESENT_LATENCY_ANDROID;
        default:
            UNREACHABLE();
            return 0;
    }
}

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;
    }
}

template <>
Timestamp FromEGLenum<Timestamp>(EGLenum from)
{
    switch (from)
    {
        case EGL_REQUESTED_PRESENT_TIME_ANDROID:
            return Timestamp::RequestedPresentTime;
        case EGL_RENDERING_COMPLETE_TIME_ANDROID:
            return Timestamp::RenderingCompleteTime;
        case EGL_COMPOSITION_LATCH_TIME_ANDROID:
            return Timestamp::CompositionLatchTime;
        case EGL_FIRST_COMPOSITION_START_TIME_ANDROID:
            return Timestamp::FirstCompositionStartTime;
        case EGL_LAST_COMPOSITION_START_TIME_ANDROID:
            return Timestamp::LastCompositionStartTime;
        case EGL_FIRST_COMPOSITION_GPU_FINISHED_TIME_ANDROID:
            return Timestamp::FirstCompositionGPUFinishedTime;
        case EGL_DISPLAY_PRESENT_TIME_ANDROID:
            return Timestamp::DisplayPresentTime;
        case EGL_DEQUEUE_READY_TIME_ANDROID:
            return Timestamp::DequeueReadyTime;
        case EGL_READS_DONE_TIME_ANDROID:
            return Timestamp::ReadsDoneTime;
        default:
            return Timestamp::InvalidEnum;
    }
}

EGLenum ToEGLenum(Timestamp from)
{
    switch (from)
    {
        case Timestamp::RequestedPresentTime:
            return EGL_REQUESTED_PRESENT_TIME_ANDROID;
        case Timestamp::RenderingCompleteTime:
            return EGL_RENDERING_COMPLETE_TIME_ANDROID;
        case Timestamp::CompositionLatchTime:
            return EGL_COMPOSITION_LATCH_TIME_ANDROID;
        case Timestamp::FirstCompositionStartTime:
            return EGL_FIRST_COMPOSITION_START_TIME_ANDROID;
        case Timestamp::LastCompositionStartTime:
            return EGL_LAST_COMPOSITION_START_TIME_ANDROID;
        case Timestamp::FirstCompositionGPUFinishedTime:
            return EGL_FIRST_COMPOSITION_GPU_FINISHED_TIME_ANDROID;
        case Timestamp::DisplayPresentTime:
            return EGL_DISPLAY_PRESENT_TIME_ANDROID;
        case Timestamp::DequeueReadyTime:
            return EGL_DEQUEUE_READY_TIME_ANDROID;
        case Timestamp::ReadsDoneTime:
            return EGL_READS_DONE_TIME_ANDROID;
        default:
            UNREACHABLE();
            return 0;
    }
}

}  // namespace egl
