/* Copyright (c) 2015-2016 The Khronos Group Inc.
 * Copyright (c) 2015-2016 Valve Corporation
 * Copyright (c) 2015-2016 LunarG, Inc.
 * Copyright (C) 2015-2016 Google Inc.
 *
 * 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.
 *
 * Author: Courtney Goeltzenleuchter <courtneygo@google.com>
 * Author: Tobin Ehlis <tobine@google.com>
 * Author: Chris Forbes <chrisf@ijw.co.nz>
 * Author: Mark Lobodzinski <mark@lunarg.com>
 */
#ifndef CORE_VALIDATION_ERROR_ENUMS_H_
#define CORE_VALIDATION_ERROR_ENUMS_H_

// Mem Tracker ERROR codes
enum MEM_TRACK_ERROR {
    MEMTRACK_NONE,
    MEMTRACK_INVALID_CB,
    MEMTRACK_INVALID_MEM_OBJ,
    MEMTRACK_INVALID_ALIASING,
    MEMTRACK_INTERNAL_ERROR,
    MEMTRACK_FREED_MEM_REF,
    MEMTRACK_INVALID_OBJECT,
    MEMTRACK_MEMORY_LEAK,
    MEMTRACK_INVALID_STATE,
    MEMTRACK_RESET_CB_WHILE_IN_FLIGHT,
    MEMTRACK_INVALID_FENCE_STATE,
    MEMTRACK_REBIND_OBJECT,
    MEMTRACK_INVALID_USAGE_FLAG,
    MEMTRACK_INVALID_MAP,
    MEMTRACK_INVALID_MEM_TYPE,
    MEMTRACK_INVALID_MEM_REGION,
    MEMTRACK_OBJECT_NOT_BOUND,
};

