from enum import IntFlag

import d3d12compatibility as __wrapper_module__
from d3d12compatibility import (
    DXGI_FORMAT_R8_SNORM, D3D12_COMPATIBILITY_SHARED_FLAG_KEYED_MUTEX,
    DXGI_FORMAT_R8_UINT, DXGI_FORMAT_B8G8R8X8_TYPELESS,
    D3D12_RESOURCE_STATE_ALL_SHADER_RESOURCE, HRESULT,
    DXGI_FORMAT_R16_UNORM,
    D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER,
    D3D12_HEAP_FLAG_ALLOW_ONLY_NON_RT_DS_TEXTURES,
    DXGI_FORMAT_R32G32B32A32_SINT, DXGI_FORMAT_R8G8_UINT,
    DXGI_FORMAT_BC3_UNORM_SRGB, D3D12_RESOURCE_DIMENSION_BUFFER,
    DXGI_FORMAT_Y216, DXGI_FORMAT_R8G8B8A8_SNORM, DXGI_FORMAT_P016,
    D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS,
    D3D12_RESOURCE_STATE_VIDEO_ENCODE_WRITE, DXGI_FORMAT_BC4_UNORM,
    OpenGLOn12CreatorID, DXGI_FORMAT_B8G8R8A8_TYPELESS,
    DXGI_FORMAT_G8R8_G8B8_UNORM,
    D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE,
    D3D12_RESOURCE_STATE_VIDEO_PROCESS_WRITE, DXGI_FORMAT_R16_SNORM,
    DXGI_FORMAT_BC6H_UF16, DXGI_FORMAT_R32G32B32_UINT,
    DXGI_FORMAT_NV11, DXGI_FORMAT_BC7_UNORM_SRGB,
    D3D12_HEAP_FLAG_CREATE_NOT_ZEROED, DXGI_FORMAT_Y210,
    D3D12_REFLECT_SHARED_PROPERTY_NON_NT_SHARED_HANDLE,
    DXGI_FORMAT_D16_UNORM, D3D12_HEAP_FLAG_HARDWARE_PROTECTED,
    DXGI_FORMAT_R10G10B10A2_TYPELESS, DXGI_FORMAT_P010,
    DXGI_FORMAT_X24_TYPELESS_G8_UINT,
    D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE,
    DXGI_FORMAT_R32G32_UINT, ID3D12LifetimeTracker, Library,
    D3D12_HEAP_TYPE_UPLOAD,
    D3D12_COMPATIBILITY_SHARED_FLAG_NON_NT_HANDLE,
    DXGI_FORMAT_R16G16B16A16_SINT, DXGI_FORMAT_R24_UNORM_X8_TYPELESS,
    D3D12_RESOURCE_STATE_RESOLVE_SOURCE, DXGI_FORMAT_BC3_TYPELESS,
    D3D12_RESOURCE_STATE_RAYTRACING_ACCELERATION_STRUCTURE,
    ID3D12CompatibilityDevice, DXGI_FORMAT_BC7_TYPELESS,
    D3D12_HEAP_DESC, DXGI_FORMAT_R1_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM,
    DXGI_FORMAT_R16_UINT, D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET,
    DXGI_FORMAT_R32G32B32_FLOAT, DXGI_FORMAT_BC1_TYPELESS,
    DXGI_FORMAT_V408, DXGI_FORMAT_BC5_SNORM,
    D3D12_RESOURCE_DIMENSION_UNKNOWN, D3D12_TEXTURE_LAYOUT_UNKNOWN,
    DXGI_FORMAT_BC1_UNORM_SRGB, DXGI_FORMAT_D32_FLOAT,
    DXGI_FORMAT_BC2_UNORM, WSTRING, DXGI_FORMAT_R32G32B32A32_FLOAT,
    D3D12_RESOURCE_STATE_SHADING_RATE_SOURCE,
    DXGI_FORMAT_R8G8_TYPELESS, D3D12_RESOURCE_STATE_PREDICATION,
    D3D12_HEAP_FLAG_NONE, D3D12_RESOURCE_STATE_RESOLVE_DEST,
    DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, DXGI_FORMAT_R32_SINT,
    DXGI_SAMPLE_DESC, D3D12_HEAP_FLAG_ALLOW_ONLY_RT_DS_TEXTURES,
    DXGI_FORMAT_R8_TYPELESS, DXGI_FORMAT_BC7_UNORM, COMMETHOD,
    DXGI_FORMAT_BC5_TYPELESS, DXGI_FORMAT_B5G6R5_UNORM,
    D3D12_RESOURCE_STATE_INDIRECT_ARGUMENT, D3D12_HEAP_TYPE_READBACK,
    DXGI_FORMAT_R16G16B16A16_FLOAT, DXGI_FORMAT_BC6H_SF16,
    DXGI_FORMAT_FORCE_UINT, D3D12_COMPATIBILITY_SHARED_FLAG_9_ON_12,
    D3D12_REFELCT_SHARED_PROPERTY_COMPATIBILITY_SHARED_FLAGS,
    DXGI_FORMAT_R32_TYPELESS, DXGI_FORMAT_R16_TYPELESS,
    DXGI_FORMAT_R16G16_SNORM, D3D12_HEAP_TYPE_DEFAULT,
    DXGI_FORMAT_R32G32B32A32_TYPELESS, DXGI_FORMAT_R16G16_UNORM,
    DXGI_FORMAT_R32_FLOAT,
    D3D12_RESOURCE_FLAG_VIDEO_ENCODE_REFERENCE_ONLY,
    DXGI_FORMAT_BC4_TYPELESS,
    D3D12_HEAP_FLAG_ALLOW_ALL_BUFFERS_AND_TEXTURES,
    DXGI_FORMAT_R24G8_TYPELESS, DXGI_FORMAT_V208,
    DXGI_FORMAT_R8_UNORM, D3D11_RESOURCE_FLAGS, DXGI_FORMAT_P208,
    D3D12_RESOURCE_STATE_RENDER_TARGET,
    D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS,
    DXGI_FORMAT_R32G32_FLOAT,
    D3D12_RESOURCE_FLAG_RAYTRACING_ACCELERATION_STRUCTURE,
    D3D12_RESOURCE_STATE_STREAM_OUT, DXGI_FORMAT_R10G10B10A2_UNORM,
    DXGI_FORMAT_R8G8_UNORM, D3D12_RESOURCE_STATE_DEPTH_READ,
    D3D12_RESOURCE_STATE_DEPTH_WRITE,
    D3D12_RESOURCE_DIMENSION_TEXTURE1D, DXGI_FORMAT_R32G32B32_SINT,
    DXGI_FORMAT_R32G32_SINT, DXGI_FORMAT_D32_FLOAT_S8X24_UINT,
    DXGI_FORMAT_R16G16B16A16_UNORM, DXGI_FORMAT_BC4_SNORM,
    D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES,
    D3D12_HEAP_FLAG_CREATE_NOT_RESIDENT,
    DXGI_FORMAT_R32G32B32_TYPELESS, GUID, IUnknown,
    DirectMLPyTorchCreatorID, DXGI_FORMAT_R8G8_SNORM,
    D3D12_DEPTH_STENCIL_VALUE, ID3D12Object,
    D3D12_COMPATIBILITY_SHARED_FLAG_NONE, D3D12_RESOURCE_FLAG_NONE,
    DXGI_FORMAT_NV12, D3D12_CPU_PAGE_PROPERTY_WRITE_BACK,
    DXGI_FORMAT_P8, D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL,
    D3D12_HEAP_FLAG_SHARED, D3D9On12CreatorID, DXGI_FORMAT_BC5_UNORM,
    D3D12_HEAP_FLAG_ALLOW_WRITE_WATCH,
    D3D12_RESOURCE_STATE_VIDEO_PROCESS_READ, DXGI_FORMAT_R16_SINT,
    DXGI_FORMAT_B8G8R8X8_UNORM_SRGB, DXGI_FORMAT_R8G8_SINT,
    __MIDL___MIDL_itf_d3d12compatibility_0002_0223_0001,
    DXGI_FORMAT_R8G8_B8G8_UNORM,
    DXGI_FORMAT_SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE,
    D3D12_RESOURCE_STATE_VIDEO_DECODE_READ, DXGI_FORMAT_R16G16_FLOAT,
    D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER,
    D3D12_HEAP_FLAG_DENY_BUFFERS,
    D3D12_HEAP_FLAG_SHARED_CROSS_ADAPTER,
    D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_HEAP_TYPE_CUSTOM,
    D3D12_RESOURCE_DIMENSION_TEXTURE3D, D3D12_HEAP_FLAG_ALLOW_DISPLAY,
    DXGI_FORMAT_B8G8R8A8_UNORM_SRGB, DXGI_FORMAT_R8G8B8A8_SINT,
    DirectMLTensorFlowCreatorID,
    DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM,
    DXGI_FORMAT_R32G8X24_TYPELESS, DXGI_FORMAT_R16G16_TYPELESS,
    DXGI_FORMAT_YUY2,
    D3D12_REFLECT_SHARED_PROPERTY_D3D11_RESOURCE_FLAGS,
    DXGI_FORMAT_R32G32_TYPELESS, DXGI_FORMAT_R16G16_UINT,
    DXGI_FORMAT_R8G8B8A8_UINT, DXGI_FORMAT_BC2_UNORM_SRGB,
    DXGI_FORMAT_Y410, DXGI_FORMAT_A8P8, DXGI_FORMAT_B4G4R4A4_UNORM,
    D3D12_TEXTURE_LAYOUT_ROW_MAJOR,
    D3D12_RESOURCE_FLAG_DENY_SHADER_RESOURCE,
    D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES, D3D11On12CreatorID,
    DXGI_FORMAT_R11G11B10_FLOAT, DXGI_FORMAT_Y416,
    DXGI_FORMAT_BC3_UNORM, D3D12_RESOURCE_DIMENSION_TEXTURE2D,
    DXGI_FORMAT_B5G5R5A1_UNORM, D3D12_RESOURCE_STATE_COMMON,
    D3D12_MEMORY_POOL_L0, D3D12_CPU_PAGE_PROPERTY_UNKNOWN,
    DXGI_FORMAT_X32_TYPELESS_G8X24_UINT, D3D12_MEMORY_POOL_UNKNOWN,
    D3D12_RESOURCE_STATE_PRESENT, D3D12_RESOURCE_DESC, __LUID,
    DXGI_FORMAT_R16G16B16A16_SNORM,
    D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS, ID3D12DeviceChild,
    typelib_path, DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS,
    D3D12_RESOURCE_STATE_COPY_DEST,
    D3D12_RESOURCE_STATE_VIDEO_DECODE_WRITE,
    D3D12_CPU_PAGE_PROPERTY_NOT_AVAILABLE,
    D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE,
    D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE,
    DXGI_FORMAT_R9G9B9E5_SHAREDEXP,
    DXGI_FORMAT_SAMPLER_FEEDBACK_MIN_MIP_OPAQUE,
    D3D12_CPU_PAGE_PROPERTY_WRITE_COMBINE, _lcid, DXGI_FORMAT_R8_SINT,
    DXGI_FORMAT_R16G16B16A16_TYPELESS,
    D3D12_RESOURCE_STATE_COPY_SOURCE,
    D3D12_RESOURCE_STATE_VIDEO_ENCODE_READ, DXGI_FORMAT_R16G16_SINT,
    DXGI_FORMAT_IA44, D3D12_RESOURCE_STATE_INDEX_BUFFER,
    DXGI_FORMAT_R16_FLOAT, DXGI_FORMAT_BC6H_TYPELESS,
    DXGI_FORMAT_B8G8R8A8_UNORM, DXGI_FORMAT_R16G16B16A16_UINT,
    DXGI_FORMAT_R32G32B32A32_UINT, D3D12_HEAP_PROPERTIES,
    DXGI_FORMAT_BC2_TYPELESS, ID3D12SwapChainAssistant,
    D3D12_RESOURCE_STATE_GENERIC_READ, DXGI_FORMAT_AYUV,
    DXGI_FORMAT_R8G8B8A8_TYPELESS, DXGI_FORMAT_A8_UNORM,
    D3D12_HEAP_FLAG_ALLOW_SHADER_ATOMICS, DXGI_FORMAT_420_OPAQUE,
    DXGI_FORMAT_R32_UINT, DXGI_FORMAT_D24_UNORM_S8_UINT,
    D3D12_MEMORY_POOL_L1, DXGI_FORMAT_R10G10B10A2_UINT,
    DXGI_FORMAT_BC1_UNORM, DXGI_FORMAT_B8G8R8X8_UNORM,
    D3D12_RESOURCE_FLAG_VIDEO_DECODE_REFERENCE_ONLY,
    OpenCLOn12CreatorID, DXGI_FORMAT_UNKNOWN, D3D12_CLEAR_VALUE,
    DXGI_FORMAT_AI44
)


