// Copyright (c) 2018-2024 The Khronos Group Inc.
// 
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and/or associated documentation files (the "Materials"),
// to deal in the Materials without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Materials, and to permit persons to whom the
// Materials are furnished to do so, subject to the following conditions:
// 
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Materials.
// 
// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS
// STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND
// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ 
// 
// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS
// IN THE MATERIALS.

#ifndef SPIRV_UNIFIED1_OpenCLDebugInfo100_H_
#define SPIRV_UNIFIED1_OpenCLDebugInfo100_H_

#ifdef __cplusplus
extern "C" {
#endif

enum {
    OpenCLDebugInfo100Version = 200,
    OpenCLDebugInfo100Version_BitWidthPadding = 0x7fffffff
};
enum {
    OpenCLDebugInfo100Revision = 2,
    OpenCLDebugInfo100Revision_BitWidthPadding = 0x7fffffff
};

enum OpenCLDebugInfo100Instructions {
    OpenCLDebugInfo100DebugInfoNone = 0,
    OpenCLDebugInfo100DebugCompilationUnit = 1,
    OpenCLDebugInfo100DebugTypeBasic = 2,
    OpenCLDebugInfo100DebugTypePointer = 3,
    OpenCLDebugInfo100DebugTypeQualifier = 4,
    OpenCLDebugInfo100DebugTypeArray = 5,
    OpenCLDebugInfo100DebugTypeVector = 6,
    OpenCLDebugInfo100DebugTypedef = 7,
    OpenCLDebugInfo100DebugTypeFunction = 8,
    OpenCLDebugInfo100DebugTypeEnum = 9,
    OpenCLDebugInfo100DebugTypeComposite = 10,
    OpenCLDebugInfo100DebugTypeMember = 11,
    OpenCLDebugInfo100DebugTypeInheritance = 12,
    OpenCLDebugInfo100DebugTypePtrToMember = 13,
    OpenCLDebugInfo100DebugTypeTemplate = 14,
    OpenCLDebugInfo100DebugTypeTemplateParameter = 15,
    OpenCLDebugInfo100DebugTypeTemplateTemplateParameter = 16,
    OpenCLDebugInfo100DebugTypeTemplateParameterPack = 17,
    OpenCLDebugInfo100DebugGlobalVariable = 18,
    OpenCLDebugInfo100DebugFunctionDeclaration = 19,
    OpenCLDebugInfo100DebugFunction = 20,
    OpenCLDebugInfo100DebugLexicalBlock = 21,
    OpenCLDebugInfo100DebugLexicalBlockDiscriminator = 22,
    OpenCLDebugInfo100DebugScope = 23,
    OpenCLDebugInfo100DebugNoScope = 24,
    OpenCLDebugInfo100DebugInlinedAt = 25,
    OpenCLDebugInfo100DebugLocalVariable = 26,
    OpenCLDebugInfo100DebugInlinedVariable = 27,
    OpenCLDebugInfo100DebugDeclare = 28,
    OpenCLDebugInfo100DebugValue = 29,
    OpenCLDebugInfo100DebugOperation = 30,
    OpenCLDebugInfo100DebugExpression = 31,
    OpenCLDebugInfo100DebugMacroDef = 32,
    OpenCLDebugInfo100DebugMacroUndef = 33,
    OpenCLDebugInfo100DebugImportedEntity = 34,
    OpenCLDebugInfo100DebugSource = 35,
    OpenCLDebugInfo100DebugModuleINTEL = 36,
    OpenCLDebugInfo100InstructionsMax = 0x7fffffff
};


enum OpenCLDebugInfo100DebugInfoFlags {
    OpenCLDebugInfo100None = 0x0000,
    OpenCLDebugInfo100FlagIsProtected = 0x01,
    OpenCLDebugInfo100FlagIsPrivate = 0x02,
    OpenCLDebugInfo100FlagIsPublic = 0x03,
    OpenCLDebugInfo100FlagIsLocal = 0x04,
    OpenCLDebugInfo100FlagIsDefinition = 0x08,
    OpenCLDebugInfo100FlagFwdDecl = 0x10,
    OpenCLDebugInfo100FlagArtificial = 0x20,
    OpenCLDebugInfo100FlagExplicit = 0x40,
    OpenCLDebugInfo100FlagPrototyped = 0x80,
    OpenCLDebugInfo100FlagObjectPointer = 0x100,
    OpenCLDebugInfo100FlagStaticMember = 0x200,
    OpenCLDebugInfo100FlagIndirectVariable = 0x400,
    OpenCLDebugInfo100FlagLValueReference = 0x800,
    OpenCLDebugInfo100FlagRValueReference = 0x1000,
    OpenCLDebugInfo100FlagIsOptimized = 0x2000,
    OpenCLDebugInfo100FlagIsEnumClass = 0x4000,
    OpenCLDebugInfo100FlagTypePassByValue = 0x8000,
    OpenCLDebugInfo100FlagTypePassByReference = 0x10000,
    OpenCLDebugInfo100DebugInfoFlagsMax = 0x7fffffff
};

enum OpenCLDebugInfo100DebugBaseTypeAttributeEncoding {
    OpenCLDebugInfo100Unspecified = 0,
    OpenCLDebugInfo100Address = 1,
    OpenCLDebugInfo100Boolean = 2,
    OpenCLDebugInfo100Float = 3,
    OpenCLDebugInfo100Signed = 4,
    OpenCLDebugInfo100SignedChar = 5,
    OpenCLDebugInfo100Unsigned = 6,
    OpenCLDebugInfo100UnsignedChar = 7,
    OpenCLDebugInfo100DebugBaseTypeAttributeEncodingMax = 0x7fffffff
};

enum OpenCLDebugInfo100DebugCompositeType {
    OpenCLDebugInfo100Class = 0,
    OpenCLDebugInfo100Structure = 1,
    OpenCLDebugInfo100Union = 2,
    OpenCLDebugInfo100DebugCompositeTypeMax = 0x7fffffff
};

enum OpenCLDebugInfo100DebugTypeQualifier {
    OpenCLDebugInfo100ConstType = 0,
    OpenCLDebugInfo100VolatileType = 1,
    OpenCLDebugInfo100RestrictType = 2,
    OpenCLDebugInfo100AtomicType = 3,
    OpenCLDebugInfo100DebugTypeQualifierMax = 0x7fffffff
};

enum OpenCLDebugInfo100DebugOperation {
    OpenCLDebugInfo100Deref = 0,
    OpenCLDebugInfo100Plus = 1,
    OpenCLDebugInfo100Minus = 2,
    OpenCLDebugInfo100PlusUconst = 3,
    OpenCLDebugInfo100BitPiece = 4,
    OpenCLDebugInfo100Swap = 5,
    OpenCLDebugInfo100Xderef = 6,
    OpenCLDebugInfo100StackValue = 7,
    OpenCLDebugInfo100Constu = 8,
    OpenCLDebugInfo100Fragment = 9,
    OpenCLDebugInfo100DebugOperationMax = 0x7fffffff
};

enum OpenCLDebugInfo100DebugImportedEntity {
    OpenCLDebugInfo100ImportedModule = 0,
    OpenCLDebugInfo100ImportedDeclaration = 1,
    OpenCLDebugInfo100DebugImportedEntityMax = 0x7fffffff
};


#ifdef __cplusplus
}
#endif

#endif // SPIRV_UNIFIED1_OpenCLDebugInfo100_H_