// Draw State ERROR codes
enum DRAW_STATE_ERROR {
    DRAWSTATE_NONE,
    DRAWSTATE_INTERNAL_ERROR,
    DRAWSTATE_NO_PIPELINE_BOUND,
    DRAWSTATE_INVALID_SET,
    DRAWSTATE_INVALID_RENDER_AREA,
    DRAWSTATE_INVALID_LAYOUT,
    DRAWSTATE_INVALID_IMAGE_LAYOUT,
    DRAWSTATE_INVALID_PIPELINE,
    DRAWSTATE_INVALID_PIPELINE_CREATE_STATE,
    DRAWSTATE_INVALID_COMMAND_BUFFER,
    DRAWSTATE_INVALID_BARRIER,
    DRAWSTATE_INVALID_BUFFER,
    DRAWSTATE_INVALID_IMAGE,
    DRAWSTATE_INVALID_BUFFER_VIEW,
    DRAWSTATE_INVALID_IMAGE_VIEW,
    DRAWSTATE_INVALID_QUERY,
    DRAWSTATE_INVALID_QUERY_POOL,
    DRAWSTATE_INVALID_DESCRIPTOR_POOL,
    DRAWSTATE_INVALID_COMMAND_POOL,
    DRAWSTATE_INVALID_FENCE,
    DRAWSTATE_INVALID_EVENT,
    DRAWSTATE_INVALID_SAMPLER,
    DRAWSTATE_INVALID_FRAMEBUFFER,
    DRAWSTATE_INVALID_DEVICE_MEMORY,
    DRAWSTATE_INVALID_EXTENTS,
    DRAWSTATE_INVALID_FEATURE,
    DRAWSTATE_VTX_INDEX_OUT_OF_BOUNDS,
    DRAWSTATE_VTX_INDEX_ALIGNMENT_ERROR,
    DRAWSTATE_OUT_OF_MEMORY,
    DRAWSTATE_INVALID_DESCRIPTOR_SET,
    DRAWSTATE_DESCRIPTOR_TYPE_MISMATCH,
    DRAWSTATE_DESCRIPTOR_STAGEFLAGS_MISMATCH,
    DRAWSTATE_DESCRIPTOR_UPDATE_OUT_OF_BOUNDS,
    DRAWSTATE_DESCRIPTOR_POOL_EMPTY,
    DRAWSTATE_CANT_FREE_FROM_NON_FREE_POOL,
    DRAWSTATE_INVALID_WRITE_UPDATE,
    DRAWSTATE_INVALID_COPY_UPDATE,
    DRAWSTATE_INVALID_UPDATE_STRUCT,
    DRAWSTATE_NUM_SAMPLES_MISMATCH,
    DRAWSTATE_NO_END_COMMAND_BUFFER,
    DRAWSTATE_NO_BEGIN_COMMAND_BUFFER,
    DRAWSTATE_COMMAND_BUFFER_SINGLE_SUBMIT_VIOLATION,
    DRAWSTATE_INVALID_SECONDARY_COMMAND_BUFFER,
    DRAWSTATE_VIEWPORT_NOT_BOUND,
    DRAWSTATE_SCISSOR_NOT_BOUND,
    DRAWSTATE_LINE_WIDTH_NOT_BOUND,
    DRAWSTATE_DEPTH_BIAS_NOT_BOUND,
    DRAWSTATE_BLEND_NOT_BOUND,
    DRAWSTATE_DEPTH_BOUNDS_NOT_BOUND,
    DRAWSTATE_STENCIL_NOT_BOUND,
    DRAWSTATE_INDEX_BUFFER_NOT_BOUND,
    DRAWSTATE_PIPELINE_LAYOUTS_INCOMPATIBLE,
    DRAWSTATE_RENDERPASS_INCOMPATIBLE,
    DRAWSTATE_RENDERPASS_TOO_MANY_CLEAR_VALUES,
    DRAWSTATE_FRAMEBUFFER_INCOMPATIBLE,
    DRAWSTATE_INVALID_FRAMEBUFFER_CREATE_INFO,
    DRAWSTATE_INVALID_RENDERPASS,
    DRAWSTATE_INVALID_RENDERPASS_CMD,
    DRAWSTATE_NO_ACTIVE_RENDERPASS,
    DRAWSTATE_INVALID_IMAGE_USAGE,
    DRAWSTATE_INVALID_ATTACHMENT_INDEX,
    DRAWSTATE_DESCRIPTOR_SET_NOT_UPDATED,
    DRAWSTATE_DESCRIPTOR_SET_NOT_BOUND,
    DRAWSTATE_INVALID_DYNAMIC_OFFSET_COUNT,
    DRAWSTATE_CLEAR_CMD_BEFORE_DRAW,
    DRAWSTATE_BEGIN_CB_INVALID_STATE,
    DRAWSTATE_INVALID_CB_SIMULTANEOUS_USE,
    DRAWSTATE_INVALID_COMMAND_BUFFER_RESET,
    DRAWSTATE_VIEWPORT_SCISSOR_MISMATCH,
    DRAWSTATE_INVALID_IMAGE_ASPECT,
    DRAWSTATE_MISSING_ATTACHMENT_REFERENCE,
    DRAWSTATE_SAMPLER_DESCRIPTOR_ERROR,
    DRAWSTATE_INCONSISTENT_IMMUTABLE_SAMPLER_UPDATE,
    DRAWSTATE_IMAGEVIEW_DESCRIPTOR_ERROR,
    DRAWSTATE_BUFFERVIEW_DESCRIPTOR_ERROR,
    DRAWSTATE_BUFFERINFO_DESCRIPTOR_ERROR,
    DRAWSTATE_DYNAMIC_OFFSET_OVERFLOW,
    DRAWSTATE_DOUBLE_DESTROY,
    DRAWSTATE_OBJECT_INUSE,
    DRAWSTATE_QUEUE_FORWARD_PROGRESS,
    DRAWSTATE_INVALID_BUFFER_MEMORY_OFFSET,
    DRAWSTATE_INVALID_TEXEL_BUFFER_OFFSET,
    DRAWSTATE_INVALID_UNIFORM_BUFFER_OFFSET,
    DRAWSTATE_INVALID_STORAGE_BUFFER_OFFSET,
    DRAWSTATE_INDEPENDENT_BLEND,
    DRAWSTATE_DISABLED_LOGIC_OP,
    DRAWSTATE_INVALID_QUEUE_INDEX,
    DRAWSTATE_INVALID_QUEUE_FAMILY,
    DRAWSTATE_IMAGE_TRANSFER_GRANULARITY,
    DRAWSTATE_PUSH_CONSTANTS_ERROR,
    DRAWSTATE_INVALID_SUBPASS_INDEX,
    DRAWSTATE_MISMATCHED_IMAGE_FORMAT,
    DRAWSTATE_MISMATCHED_IMAGE_ASPECT,
    DRAWSTATE_INVALID_IMAGE_FILTER,
    DRAWSTATE_MISMATCHED_IMAGE_TYPE,
    DRAWSTATE_SWAPCHAIN_NO_SYNC_FOR_ACQUIRE,
    DRAWSTATE_SWAPCHAIN_INVALID_IMAGE,
    DRAWSTATE_SWAPCHAIN_IMAGE_NOT_ACQUIRED,
    DRAWSTATE_SWAPCHAIN_ALREADY_EXISTS,
    DRAWSTATE_SWAPCHAIN_WRONG_SURFACE,
    DRAWSTATE_SWAPCHAIN_CREATE_BEFORE_QUERY,
    DRAWSTATE_SWAPCHAIN_UNSUPPORTED_QUEUE,
    DRAWSTATE_SWAPCHAIN_BAD_IMAGE_COUNT,
    DRAWSTATE_SWAPCHAIN_BAD_EXTENTS,
    DRAWSTATE_SWAPCHAIN_BAD_PRE_TRANSFORM,
    DRAWSTATE_SWAPCHAIN_BAD_COMPOSITE_ALPHA,
    DRAWSTATE_SWAPCHAIN_BAD_LAYER_COUNT,
    DRAWSTATE_SWAPCHAIN_BAD_USAGE_FLAGS,
    DRAWSTATE_SWAPCHAIN_TOO_MANY_IMAGES,
    DRAWSTATE_SWAPCHAIN_BAD_PRESENT_MODE,
    DRAWSTATE_SWAPCHAIN_BAD_FORMAT,
    DRAWSTATE_SWAPCHAIN_REPLACED,
    DRAWSTATE_SWAPCHAIN_IMAGES_NOT_FOUND,
    DRAWSTATE_EXTENSION_NOT_ENABLED,
    DRAWSTATE_INVALID_IMAGE_SUBRANGE,
};