class D3D12_RESOURCE_DIMENSION(IntFlag):
    D3D12_RESOURCE_DIMENSION_UNKNOWN = 0
    D3D12_RESOURCE_DIMENSION_BUFFER = 1
    D3D12_RESOURCE_DIMENSION_TEXTURE1D = 2
    D3D12_RESOURCE_DIMENSION_TEXTURE2D = 3
    D3D12_RESOURCE_DIMENSION_TEXTURE3D = 4


class DXGI_FORMAT(IntFlag):
    DXGI_FORMAT_UNKNOWN = 0
    DXGI_FORMAT_R32G32B32A32_TYPELESS = 1
    DXGI_FORMAT_R32G32B32A32_FLOAT = 2
    DXGI_FORMAT_R32G32B32A32_UINT = 3
    DXGI_FORMAT_R32G32B32A32_SINT = 4
    DXGI_FORMAT_R32G32B32_TYPELESS = 5
    DXGI_FORMAT_R32G32B32_FLOAT = 6
    DXGI_FORMAT_R32G32B32_UINT = 7
    DXGI_FORMAT_R32G32B32_SINT = 8
    DXGI_FORMAT_R16G16B16A16_TYPELESS = 9
    DXGI_FORMAT_R16G16B16A16_FLOAT = 10
    DXGI_FORMAT_R16G16B16A16_UNORM = 11
    DXGI_FORMAT_R16G16B16A16_UINT = 12
    DXGI_FORMAT_R16G16B16A16_SNORM = 13
    DXGI_FORMAT_R16G16B16A16_SINT = 14
    DXGI_FORMAT_R32G32_TYPELESS = 15
    DXGI_FORMAT_R32G32_FLOAT = 16
    DXGI_FORMAT_R32G32_UINT = 17
    DXGI_FORMAT_R32G32_SINT = 18
    DXGI_FORMAT_R32G8X24_TYPELESS = 19
    DXGI_FORMAT_D32_FLOAT_S8X24_UINT = 20
    DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS = 21
    DXGI_FORMAT_X32_TYPELESS_G8X24_UINT = 22
    DXGI_FORMAT_R10G10B10A2_TYPELESS = 23
    DXGI_FORMAT_R10G10B10A2_UNORM = 24
    DXGI_FORMAT_R10G10B10A2_UINT = 25
    DXGI_FORMAT_R11G11B10_FLOAT = 26
    DXGI_FORMAT_R8G8B8A8_TYPELESS = 27
    DXGI_FORMAT_R8G8B8A8_UNORM = 28
    DXGI_FORMAT_R8G8B8A8_UNORM_SRGB = 29
    DXGI_FORMAT_R8G8B8A8_UINT = 30
    DXGI_FORMAT_R8G8B8A8_SNORM = 31
    DXGI_FORMAT_R8G8B8A8_SINT = 32
    DXGI_FORMAT_R16G16_TYPELESS = 33
    DXGI_FORMAT_R16G16_FLOAT = 34
    DXGI_FORMAT_R16G16_UNORM = 35
    DXGI_FORMAT_R16G16_UINT = 36
    DXGI_FORMAT_R16G16_SNORM = 37
    DXGI_FORMAT_R16G16_SINT = 38
    DXGI_FORMAT_R32_TYPELESS = 39
    DXGI_FORMAT_D32_FLOAT = 40
    DXGI_FORMAT_R32_FLOAT = 41
    DXGI_FORMAT_R32_UINT = 42
    DXGI_FORMAT_R32_SINT = 43
    DXGI_FORMAT_R24G8_TYPELESS = 44
    DXGI_FORMAT_D24_UNORM_S8_UINT = 45
    DXGI_FORMAT_R24_UNORM_X8_TYPELESS = 46
    DXGI_FORMAT_X24_TYPELESS_G8_UINT = 47
    DXGI_FORMAT_R8G8_TYPELESS = 48
    DXGI_FORMAT_R8G8_UNORM = 49
    DXGI_FORMAT_R8G8_UINT = 50
    DXGI_FORMAT_R8G8_SNORM = 51
    DXGI_FORMAT_R8G8_SINT = 52
    DXGI_FORMAT_R16_TYPELESS = 53
    DXGI_FORMAT_R16_FLOAT = 54
    DXGI_FORMAT_D16_UNORM = 55
    DXGI_FORMAT_R16_UNORM = 56
    DXGI_FORMAT_R16_UINT = 57
    DXGI_FORMAT_R16_SNORM = 58
    DXGI_FORMAT_R16_SINT = 59
    DXGI_FORMAT_R8_TYPELESS = 60
    DXGI_FORMAT_R8_UNORM = 61
    DXGI_FORMAT_R8_UINT = 62
    DXGI_FORMAT_R8_SNORM = 63
    DXGI_FORMAT_R8_SINT = 64
    DXGI_FORMAT_A8_UNORM = 65
    DXGI_FORMAT_R1_UNORM = 66
    DXGI_FORMAT_R9G9B9E5_SHAREDEXP = 67
    DXGI_FORMAT_R8G8_B8G8_UNORM = 68
    DXGI_FORMAT_G8R8_G8B8_UNORM = 69
    DXGI_FORMAT_BC1_TYPELESS = 70
    DXGI_FORMAT_BC1_UNORM = 71
    DXGI_FORMAT_BC1_UNORM_SRGB = 72
    DXGI_FORMAT_BC2_TYPELESS = 73
    DXGI_FORMAT_BC2_UNORM = 74
    DXGI_FORMAT_BC2_UNORM_SRGB = 75
    DXGI_FORMAT_BC3_TYPELESS = 76
    DXGI_FORMAT_BC3_UNORM = 77
    DXGI_FORMAT_BC3_UNORM_SRGB = 78
    DXGI_FORMAT_BC4_TYPELESS = 79
    DXGI_FORMAT_BC4_UNORM = 80
    DXGI_FORMAT_BC4_SNORM = 81
    DXGI_FORMAT_BC5_TYPELESS = 82
    DXGI_FORMAT_BC5_UNORM = 83
    DXGI_FORMAT_BC5_SNORM = 84
    DXGI_FORMAT_B5G6R5_UNORM = 85
    DXGI_FORMAT_B5G5R5A1_UNORM = 86
    DXGI_FORMAT_B8G8R8A8_UNORM = 87
    DXGI_FORMAT_B8G8R8X8_UNORM = 88
    DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM = 89
    DXGI_FORMAT_B8G8R8A8_TYPELESS = 90
    DXGI_FORMAT_B8G8R8A8_UNORM_SRGB = 91
    DXGI_FORMAT_B8G8R8X8_TYPELESS = 92
    DXGI_FORMAT_B8G8R8X8_UNORM_SRGB = 93
    DXGI_FORMAT_BC6H_TYPELESS = 94
    DXGI_FORMAT_BC6H_UF16 = 95
    DXGI_FORMAT_BC6H_SF16 = 96
    DXGI_FORMAT_BC7_TYPELESS = 97
    DXGI_FORMAT_BC7_UNORM = 98
    DXGI_FORMAT_BC7_UNORM_SRGB = 99
    DXGI_FORMAT_AYUV = 100
    DXGI_FORMAT_Y410 = 101
    DXGI_FORMAT_Y416 = 102
    DXGI_FORMAT_NV12 = 103
    DXGI_FORMAT_P010 = 104
    DXGI_FORMAT_P016 = 105
    DXGI_FORMAT_420_OPAQUE = 106
    DXGI_FORMAT_YUY2 = 107
    DXGI_FORMAT_Y210 = 108
    DXGI_FORMAT_Y216 = 109
    DXGI_FORMAT_NV11 = 110
    DXGI_FORMAT_AI44 = 111
    DXGI_FORMAT_IA44 = 112
    DXGI_FORMAT_P8 = 113
    DXGI_FORMAT_A8P8 = 114
    DXGI_FORMAT_B4G4R4A4_UNORM = 115
    DXGI_FORMAT_P208 = 130
    DXGI_FORMAT_V208 = 131
    DXGI_FORMAT_V408 = 132
    DXGI_FORMAT_SAMPLER_FEEDBACK_MIN_MIP_OPAQUE = 189
    DXGI_FORMAT_SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE = 190
    DXGI_FORMAT_FORCE_UINT = -1


