// GENERATED FILE - DO NOT EDIT.
// Generated by gen_overlay_widgets.py using data from overlay_widgets.json.
//
// Copyright 2019 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.
//
// Overlay_autogen.cpp:
//   Autogenerated overlay widget declarations.

namespace gl
{
enum class WidgetId
{
    // Frames per second (Count/Second).
    FPS,
    // Last validation error (Text).
    VulkanLastValidationMessage,
    // Number of validation errors and warnings (Count).
    VulkanValidationMessageCount,
    // Number of RenderPasses in a frame (Count).
    VulkanRenderPassCount,
    // Number of buffers used in RenderPasses (Count).
    VulkanRenderPassBufferCount,
    // Secondary Command Buffer pool memory waste (Bytes).
    VulkanSecondaryCommandBufferPoolWaste,
    // Number of Descriptor Set writes in a frame (Count).
    VulkanWriteDescriptorSetCount,
    // Descriptor Set Allocations.
    VulkanDescriptorSetAllocations,
    // Shader Buffer Descriptor Set Cache Hit Rate.
    VulkanShaderBufferDSHitRate,
    // Buffer Allocations Made By vk::DynamicBuffer.
    VulkanDynamicBufferAllocations,

    InvalidEnum,
    EnumCount = InvalidEnum,
};

// We can use this "X" macro to generate multiple code patterns.
#define ANGLE_WIDGET_ID_X(PROC)                 \
    PROC(FPS)                                   \
    PROC(VulkanLastValidationMessage)           \
    PROC(VulkanValidationMessageCount)          \
    PROC(VulkanRenderPassCount)                 \
    PROC(VulkanRenderPassBufferCount)           \
    PROC(VulkanSecondaryCommandBufferPoolWaste) \
    PROC(VulkanWriteDescriptorSetCount)         \
    PROC(VulkanDescriptorSetAllocations)        \
    PROC(VulkanShaderBufferDSHitRate)           \
    PROC(VulkanDynamicBufferAllocations)

}  // namespace gl