// Shader Checker ERROR codes
enum SHADER_CHECKER_ERROR {
    SHADER_CHECKER_NONE,
    SHADER_CHECKER_INTERFACE_TYPE_MISMATCH,
    SHADER_CHECKER_OUTPUT_NOT_CONSUMED,
    SHADER_CHECKER_INPUT_NOT_PRODUCED,
    SHADER_CHECKER_NON_SPIRV_SHADER,
    SHADER_CHECKER_INCONSISTENT_SPIRV,
    SHADER_CHECKER_UNKNOWN_STAGE,
    SHADER_CHECKER_INCONSISTENT_VI,
    SHADER_CHECKER_MISSING_DESCRIPTOR,
    SHADER_CHECKER_BAD_SPECIALIZATION,
    SHADER_CHECKER_MISSING_ENTRYPOINT,
    SHADER_CHECKER_PUSH_CONSTANT_OUT_OF_RANGE,
    SHADER_CHECKER_PUSH_CONSTANT_NOT_ACCESSIBLE_FROM_STAGE,
    SHADER_CHECKER_DESCRIPTOR_TYPE_MISMATCH,
    SHADER_CHECKER_DESCRIPTOR_NOT_ACCESSIBLE_FROM_STAGE,
    SHADER_CHECKER_FEATURE_NOT_ENABLED,
    SHADER_CHECKER_BAD_CAPABILITY,
    SHADER_CHECKER_MISSING_INPUT_ATTACHMENT,
    SHADER_CHECKER_INPUT_ATTACHMENT_TYPE_MISMATCH,
};

// Device Limits ERROR codes
enum DEV_LIMITS_ERROR {
    DEVLIMITS_NONE,
    DEVLIMITS_INVALID_INSTANCE,
    DEVLIMITS_INVALID_PHYSICAL_DEVICE,
    DEVLIMITS_MISSING_QUERY_COUNT,
    DEVLIMITS_MUST_QUERY_COUNT,
    DEVLIMITS_INVALID_FEATURE_REQUESTED,
    DEVLIMITS_COUNT_MISMATCH,
};

enum IMAGE_ERROR {
    IMAGE_INVALID_FORMAT_LIMITS_VIOLATION,
    IMAGE_ZERO_AREA_SUBREGION,
};