class D3D12_TEXTURE_LAYOUT(IntFlag):
    D3D12_TEXTURE_LAYOUT_UNKNOWN = 0
    D3D12_TEXTURE_LAYOUT_ROW_MAJOR = 1
    D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE = 2
    D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE = 3


class D3D12_RESOURCE_FLAGS(IntFlag):
    D3D12_RESOURCE_FLAG_NONE = 0
    D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET = 1
    D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL = 2
    D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS = 4
    D3D12_RESOURCE_FLAG_DENY_SHADER_RESOURCE = 8
    D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER = 16
    D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS = 32
    D3D12_RESOURCE_FLAG_VIDEO_DECODE_REFERENCE_ONLY = 64
    D3D12_RESOURCE_FLAG_VIDEO_ENCODE_REFERENCE_ONLY = 128
    D3D12_RESOURCE_FLAG_RAYTRACING_ACCELERATION_STRUCTURE = 256


class D3D12_RESOURCE_STATES(IntFlag):
    D3D12_RESOURCE_STATE_COMMON = 0
    D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER = 1
    D3D12_RESOURCE_STATE_INDEX_BUFFER = 2
    D3D12_RESOURCE_STATE_RENDER_TARGET = 4
    D3D12_RESOURCE_STATE_UNORDERED_ACCESS = 8
    D3D12_RESOURCE_STATE_DEPTH_WRITE = 16
    D3D12_RESOURCE_STATE_DEPTH_READ = 32
    D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE = 64
    D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE = 128
    D3D12_RESOURCE_STATE_STREAM_OUT = 256
    D3D12_RESOURCE_STATE_INDIRECT_ARGUMENT = 512
    D3D12_RESOURCE_STATE_COPY_DEST = 1024
    D3D12_RESOURCE_STATE_COPY_SOURCE = 2048
    D3D12_RESOURCE_STATE_RESOLVE_DEST = 4096
    D3D12_RESOURCE_STATE_RESOLVE_SOURCE = 8192
    D3D12_RESOURCE_STATE_RAYTRACING_ACCELERATION_STRUCTURE = 4194304
    D3D12_RESOURCE_STATE_SHADING_RATE_SOURCE = 16777216
    D3D12_RESOURCE_STATE_GENERIC_READ = 2755
    D3D12_RESOURCE_STATE_ALL_SHADER_RESOURCE = 192
    D3D12_RESOURCE_STATE_PRESENT = 0
    D3D12_RESOURCE_STATE_PREDICATION = 512
    D3D12_RESOURCE_STATE_VIDEO_DECODE_READ = 65536
    D3D12_RESOURCE_STATE_VIDEO_DECODE_WRITE = 131072
    D3D12_RESOURCE_STATE_VIDEO_PROCESS_READ = 262144
    D3D12_RESOURCE_STATE_VIDEO_PROCESS_WRITE = 524288
    D3D12_RESOURCE_STATE_VIDEO_ENCODE_READ = 2097152
    D3D12_RESOURCE_STATE_VIDEO_ENCODE_WRITE = 8388608


