1 /* Copyright (c) 2015-2016 The Khronos Group Inc. 2 * Copyright (c) 2015-2016 Valve Corporation 3 * Copyright (c) 2015-2016 LunarG, Inc. 4 * Copyright (C) 2015-2016 Google Inc. 5 * 6 * Licensed under the Apache License, Version 2.0 (the "License"); 7 * you may not use this file except in compliance with the License. 8 * You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 * 18 * Author: Courtney Goeltzenleuchter <courtneygo@google.com> 19 * Author: Tobin Ehlis <tobine@google.com> 20 * Author: Chris Forbes <chrisf@ijw.co.nz> 21 * Author: Mark Lobodzinski <mark@lunarg.com> 22 */ 23 #ifndef CORE_VALIDATION_ERROR_ENUMS_H_ 24 #define CORE_VALIDATION_ERROR_ENUMS_H_ 25 26 // Mem Tracker ERROR codes 27 enum MEM_TRACK_ERROR { 28 MEMTRACK_NONE, // Used for INFO & other non-error messages 29 MEMTRACK_INVALID_CB, // Cmd Buffer invalid 30 MEMTRACK_INVALID_MEM_OBJ, // Invalid Memory Object 31 MEMTRACK_INVALID_ALIASING, // Invalid Memory Aliasing 32 MEMTRACK_INTERNAL_ERROR, // Bug in Mem Track Layer internal data structures 33 MEMTRACK_FREED_MEM_REF, // MEM Obj freed while it still has obj and/or CB refs 34 MEMTRACK_INVALID_OBJECT, // Attempting to reference generic VK Object that is invalid 35 MEMTRACK_MEMORY_LEAK, // Failure to call vkFreeMemory on Mem Obj prior to DestroyDevice 36 MEMTRACK_INVALID_STATE, // Memory not in the correct state 37 MEMTRACK_RESET_CB_WHILE_IN_FLIGHT, // vkResetCommandBuffer() called on a CB that hasn't completed 38 MEMTRACK_INVALID_FENCE_STATE, // Invalid Fence State signaled or used 39 MEMTRACK_REBIND_OBJECT, // Non-sparse object bindings are immutable 40 MEMTRACK_INVALID_USAGE_FLAG, // Usage flags specified at image/buffer create conflict w/ use of object 41 MEMTRACK_INVALID_MAP, // Size flag specified at alloc is too small for mapping range 42 MEMTRACK_INVALID_MEM_TYPE, // Memory Type mismatch 43 MEMTRACK_INVALID_MEM_REGION, // Memory region for object bound to an allocation is invalid 44 MEMTRACK_OBJECT_NOT_BOUND, // Image or Buffer used without having memory bound to it 45 }; 46 47 // Draw State ERROR codes 48 enum DRAW_STATE_ERROR { 49 // TODO: Remove the comments here or expand them. There isn't any additional information in the 50 // comments than in the name in almost all cases. 51 DRAWSTATE_NONE, // Used for INFO & other non-error messages 52 DRAWSTATE_INTERNAL_ERROR, // Error with DrawState internal data structures 53 DRAWSTATE_NO_PIPELINE_BOUND, // Unable to identify a bound pipeline 54 DRAWSTATE_INVALID_SET, // Invalid DS 55 DRAWSTATE_INVALID_RENDER_AREA, // Invalid renderArea 56 DRAWSTATE_INVALID_LAYOUT, // Invalid DS layout 57 DRAWSTATE_INVALID_IMAGE_LAYOUT, // Invalid Image layout 58 DRAWSTATE_INVALID_PIPELINE, // Invalid Pipeline handle referenced 59 DRAWSTATE_INVALID_PIPELINE_CREATE_STATE, // Attempt to create a pipeline 60 // with invalid state 61 DRAWSTATE_INVALID_COMMAND_BUFFER, // Invalid CommandBuffer referenced 62 DRAWSTATE_INVALID_BARRIER, // Invalid Barrier 63 DRAWSTATE_INVALID_BUFFER, // Invalid Buffer 64 DRAWSTATE_INVALID_IMAGE, // Invalid Image 65 DRAWSTATE_INVALID_BUFFER_VIEW, // Invalid BufferView 66 DRAWSTATE_INVALID_IMAGE_VIEW, // Invalid ImageView 67 DRAWSTATE_INVALID_QUERY, // Invalid Query 68 DRAWSTATE_INVALID_QUERY_POOL, // Invalid QueryPool 69 DRAWSTATE_INVALID_DESCRIPTOR_POOL, // Invalid DescriptorPool 70 DRAWSTATE_INVALID_COMMAND_POOL, // Invalid CommandPool 71 DRAWSTATE_INVALID_FENCE, // Invalid Fence 72 DRAWSTATE_INVALID_EVENT, // Invalid Event 73 DRAWSTATE_INVALID_SAMPLER, // Invalid Sampler 74 DRAWSTATE_INVALID_FRAMEBUFFER, // Invalid Framebuffer 75 DRAWSTATE_INVALID_DEVICE_MEMORY, // Invalid DeviceMemory 76 DRAWSTATE_VTX_INDEX_OUT_OF_BOUNDS, // binding in vkCmdBindVertexData() too 77 // large for PSO's 78 // pVertexBindingDescriptions array 79 DRAWSTATE_VTX_INDEX_ALIGNMENT_ERROR, // binding offset in 80 // vkCmdBindIndexBuffer() out of 81 // alignment based on indexType 82 // DRAWSTATE_MISSING_DOT_PROGRAM, // No "dot" program in order 83 // to generate png image 84 DRAWSTATE_OUT_OF_MEMORY, // malloc failed 85 DRAWSTATE_INVALID_DESCRIPTOR_SET, // Descriptor Set handle is unknown 86 DRAWSTATE_DESCRIPTOR_TYPE_MISMATCH, // Type in layout vs. update are not the 87 // same 88 DRAWSTATE_DESCRIPTOR_STAGEFLAGS_MISMATCH, // StageFlags in layout are not 89 // the same throughout a single 90 // VkWriteDescriptorSet update 91 DRAWSTATE_DESCRIPTOR_UPDATE_OUT_OF_BOUNDS, // Descriptors set for update out 92 // of bounds for corresponding 93 // layout section 94 DRAWSTATE_DESCRIPTOR_POOL_EMPTY, // Attempt to allocate descriptor from a 95 // pool with no more descriptors of that 96 // type available 97 DRAWSTATE_CANT_FREE_FROM_NON_FREE_POOL, // Invalid to call 98 // vkFreeDescriptorSets on Sets 99 // allocated from a NON_FREE Pool 100 DRAWSTATE_INVALID_WRITE_UPDATE, // Attempting a write update to a descriptor 101 // set with invalid update state 102 DRAWSTATE_INVALID_COPY_UPDATE, // Attempting copy update to a descriptor set 103 // with invalid state 104 DRAWSTATE_INVALID_UPDATE_STRUCT, // Struct in DS Update tree is of invalid 105 // type 106 DRAWSTATE_NUM_SAMPLES_MISMATCH, // Number of samples in bound PSO does not 107 // match number in FB of current RenderPass 108 DRAWSTATE_NO_END_COMMAND_BUFFER, // Must call vkEndCommandBuffer() before 109 // QueueSubmit on that commandBuffer 110 DRAWSTATE_NO_BEGIN_COMMAND_BUFFER, // Binding cmds or calling End on CB that 111 // never had vkBeginCommandBuffer() 112 // called on it 113 DRAWSTATE_COMMAND_BUFFER_SINGLE_SUBMIT_VIOLATION, // Cmd Buffer created with 114 // VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT 115 // flag is submitted 116 // multiple times 117 DRAWSTATE_INVALID_SECONDARY_COMMAND_BUFFER, // vkCmdExecuteCommands() called 118 // with a primary commandBuffer 119 // in pCommandBuffers array 120 DRAWSTATE_VIEWPORT_NOT_BOUND, // Draw submitted with no viewport state bound 121 DRAWSTATE_SCISSOR_NOT_BOUND, // Draw submitted with no scissor state bound 122 DRAWSTATE_LINE_WIDTH_NOT_BOUND, // Draw submitted with no line width state 123 // bound 124 DRAWSTATE_DEPTH_BIAS_NOT_BOUND, // Draw submitted with no depth bias state 125 // bound 126 DRAWSTATE_BLEND_NOT_BOUND, // Draw submitted with no blend state bound when 127 // color write enabled 128 DRAWSTATE_DEPTH_BOUNDS_NOT_BOUND, // Draw submitted with no depth bounds 129 // state bound when depth enabled 130 DRAWSTATE_STENCIL_NOT_BOUND, // Draw submitted with no stencil state bound 131 // when stencil enabled 132 DRAWSTATE_INDEX_BUFFER_NOT_BOUND, // Draw submitted with no depth-stencil 133 // state bound when depth write enabled 134 DRAWSTATE_PIPELINE_LAYOUTS_INCOMPATIBLE, // Draw submitted PSO Pipeline 135 // layout that's not compatible 136 // with layout from 137 // BindDescriptorSets 138 DRAWSTATE_RENDERPASS_INCOMPATIBLE, // Incompatible renderpasses between 139 // secondary cmdBuffer and primary 140 // cmdBuffer or framebuffer 141 DRAWSTATE_FRAMEBUFFER_INCOMPATIBLE, // Incompatible framebuffer between 142 // secondary cmdBuffer and active 143 // renderPass 144 DRAWSTATE_INVALID_FRAMEBUFFER_CREATE_INFO, // Invalid VkFramebufferCreateInfo state 145 DRAWSTATE_INVALID_RENDERPASS, // Use of a NULL or otherwise invalid 146 // RenderPass object 147 DRAWSTATE_INVALID_RENDERPASS_CMD, // Invalid cmd submitted while a 148 // RenderPass is active 149 DRAWSTATE_NO_ACTIVE_RENDERPASS, // Rendering cmd submitted without an active 150 // RenderPass 151 DRAWSTATE_INVALID_IMAGE_USAGE, // Image attachment location conflicts with 152 // image's USAGE flags 153 DRAWSTATE_INVALID_ATTACHMENT_INDEX, // Attachment reference contains an index 154 // that is out-of-bounds 155 DRAWSTATE_DESCRIPTOR_SET_NOT_UPDATED, // DescriptorSet bound but it was 156 // never updated. This is a warning 157 // code. 158 DRAWSTATE_DESCRIPTOR_SET_NOT_BOUND, // DescriptorSet used by pipeline at 159 // draw time is not bound, or has been 160 // disturbed (which would have flagged 161 // previous warning) 162 DRAWSTATE_INVALID_DYNAMIC_OFFSET_COUNT, // DescriptorSets bound with 163 // different number of dynamic 164 // descriptors that were included in 165 // dynamicOffsetCount 166 DRAWSTATE_CLEAR_CMD_BEFORE_DRAW, // Clear cmd issued before any Draw in 167 // CommandBuffer, should use RenderPass Ops 168 // instead 169 DRAWSTATE_BEGIN_CB_INVALID_STATE, // CB state at Begin call is bad. Can be 170 // Primary/Secondary CB created with 171 // mismatched FB/RP information or CB in 172 // RECORDING state 173 DRAWSTATE_INVALID_CB_SIMULTANEOUS_USE, // CmdBuffer is being used in 174 // violation of 175 // VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT 176 // rules (i.e. simultaneous use w/o 177 // that bit set) 178 DRAWSTATE_INVALID_COMMAND_BUFFER_RESET, // Attempting to call Reset (or 179 // Begin on recorded cmdBuffer) that 180 // was allocated from Pool w/o 181 // VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT 182 // bit set 183 DRAWSTATE_VIEWPORT_SCISSOR_MISMATCH, // Count for viewports and scissors 184 // mismatch and/or state doesn't match 185 // count 186 DRAWSTATE_INVALID_IMAGE_ASPECT, // Image aspect is invalid for the current 187 // operation 188 DRAWSTATE_MISSING_ATTACHMENT_REFERENCE, // Attachment reference must be 189 // present in active subpass 190 DRAWSTATE_SAMPLER_DESCRIPTOR_ERROR, // A Descriptor of *_SAMPLER type is 191 // being updated with an invalid or bad 192 // Sampler 193 DRAWSTATE_INCONSISTENT_IMMUTABLE_SAMPLER_UPDATE, // Descriptors of 194 // *COMBINED_IMAGE_SAMPLER 195 // type are being updated 196 // where some, but not all, 197 // of the updates use 198 // immutable samplers 199 DRAWSTATE_IMAGEVIEW_DESCRIPTOR_ERROR, // A Descriptor of *_IMAGE or 200 // *_ATTACHMENT type is being updated 201 // with an invalid or bad ImageView 202 DRAWSTATE_BUFFERVIEW_DESCRIPTOR_ERROR, // A Descriptor of *_TEXEL_BUFFER 203 // type is being updated with an 204 // invalid or bad BufferView 205 DRAWSTATE_BUFFERINFO_DESCRIPTOR_ERROR, // A Descriptor of 206 // *_[UNIFORM|STORAGE]_BUFFER_[DYNAMIC] 207 // type is being updated with an 208 // invalid or bad BufferView 209 DRAWSTATE_DYNAMIC_OFFSET_OVERFLOW, // At draw time the dynamic offset 210 // combined with buffer offset and range 211 // oversteps size of buffer 212 DRAWSTATE_DOUBLE_DESTROY, // Destroying an object twice 213 DRAWSTATE_OBJECT_INUSE, // Destroying or modifying an object in use by a 214 // command buffer 215 DRAWSTATE_QUEUE_FORWARD_PROGRESS, // Queue cannot guarantee forward progress 216 DRAWSTATE_INVALID_BUFFER_MEMORY_OFFSET, // Dynamic Buffer Offset 217 // violates memory requirements limit 218 DRAWSTATE_INVALID_TEXEL_BUFFER_OFFSET, // Dynamic Texel Buffer Offsets 219 // violate device limit 220 DRAWSTATE_INVALID_UNIFORM_BUFFER_OFFSET, // Dynamic Uniform Buffer Offsets 221 // violate device limit 222 DRAWSTATE_INVALID_STORAGE_BUFFER_OFFSET, // Dynamic Storage Buffer Offsets 223 // violate device limit 224 DRAWSTATE_INDEPENDENT_BLEND, // If independent blending is not enabled, all 225 // elements of pAttachmentsMustBeIdentical 226 DRAWSTATE_DISABLED_LOGIC_OP, // If logic operations is not enabled, logicOpEnable 227 // must be VK_FALSE 228 DRAWSTATE_INVALID_QUEUE_INDEX, // Specified queue index exceeds number 229 // of queried queue families 230 DRAWSTATE_INVALID_QUEUE_FAMILY, // Command buffer submitted on queue is from 231 // a different queue family 232 DRAWSTATE_IMAGE_TRANSFER_GRANULARITY, // Violation of queue family's image transfer 233 // granularity 234 DRAWSTATE_PUSH_CONSTANTS_ERROR, // Push constants exceed maxPushConstantSize 235 DRAWSTATE_INVALID_SUBPASS_INDEX, // Stepping beyond last subpass, or not reaching it 236 DRAWSTATE_SWAPCHAIN_NO_SYNC_FOR_ACQUIRE, // AcquireNextImageKHR with no sync object 237 DRAWSTATE_SWAPCHAIN_INVALID_IMAGE, // QueuePresentKHR with image index out of range 238 DRAWSTATE_SWAPCHAIN_IMAGE_NOT_ACQUIRED, // QueuePresentKHR with image not acquired by app 239 DRAWSTATE_SWAPCHAIN_ALREADY_EXISTS, // Surface has an existing swapchain that is not being replaced 240 DRAWSTATE_SWAPCHAIN_WRONG_SURFACE, // Swapchain being replaced is not attached to the same surface 241 }; 242 243 // Shader Checker ERROR codes 244 enum SHADER_CHECKER_ERROR { 245 SHADER_CHECKER_NONE, 246 SHADER_CHECKER_INTERFACE_TYPE_MISMATCH, // Type mismatch between shader stages or shader and pipeline 247 SHADER_CHECKER_OUTPUT_NOT_CONSUMED, // Entry appears in output interface, but missing in input 248 SHADER_CHECKER_INPUT_NOT_PRODUCED, // Entry appears in input interface, but missing in output 249 SHADER_CHECKER_NON_SPIRV_SHADER, // Shader image is not SPIR-V 250 SHADER_CHECKER_INCONSISTENT_SPIRV, // General inconsistency within a SPIR-V module 251 SHADER_CHECKER_UNKNOWN_STAGE, // Stage is not supported by analysis 252 SHADER_CHECKER_INCONSISTENT_VI, // VI state contains conflicting binding or attrib descriptions 253 SHADER_CHECKER_MISSING_DESCRIPTOR, // Shader attempts to use a descriptor binding not declared in the layout 254 SHADER_CHECKER_BAD_SPECIALIZATION, // Specialization map entry points outside specialization data block 255 SHADER_CHECKER_MISSING_ENTRYPOINT, // Shader module does not contain the requested entrypoint 256 SHADER_CHECKER_PUSH_CONSTANT_OUT_OF_RANGE, // Push constant variable is not in a push constant range 257 SHADER_CHECKER_PUSH_CONSTANT_NOT_ACCESSIBLE_FROM_STAGE, // Push constant range exists, but not accessible from stage 258 SHADER_CHECKER_DESCRIPTOR_TYPE_MISMATCH, // Descriptor type does not match shader resource type 259 SHADER_CHECKER_DESCRIPTOR_NOT_ACCESSIBLE_FROM_STAGE, // Descriptor used by shader, but not accessible from stage 260 SHADER_CHECKER_FEATURE_NOT_ENABLED, // Shader uses capability requiring a feature not enabled on device 261 SHADER_CHECKER_BAD_CAPABILITY, // Shader uses capability not supported by Vulkan (OpenCL features) 262 SHADER_CHECKER_MISSING_INPUT_ATTACHMENT, // Shader uses an input attachment but not declared in subpass 263 SHADER_CHECKER_INPUT_ATTACHMENT_TYPE_MISMATCH, // Shader input attachment type does not match subpass format 264 }; 265 266 // Device Limits ERROR codes 267 enum DEV_LIMITS_ERROR { 268 DEVLIMITS_NONE, // Used for INFO & other non-error messages 269 DEVLIMITS_INVALID_INSTANCE, // Invalid instance used 270 DEVLIMITS_INVALID_PHYSICAL_DEVICE, // Invalid physical device used 271 DEVLIMITS_MISSING_QUERY_COUNT, // Did not make initial call to an API to query the count 272 DEVLIMITS_MUST_QUERY_COUNT, // Failed to make initial call to an API to query the count 273 DEVLIMITS_INVALID_FEATURE_REQUESTED, // App requested a feature not supported by physical device 274 DEVLIMITS_COUNT_MISMATCH, // App requesting a count value different than actual value 275 DEVLIMITS_INVALID_QUEUE_CREATE_REQUEST, // Invalid queue requested based on queue family properties 276 }; 277 #endif // CORE_VALIDATION_ERROR_ENUMS_H_ 278