enum SWAPCHAIN_ERROR {
    SWAPCHAIN_INVALID_HANDLE,              // Handle used that isn't currently valid
    SWAPCHAIN_NULL_POINTER,                // Pointer set to NULL, instead of being a valid pointer
    SWAPCHAIN_EXT_NOT_ENABLED_BUT_USED,    // Did not enable WSI extension, but called WSI function
    SWAPCHAIN_DEL_OBJECT_BEFORE_CHILDREN,  // Called vkDestroyDevice() before vkDestroySwapchainKHR()
    SWAPCHAIN_CREATE_UNSUPPORTED_SURFACE,  // Called vkCreateSwapchainKHR() with a pCreateInfo->surface that wasn't supported
    SWAPCHAIN_CREATE_SWAP_WITHOUT_QUERY,  // Called vkCreateSwapchainKHR() without calling a query
    SWAPCHAIN_CREATE_SWAP_OUT_OF_BOUNDS_EXTENTS, // Called vkCreateSwapchainKHR() with out-of-bounds imageExtent
    SWAPCHAIN_CREATE_SWAP_EXTENTS_NO_MATCH_WIN,  // Called vkCreateSwapchainKHR w/imageExtent that doesn't match window's extent
    SWAPCHAIN_CREATE_SWAP_BAD_PRE_TRANSFORM,     // Called vkCreateSwapchainKHR() with a non-supported preTransform
    SWAPCHAIN_CREATE_SWAP_BAD_COMPOSITE_ALPHA,   // Called vkCreateSwapchainKHR() with a non-supported compositeAlpha
    SWAPCHAIN_CREATE_SWAP_BAD_IMG_ARRAY_LAYERS,  // Called vkCreateSwapchainKHR() with a non-supported imageArrayLayers
    SWAPCHAIN_CREATE_SWAP_BAD_IMG_USAGE_FLAGS,   // Called vkCreateSwapchainKHR() with a non-supported imageUsageFlags
    SWAPCHAIN_CREATE_SWAP_BAD_IMG_COLOR_SPACE,   // Called vkCreateSwapchainKHR() with a non-supported imageColorSpace
    SWAPCHAIN_CREATE_SWAP_BAD_IMG_FORMAT,        // Called vkCreateSwapchainKHR() with a non-supported imageFormat
    SWAPCHAIN_CREATE_SWAP_BAD_IMG_FMT_CLR_SP,    // Called vkCreateSwapchainKHR() with a non-supported imageColorSpace
    SWAPCHAIN_CREATE_SWAP_BAD_PRESENT_MODE,      // Called vkCreateSwapchainKHR() with a non-supported presentMode
    SWAPCHAIN_CREATE_SWAP_BAD_SHARING_MODE,      // Called vkCreateSwapchainKHR() with a non-supported imageSharingMode
    SWAPCHAIN_CREATE_SWAP_BAD_SHARING_VALUES,    // Called vkCreateSwapchainKHR() with bad values when imageSharingMode is
                                                 // VK_SHARING_MODE_CONCURRENT
    SWAPCHAIN_BAD_BOOL,       // VkBool32 that doesn't have value of VK_TRUE or VK_FALSE (e.g. is a non-zero form of true)
    SWAPCHAIN_PRIOR_COUNT,    // Query must be called first to get value of pCount, then called second time
    SWAPCHAIN_INVALID_COUNT,  // Second time a query called, the pCount value didn't match first time
    SWAPCHAIN_WRONG_STYPE,    // The sType for a struct has the wrong value
    SWAPCHAIN_WRONG_NEXT,     // The pNext for a struct is not NULL
    SWAPCHAIN_ZERO_VALUE,     // A value should be non-zero
    SWAPCHAIN_GET_SUPPORTED_DISPLAYS_WITHOUT_QUERY,  // vkGetDisplayPlaneSupportedDisplaysKHR should be called after querying
                                                     // device display plane properties
    SWAPCHAIN_PLANE_INDEX_TOO_LARGE,  // a planeIndex value is larger than what vkGetDisplayPlaneSupportedDisplaysKHR returns
};

#endif  // CORE_VALIDATION_ERROR_ENUMS_H_