class D3D12_CPU_PAGE_PROPERTY(IntFlag):
    D3D12_CPU_PAGE_PROPERTY_UNKNOWN = 0
    D3D12_CPU_PAGE_PROPERTY_NOT_AVAILABLE = 1
    D3D12_CPU_PAGE_PROPERTY_WRITE_COMBINE = 2
    D3D12_CPU_PAGE_PROPERTY_WRITE_BACK = 3


class D3D12_HEAP_TYPE(IntFlag):
    D3D12_HEAP_TYPE_DEFAULT = 1
    D3D12_HEAP_TYPE_UPLOAD = 2
    D3D12_HEAP_TYPE_READBACK = 3
    D3D12_HEAP_TYPE_CUSTOM = 4


class D3D12_MEMORY_POOL(IntFlag):
    D3D12_MEMORY_POOL_UNKNOWN = 0
    D3D12_MEMORY_POOL_L0 = 1
    D3D12_MEMORY_POOL_L1 = 2


class D3D12_HEAP_FLAGS(IntFlag):
    D3D12_HEAP_FLAG_NONE = 0
    D3D12_HEAP_FLAG_SHARED = 1
    D3D12_HEAP_FLAG_DENY_BUFFERS = 4
    D3D12_HEAP_FLAG_ALLOW_DISPLAY = 8
    D3D12_HEAP_FLAG_SHARED_CROSS_ADAPTER = 32
    D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES = 64
    D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES = 128
    D3D12_HEAP_FLAG_HARDWARE_PROTECTED = 256
    D3D12_HEAP_FLAG_ALLOW_WRITE_WATCH = 512
    D3D12_HEAP_FLAG_ALLOW_SHADER_ATOMICS = 1024
    D3D12_HEAP_FLAG_CREATE_NOT_RESIDENT = 2048
    D3D12_HEAP_FLAG_CREATE_NOT_ZEROED = 4096
    D3D12_HEAP_FLAG_ALLOW_ALL_BUFFERS_AND_TEXTURES = 0
    D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS = 192
    D3D12_HEAP_FLAG_ALLOW_ONLY_NON_RT_DS_TEXTURES = 68
    D3D12_HEAP_FLAG_ALLOW_ONLY_RT_DS_TEXTURES = 132


class D3D12_REFLECT_SHARED_PROPERTY(IntFlag):
    D3D12_REFLECT_SHARED_PROPERTY_D3D11_RESOURCE_FLAGS = 0
    D3D12_REFELCT_SHARED_PROPERTY_COMPATIBILITY_SHARED_FLAGS = 1
    D3D12_REFLECT_SHARED_PROPERTY_NON_NT_SHARED_HANDLE = 2


class D3D12_COMPATIBILITY_SHARED_FLAGS(IntFlag):
    D3D12_COMPATIBILITY_SHARED_FLAG_NONE = 0
    D3D12_COMPATIBILITY_SHARED_FLAG_NON_NT_HANDLE = 1
    D3D12_COMPATIBILITY_SHARED_FLAG_KEYED_MUTEX = 2
    D3D12_COMPATIBILITY_SHARED_FLAG_9_ON_12 = 4


__all__ = [
    'DXGI_FORMAT_R8_SNORM', 'D3D12_TEXTURE_LAYOUT',
    'D3D12_COMPATIBILITY_SHARED_FLAG_KEYED_MUTEX',
    'DXGI_FORMAT_R8_UINT', 'DXGI_FORMAT_B8G8R8X8_TYPELESS',
    'D3D12_RESOURCE_STATE_ALL_SHADER_RESOURCE', 'DXGI_FORMAT',
    'DXGI_FORMAT_R16_UNORM',
    'D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER',
    'D3D12_HEAP_FLAG_ALLOW_ONLY_NON_RT_DS_TEXTURES',
    'DXGI_FORMAT_R32G32B32A32_SINT', 'DXGI_FORMAT_R8G8_UINT',
    'DXGI_FORMAT_BC3_UNORM_SRGB', 'D3D12_RESOURCE_DIMENSION_BUFFER',
    'DXGI_FORMAT_Y216', 'DXGI_FORMAT_R8G8B8A8_SNORM',
    'DXGI_FORMAT_P016', 'D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS',
    'D3D12_RESOURCE_STATE_VIDEO_ENCODE_WRITE',
    'DXGI_FORMAT_BC4_UNORM', 'OpenGLOn12CreatorID',
    'DXGI_FORMAT_B8G8R8A8_TYPELESS', 'DXGI_FORMAT_G8R8_G8B8_UNORM',
    'D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE',
    'D3D12_RESOURCE_STATE_VIDEO_PROCESS_WRITE',
    'DXGI_FORMAT_R16_SNORM', 'DXGI_FORMAT_BC6H_UF16',
    'DXGI_FORMAT_R32G32B32_UINT', 'DXGI_FORMAT_NV11',
    'DXGI_FORMAT_BC7_UNORM_SRGB', 'D3D12_HEAP_FLAG_CREATE_NOT_ZEROED',
    'D3D12_HEAP_FLAGS', 'DXGI_FORMAT_Y210',
    'D3D12_REFLECT_SHARED_PROPERTY_NON_NT_SHARED_HANDLE',
    'DXGI_FORMAT_D16_UNORM', 'D3D12_HEAP_FLAG_HARDWARE_PROTECTED',
    'DXGI_FORMAT_R10G10B10A2_TYPELESS', 'DXGI_FORMAT_P010',
    'DXGI_FORMAT_X24_TYPELESS_G8_UINT',
    'D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE',
    'DXGI_FORMAT_R32G32_UINT', 'ID3D12LifetimeTracker', 'Library',
    'D3D12_HEAP_TYPE_UPLOAD',
    'D3D12_COMPATIBILITY_SHARED_FLAG_NON_NT_HANDLE',
    'DXGI_FORMAT_R16G16B16A16_SINT',
    'DXGI_FORMAT_R24_UNORM_X8_TYPELESS',
    'D3D12_RESOURCE_STATE_RESOLVE_SOURCE', 'DXGI_FORMAT_BC3_TYPELESS',
    'D3D12_RESOURCE_STATE_RAYTRACING_ACCELERATION_STRUCTURE',
    'D3D12_RESOURCE_STATES', 'ID3D12CompatibilityDevice',
    'DXGI_FORMAT_BC7_TYPELESS', 'D3D12_HEAP_DESC',
    'DXGI_FORMAT_R1_UNORM', 'DXGI_FORMAT_R8G8B8A8_UNORM',
    'DXGI_FORMAT_R16_UINT', 'D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET',
    'DXGI_FORMAT_R32G32B32_FLOAT', 'DXGI_FORMAT_BC1_TYPELESS',
    'DXGI_FORMAT_V408', 'DXGI_FORMAT_BC5_SNORM',
    'D3D12_RESOURCE_DIMENSION_UNKNOWN',
    'D3D12_TEXTURE_LAYOUT_UNKNOWN', 'DXGI_FORMAT_BC1_UNORM_SRGB',
    'DXGI_FORMAT_D32_FLOAT', 'DXGI_FORMAT_BC2_UNORM',
    'D3D12_REFLECT_SHARED_PROPERTY', 'DXGI_FORMAT_R32G32B32A32_FLOAT',
    'D3D12_RESOURCE_STATE_SHADING_RATE_SOURCE',
    'DXGI_FORMAT_R8G8_TYPELESS', 'D3D12_RESOURCE_STATE_PREDICATION',
    'D3D12_HEAP_FLAG_NONE', 'D3D12_RESOURCE_STATE_RESOLVE_DEST',
    'DXGI_FORMAT_R8G8B8A8_UNORM_SRGB', 'DXGI_FORMAT_R32_SINT',
    'DXGI_SAMPLE_DESC', 'D3D12_HEAP_FLAG_ALLOW_ONLY_RT_DS_TEXTURES',
    'DXGI_FORMAT_R8_TYPELESS', 'DXGI_FORMAT_BC7_UNORM',
    'DXGI_FORMAT_BC5_TYPELESS', 'DXGI_FORMAT_B5G6R5_UNORM',
    'D3D12_RESOURCE_STATE_INDIRECT_ARGUMENT',
    'D3D12_HEAP_TYPE_READBACK', 'DXGI_FORMAT_R16G16B16A16_FLOAT',
    'DXGI_FORMAT_BC6H_SF16', 'DXGI_FORMAT_FORCE_UINT',
    'D3D12_COMPATIBILITY_SHARED_FLAG_9_ON_12',
    'D3D12_REFELCT_SHARED_PROPERTY_COMPATIBILITY_SHARED_FLAGS',
    'DXGI_FORMAT_R32_TYPELESS', 'D3D12_RESOURCE_FLAGS',
    'DXGI_FORMAT_R16_TYPELESS', 'DXGI_FORMAT_R16G16_SNORM',
    'D3D12_HEAP_TYPE_DEFAULT', 'DXGI_FORMAT_R32G32B32A32_TYPELESS',
    'DXGI_FORMAT_R16G16_UNORM', 'DXGI_FORMAT_R32_FLOAT',
    'D3D12_RESOURCE_FLAG_VIDEO_ENCODE_REFERENCE_ONLY',
    'DXGI_FORMAT_BC4_TYPELESS',
    'D3D12_HEAP_FLAG_ALLOW_ALL_BUFFERS_AND_TEXTURES',
    'DXGI_FORMAT_R24G8_TYPELESS', 'DXGI_FORMAT_V208',
    'DXGI_FORMAT_R8_UNORM', 'D3D11_RESOURCE_FLAGS',
    'DXGI_FORMAT_P208', 'D3D12_RESOURCE_STATE_RENDER_TARGET',
    'D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS',
    'DXGI_FORMAT_R32G32_FLOAT',
    'D3D12_RESOURCE_FLAG_RAYTRACING_ACCELERATION_STRUCTURE',
    'D3D12_RESOURCE_STATE_STREAM_OUT',
    'DXGI_FORMAT_R10G10B10A2_UNORM', 'DXGI_FORMAT_R8G8_UNORM',
    'D3D12_RESOURCE_STATE_DEPTH_READ',
    'D3D12_RESOURCE_STATE_DEPTH_WRITE',
    'D3D12_RESOURCE_DIMENSION_TEXTURE1D',
    'DXGI_FORMAT_R32G32B32_SINT', 'DXGI_FORMAT_R32G32_SINT',
    'DXGI_FORMAT_D32_FLOAT_S8X24_UINT',
    'DXGI_FORMAT_R16G16B16A16_UNORM', 'DXGI_FORMAT_BC4_SNORM',
    'D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES',
    'D3D12_HEAP_FLAG_CREATE_NOT_RESIDENT',
    'DXGI_FORMAT_R32G32B32_TYPELESS', 'DirectMLPyTorchCreatorID',
    'DXGI_FORMAT_R8G8_SNORM', 'D3D12_DEPTH_STENCIL_VALUE',
    'ID3D12Object', 'D3D12_COMPATIBILITY_SHARED_FLAG_NONE',
    'D3D12_RESOURCE_FLAG_NONE', 'DXGI_FORMAT_NV12',
    'D3D12_CPU_PAGE_PROPERTY_WRITE_BACK', 'DXGI_FORMAT_P8',
    'D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL',
    'D3D12_HEAP_FLAG_SHARED', 'D3D9On12CreatorID',
    'DXGI_FORMAT_BC5_UNORM', 'D3D12_HEAP_FLAG_ALLOW_WRITE_WATCH',
    'D3D12_RESOURCE_STATE_VIDEO_PROCESS_READ', 'DXGI_FORMAT_R16_SINT',
    'DXGI_FORMAT_B8G8R8X8_UNORM_SRGB', 'DXGI_FORMAT_R8G8_SINT',
    '__MIDL___MIDL_itf_d3d12compatibility_0002_0223_0001',
    'DXGI_FORMAT_R8G8_B8G8_UNORM',
    'DXGI_FORMAT_SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE',
    'D3D12_RESOURCE_STATE_VIDEO_DECODE_READ',
    'DXGI_FORMAT_R16G16_FLOAT',
    'D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER',
    'D3D12_HEAP_FLAG_DENY_BUFFERS',
    'D3D12_HEAP_FLAG_SHARED_CROSS_ADAPTER',
    'D3D12_RESOURCE_STATE_UNORDERED_ACCESS', 'D3D12_HEAP_TYPE_CUSTOM',
    'D3D12_RESOURCE_DIMENSION_TEXTURE3D',
    'D3D12_HEAP_FLAG_ALLOW_DISPLAY',
    'D3D12_COMPATIBILITY_SHARED_FLAGS',
    'DXGI_FORMAT_B8G8R8A8_UNORM_SRGB', 'DXGI_FORMAT_R8G8B8A8_SINT',
    'D3D12_RESOURCE_DIMENSION', 'DirectMLTensorFlowCreatorID',
    'DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM',
    'DXGI_FORMAT_R32G8X24_TYPELESS', 'DXGI_FORMAT_R16G16_TYPELESS',
    'DXGI_FORMAT_YUY2',
    'D3D12_REFLECT_SHARED_PROPERTY_D3D11_RESOURCE_FLAGS',
    'DXGI_FORMAT_R32G32_TYPELESS', 'DXGI_FORMAT_R16G16_UINT',
    'DXGI_FORMAT_R8G8B8A8_UINT', 'DXGI_FORMAT_BC2_UNORM_SRGB',
    'DXGI_FORMAT_Y410', 'DXGI_FORMAT_A8P8',
    'DXGI_FORMAT_B4G4R4A4_UNORM', 'D3D12_TEXTURE_LAYOUT_ROW_MAJOR',
    'D3D12_RESOURCE_FLAG_DENY_SHADER_RESOURCE', 'D3D12_MEMORY_POOL',
    'D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES', 'D3D11On12CreatorID',
    'DXGI_FORMAT_R11G11B10_FLOAT', 'DXGI_FORMAT_Y416',
    'DXGI_FORMAT_BC3_UNORM', 'D3D12_RESOURCE_DIMENSION_TEXTURE2D',
    'DXGI_FORMAT_B5G5R5A1_UNORM', 'D3D12_RESOURCE_STATE_COMMON',
    'D3D12_MEMORY_POOL_L0', 'D3D12_CPU_PAGE_PROPERTY_UNKNOWN',
    'DXGI_FORMAT_X32_TYPELESS_G8X24_UINT',
    'D3D12_MEMORY_POOL_UNKNOWN', 'D3D12_RESOURCE_STATE_PRESENT',
    'D3D12_RESOURCE_DESC', '__LUID', 'DXGI_FORMAT_R16G16B16A16_SNORM',
    'D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS', 'ID3D12DeviceChild',
    'typelib_path', 'DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS',
    'D3D12_RESOURCE_STATE_COPY_DEST',
    'D3D12_RESOURCE_STATE_VIDEO_DECODE_WRITE',
    'D3D12_CPU_PAGE_PROPERTY_NOT_AVAILABLE',
    'D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE', 'D3D12_HEAP_TYPE',
    'D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE',
    'DXGI_FORMAT_R9G9B9E5_SHAREDEXP',
    'DXGI_FORMAT_SAMPLER_FEEDBACK_MIN_MIP_OPAQUE',
    'D3D12_CPU_PAGE_PROPERTY_WRITE_COMBINE', 'DXGI_FORMAT_R8_SINT',
    'DXGI_FORMAT_R16G16B16A16_TYPELESS',
    'D3D12_RESOURCE_STATE_COPY_SOURCE',
    'D3D12_RESOURCE_STATE_VIDEO_ENCODE_READ',
    'DXGI_FORMAT_R16G16_SINT', 'DXGI_FORMAT_IA44',
    'D3D12_RESOURCE_STATE_INDEX_BUFFER', 'DXGI_FORMAT_R16_FLOAT',
    'DXGI_FORMAT_BC6H_TYPELESS', 'DXGI_FORMAT_B8G8R8A8_UNORM',
    'DXGI_FORMAT_R16G16B16A16_UINT', 'DXGI_FORMAT_R32G32B32A32_UINT',
    'D3D12_HEAP_PROPERTIES', 'DXGI_FORMAT_BC2_TYPELESS',
    'ID3D12SwapChainAssistant', 'D3D12_RESOURCE_STATE_GENERIC_READ',
    'DXGI_FORMAT_AYUV', 'DXGI_FORMAT_R8G8B8A8_TYPELESS',
    'D3D12_CPU_PAGE_PROPERTY', 'DXGI_FORMAT_A8_UNORM',
    'D3D12_HEAP_FLAG_ALLOW_SHADER_ATOMICS', 'DXGI_FORMAT_420_OPAQUE',
    'DXGI_FORMAT_R32_UINT', 'DXGI_FORMAT_D24_UNORM_S8_UINT',
    'D3D12_MEMORY_POOL_L1', 'DXGI_FORMAT_R10G10B10A2_UINT',
    'DXGI_FORMAT_BC1_UNORM', 'DXGI_FORMAT_B8G8R8X8_UNORM',
    'D3D12_RESOURCE_FLAG_VIDEO_DECODE_REFERENCE_ONLY',
    'OpenCLOn12CreatorID', 'DXGI_FORMAT_UNKNOWN', 'D3D12_CLEAR_VALUE',
    'DXGI_FORMAT_AI44'
]

