diff --git a/core/sys/windows/types.odin b/core/sys/windows/types.odin index 3e25a4c18..1407201d6 100644 --- a/core/sys/windows/types.odin +++ b/core/sys/windows/types.odin @@ -376,6 +376,9 @@ FILE_TYPE_DISK :: 0x0001 FILE_TYPE_CHAR :: 0x0002 FILE_TYPE_PIPE :: 0x0003 +RECT :: struct {left, top, right, bottom: LONG} +POINT :: struct {x, y: LONG} + when size_of(uintptr) == 4 { WSADATA :: struct { diff --git a/vendor/directx/d3d11/d3d11.odin b/vendor/directx/d3d11/d3d11.odin new file mode 100644 index 000000000..668d8b9cb --- /dev/null +++ b/vendor/directx/d3d11/d3d11.odin @@ -0,0 +1,3584 @@ +package directx_d3d11 + +foreign import "system:d3d11.lib" + +import "../dxgi" +import "../d3d_compiler" + +IUnknown :: dxgi.IUnknown +IUnknown_VTable :: dxgi.IUnknown_VTable + +HANDLE :: dxgi.HANDLE +HMODULE :: dxgi.HMODULE +HRESULT :: dxgi.HRESULT +GUID :: dxgi.GUID +IID :: dxgi.IID +SIZE_T :: dxgi.SIZE_T +BOOL :: dxgi.BOOL + +RECT :: dxgi.RECT +SIZE :: dxgi.SIZE + +IModuleInstance :: d3d_compiler.ID3D11ModuleInstance +IBlob :: d3d_compiler.ID3DBlob +IModule :: d3d_compiler.ID3D11Module + +@(default_calling_convention="stdcall", link_prefix="D3D11") +foreign d3d11 { + CreateDevice :: proc( + pAdapter: ^dxgi.IAdapter, + DriverType: DRIVER_TYPE, + Software: HMODULE, + Flags: CREATE_DEVICE_FLAG, + pFeatureLevels: ^FEATURE_LEVEL, + FeatureLevels: u32, + SDKVersion: u32, + ppDevice: ^^IDevice, + pFeatureLevel: ^FEATURE_LEVEL, + ppImmediateContext: ^^IDeviceContext, + ) -> HRESULT --- + CreateDeviceAndSwapChain :: proc( + pAdapter: ^dxgi.IAdapter, + DriverType: DRIVER_TYPE, + Software: HMODULE, + Flags: u32, + pFeatureLevels: ^FEATURE_LEVEL, + FeatureLevels: u32, + SDKVersion: u32, + pSwapChainDesc: ^dxgi.SWAP_CHAIN_DESC, + ppSwapChain: ^^dxgi.ISwapChain, + ppDevice: ^^IDevice, + pFeatureLevel: ^FEATURE_LEVEL, + ppImmediateContext: ^^IDeviceContext, + ) -> HRESULT --- +} + +foreign d3d11 { + WKPDID_D3DDebugObjectNameW: GUID + WKPDID_CommentStringW: GUID +} + +@(link_prefix="D3D_") +foreign d3d11 { + TEXTURE_LAYOUT_ROW_MAJOR: GUID + TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE: GUID +} + +@(link_prefix="D3D11_") +foreign d3d11 { + DECODER_PROFILE_MPEG2_MOCOMP: GUID + DECODER_PROFILE_MPEG2_IDCT: GUID + DECODER_PROFILE_MPEG2_VLD: GUID + DECODER_PROFILE_MPEG1_VLD: GUID + DECODER_PROFILE_MPEG2and1_VLD: GUID + DECODER_PROFILE_H264_MOCOMP_NOFGT: GUID + DECODER_PROFILE_H264_MOCOMP_FGT: GUID + DECODER_PROFILE_H264_IDCT_NOFGT: GUID + DECODER_PROFILE_H264_IDCT_FGT: GUID + DECODER_PROFILE_H264_VLD_NOFGT: GUID + DECODER_PROFILE_H264_VLD_FGT: GUID + DECODER_PROFILE_H264_VLD_WITHFMOASO_NOFGT: GUID + DECODER_PROFILE_H264_VLD_STEREO_PROGRESSIVE_NOFGT: GUID + DECODER_PROFILE_H264_VLD_STEREO_NOFGT: GUID + DECODER_PROFILE_H264_VLD_MULTIVIEW_NOFGT: GUID + DECODER_PROFILE_WMV8_POSTPROC: GUID + DECODER_PROFILE_WMV8_MOCOMP: GUID + DECODER_PROFILE_WMV9_POSTPROC: GUID + DECODER_PROFILE_WMV9_MOCOMP: GUID + DECODER_PROFILE_WMV9_IDCT: GUID + DECODER_PROFILE_VC1_POSTPROC: GUID + DECODER_PROFILE_VC1_MOCOMP: GUID + DECODER_PROFILE_VC1_IDCT: GUID + DECODER_PROFILE_VC1_VLD: GUID + DECODER_PROFILE_VC1_D2010: GUID + DECODER_PROFILE_MPEG4PT2_VLD_SIMPLE: GUID + DECODER_PROFILE_MPEG4PT2_VLD_ADVSIMPLE_NOGMC: GUID + DECODER_PROFILE_MPEG4PT2_VLD_ADVSIMPLE_GMC: GUID + DECODER_PROFILE_HEVC_VLD_MAIN: GUID + DECODER_PROFILE_HEVC_VLD_MAIN10: GUID + DECODER_PROFILE_VP9_VLD_PROFILE0: GUID + DECODER_PROFILE_VP9_VLD_10BIT_PROFILE2: GUID + DECODER_PROFILE_VP8_VLD: GUID + + CRYPTO_TYPE_AES128_CTR: GUID + DECODER_ENCRYPTION_HW_CENC: GUID + DECODER_BITSTREAM_ENCRYPTION_TYPE_CENC: GUID + DECODER_BITSTREAM_ENCRYPTION_TYPE_CBCS: GUID + KEY_EXCHANGE_HW_PROTECTION: GUID + + AUTHENTICATED_QUERY_PROTECTION: GUID + AUTHENTICATED_QUERY_CHANNEL_TYPE: GUID + AUTHENTICATED_QUERY_DEVICE_HANDLE: GUID + AUTHENTICATED_QUERY_CRYPTO_SESSION: GUID + AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_COUNT: GUID + AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS: GUID + AUTHENTICATED_QUERY_UNRESTRICTED_PROTECTED_SHARED_RESOURCE_COUNT: GUID + AUTHENTICATED_QUERY_OUTPUT_ID_COUNT: GUID + AUTHENTICATED_QUERY_OUTPUT_ID: GUID + AUTHENTICATED_QUERY_ACCESSIBILITY_ATTRIBUTES: GUID + AUTHENTICATED_QUERY_ENCRYPTION_WHEN_ACCESSIBLE_GUID_COUNT: GUID + AUTHENTICATED_QUERY_ENCRYPTION_WHEN_ACCESSIBLE_GUID: GUID + AUTHENTICATED_QUERY_CURRENT_ENCRYPTION_WHEN_ACCESSIBLE: GUID + AUTHENTICATED_CONFIGURE_INITIALIZE: GUID + AUTHENTICATED_CONFIGURE_PROTECTION: GUID + AUTHENTICATED_CONFIGURE_CRYPTO_SESSION: GUID + AUTHENTICATED_CONFIGURE_SHARED_RESOURCE: GUID + AUTHENTICATED_CONFIGURE_ENCRYPTION_WHEN_ACCESSIBLE: GUID + + KEY_EXCHANGE_RSAES_OAEP: GUID +} + +FL9_1_REQ_TEXTURE1D_U_DIMENSION :: 2048 +FL9_3_REQ_TEXTURE1D_U_DIMENSION :: 4096 +FL9_1_REQ_TEXTURE2D_U_OR_V_DIMENSION :: 2048 +FL9_3_REQ_TEXTURE2D_U_OR_V_DIMENSION :: 4096 +FL9_1_REQ_TEXTURECUBE_DIMENSION :: 512 +FL9_3_REQ_TEXTURECUBE_DIMENSION :: 4096 +FL9_1_REQ_TEXTURE3D_U_V_OR_W_DIMENSION :: 256 +FL9_1_DEFAULT_MAX_ANISOTROPY :: 2 +FL9_1_IA_PRIMITIVE_MAX_COUNT :: 65535 +FL9_2_IA_PRIMITIVE_MAX_COUNT :: 1048575 +FL9_1_SIMULTANEOUS_RENDER_TARGET_COUNT :: 1 +FL9_3_SIMULTANEOUS_RENDER_TARGET_COUNT :: 4 +FL9_1_MAX_TEXTURE_REPEAT :: 128 +FL9_2_MAX_TEXTURE_REPEAT :: 2048 +FL9_3_MAX_TEXTURE_REPEAT :: 8192 + +_8BIT_INDEX_STRIP_CUT_VALUE :: 0xff +_16BIT_INDEX_STRIP_CUT_VALUE :: 0xffff +_32BIT_INDEX_STRIP_CUT_VALUE :: 0xffffffff + +ARRAY_AXIS_ADDRESS_RANGE_BIT_COUNT :: 9 + +CLIP_OR_CULL_DISTANCE_COUNT :: 8 +CLIP_OR_CULL_DISTANCE_ELEMENT_COUNT :: 2 + +COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT :: 14 +COMMONSHADER_CONSTANT_BUFFER_COMPONENTS :: 4 +COMMONSHADER_CONSTANT_BUFFER_COMPONENT_BIT_COUNT :: 32 +COMMONSHADER_CONSTANT_BUFFER_HW_SLOT_COUNT :: 15 +COMMONSHADER_CONSTANT_BUFFER_PARTIAL_UPDATE_EXTENTS_BYTE_ALIGNMENT :: 16 +COMMONSHADER_CONSTANT_BUFFER_REGISTER_COMPONENTS :: 4 +COMMONSHADER_CONSTANT_BUFFER_REGISTER_COUNT :: 15 +COMMONSHADER_CONSTANT_BUFFER_REGISTER_READS_PER_INST :: 1 +COMMONSHADER_CONSTANT_BUFFER_REGISTER_READ_PORTS :: 1 +COMMONSHADER_FLOWCONTROL_NESTING_LIMIT :: 64 +COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COMPONENTS :: 4 +COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COUNT :: 1 +COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READS_PER_INST :: 1 +COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READ_PORTS :: 1 +COMMONSHADER_IMMEDIATE_VALUE_COMPONENT_BIT_COUNT :: 32 +COMMONSHADER_INPUT_RESOURCE_REGISTER_COMPONENTS :: 1 +COMMONSHADER_INPUT_RESOURCE_REGISTER_COUNT :: 128 +COMMONSHADER_INPUT_RESOURCE_REGISTER_READS_PER_INST :: 1 +COMMONSHADER_INPUT_RESOURCE_REGISTER_READ_PORTS :: 1 +COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT :: 128 +COMMONSHADER_SAMPLER_REGISTER_COMPONENTS :: 1 +COMMONSHADER_SAMPLER_REGISTER_COUNT :: 16 +COMMONSHADER_SAMPLER_REGISTER_READS_PER_INST :: 1 +COMMONSHADER_SAMPLER_REGISTER_READ_PORTS :: 1 +COMMONSHADER_SAMPLER_SLOT_COUNT :: 16 +COMMONSHADER_SUBROUTINE_NESTING_LIMIT :: 32 +COMMONSHADER_TEMP_REGISTER_COMPONENTS :: 4 +COMMONSHADER_TEMP_REGISTER_COMPONENT_BIT_COUNT :: 32 +COMMONSHADER_TEMP_REGISTER_COUNT :: 4096 +COMMONSHADER_TEMP_REGISTER_READS_PER_INST :: 3 +COMMONSHADER_TEMP_REGISTER_READ_PORTS :: 3 +COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MAX :: 10 +COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MIN :: -10 +COMMONSHADER_TEXEL_OFFSET_MAX_NEGATIVE :: -8 +COMMONSHADER_TEXEL_OFFSET_MAX_POSITIVE :: 7 + +CS_4_X_BUCKET00_MAX_BYTES_TGSM_WRITABLE_PER_THREAD :: 256 +CS_4_X_BUCKET00_MAX_NUM_THREADS_PER_GROUP :: 64 +CS_4_X_BUCKET01_MAX_BYTES_TGSM_WRITABLE_PER_THREAD :: 240 +CS_4_X_BUCKET01_MAX_NUM_THREADS_PER_GROUP :: 68 +CS_4_X_BUCKET02_MAX_BYTES_TGSM_WRITABLE_PER_THREAD :: 224 +CS_4_X_BUCKET02_MAX_NUM_THREADS_PER_GROUP :: 72 +CS_4_X_BUCKET03_MAX_BYTES_TGSM_WRITABLE_PER_THREAD :: 208 +CS_4_X_BUCKET03_MAX_NUM_THREADS_PER_GROUP :: 76 +CS_4_X_BUCKET04_MAX_BYTES_TGSM_WRITABLE_PER_THREAD :: 192 +CS_4_X_BUCKET04_MAX_NUM_THREADS_PER_GROUP :: 84 +CS_4_X_BUCKET05_MAX_BYTES_TGSM_WRITABLE_PER_THREAD :: 176 +CS_4_X_BUCKET05_MAX_NUM_THREADS_PER_GROUP :: 92 +CS_4_X_BUCKET06_MAX_BYTES_TGSM_WRITABLE_PER_THREAD :: 160 +CS_4_X_BUCKET06_MAX_NUM_THREADS_PER_GROUP :: 100 +CS_4_X_BUCKET07_MAX_BYTES_TGSM_WRITABLE_PER_THREAD :: 144 +CS_4_X_BUCKET07_MAX_NUM_THREADS_PER_GROUP :: 112 +CS_4_X_BUCKET08_MAX_BYTES_TGSM_WRITABLE_PER_THREAD :: 128 +CS_4_X_BUCKET08_MAX_NUM_THREADS_PER_GROUP :: 128 +CS_4_X_BUCKET09_MAX_BYTES_TGSM_WRITABLE_PER_THREAD :: 112 +CS_4_X_BUCKET09_MAX_NUM_THREADS_PER_GROUP :: 144 +CS_4_X_BUCKET10_MAX_BYTES_TGSM_WRITABLE_PER_THREAD :: 96 +CS_4_X_BUCKET10_MAX_NUM_THREADS_PER_GROUP :: 168 +CS_4_X_BUCKET11_MAX_BYTES_TGSM_WRITABLE_PER_THREAD :: 80 +CS_4_X_BUCKET11_MAX_NUM_THREADS_PER_GROUP :: 204 +CS_4_X_BUCKET12_MAX_BYTES_TGSM_WRITABLE_PER_THREAD :: 64 +CS_4_X_BUCKET12_MAX_NUM_THREADS_PER_GROUP :: 256 +CS_4_X_BUCKET13_MAX_BYTES_TGSM_WRITABLE_PER_THREAD :: 48 +CS_4_X_BUCKET13_MAX_NUM_THREADS_PER_GROUP :: 340 +CS_4_X_BUCKET14_MAX_BYTES_TGSM_WRITABLE_PER_THREAD :: 32 +CS_4_X_BUCKET14_MAX_NUM_THREADS_PER_GROUP :: 512 +CS_4_X_BUCKET15_MAX_BYTES_TGSM_WRITABLE_PER_THREAD :: 16 +CS_4_X_BUCKET15_MAX_NUM_THREADS_PER_GROUP :: 768 +CS_4_X_DISPATCH_MAX_THREAD_GROUPS_IN_Z_DIMENSION :: 1 +CS_4_X_RAW_UAV_BYTE_ALIGNMENT :: 256 +CS_4_X_THREAD_GROUP_MAX_THREADS_PER_GROUP :: 768 +CS_4_X_THREAD_GROUP_MAX_X :: 768 +CS_4_X_THREAD_GROUP_MAX_Y :: 768 +CS_4_X_UAV_REGISTER_COUNT :: 1 + +CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION :: 65535 +CS_TGSM_REGISTER_COUNT :: 8192 +CS_TGSM_REGISTER_READS_PER_INST :: 1 +CS_TGSM_RESOURCE_REGISTER_COMPONENTS :: 1 +CS_TGSM_RESOURCE_REGISTER_READ_PORTS :: 1 +CS_THREADGROUPID_REGISTER_COMPONENTS :: 3 +CS_THREADGROUPID_REGISTER_COUNT :: 1 +CS_THREADIDINGROUPFLATTENED_REGISTER_COMPONENTS :: 1 +CS_THREADIDINGROUPFLATTENED_REGISTER_COUNT :: 1 +CS_THREADIDINGROUP_REGISTER_COMPONENTS :: 3 +CS_THREADIDINGROUP_REGISTER_COUNT :: 1 +CS_THREADID_REGISTER_COMPONENTS :: 3 +CS_THREADID_REGISTER_COUNT :: 1 +CS_THREAD_GROUP_MAX_THREADS_PER_GROUP :: 1024 +CS_THREAD_GROUP_MAX_X :: 1024 +CS_THREAD_GROUP_MAX_Y :: 1024 +CS_THREAD_GROUP_MAX_Z :: 64 +CS_THREAD_GROUP_MIN_X :: 1 +CS_THREAD_GROUP_MIN_Y :: 1 +CS_THREAD_GROUP_MIN_Z :: 1 +CS_THREAD_LOCAL_TEMP_REGISTER_POOL :: 16384 + +DEFAULT_BLEND_FACTOR_ALPHA :: 1.0 +DEFAULT_BLEND_FACTOR_BLUE :: 1.0 +DEFAULT_BLEND_FACTOR_GREEN :: 1.0 +DEFAULT_BLEND_FACTOR_RED :: 1.0 +DEFAULT_BORDER_COLOR_COMPONENT :: 0.0 +DEFAULT_DEPTH_BIAS :: 0 +DEFAULT_DEPTH_BIAS_CLAMP :: 0.0 +DEFAULT_MAX_ANISOTROPY :: 16 +DEFAULT_MIP_LOD_BIAS :: 0.0 +DEFAULT_RENDER_TARGET_ARRAY_INDEX :: 0 +DEFAULT_SAMPLE_MASK :: 0xffffffff +DEFAULT_SCISSOR_ENDX :: 0 +DEFAULT_SCISSOR_ENDY :: 0 +DEFAULT_SCISSOR_STARTX :: 0 +DEFAULT_SCISSOR_STARTY :: 0 +DEFAULT_SLOPE_SCALED_DEPTH_BIAS :: 0.0 +DEFAULT_STENCIL_READ_MASK :: 0xff +DEFAULT_STENCIL_REFERENCE :: 0 +DEFAULT_STENCIL_WRITE_MASK :: 0xff +DEFAULT_VIEWPORT_AND_SCISSORRECT_INDEX :: 0 +DEFAULT_VIEWPORT_HEIGHT :: 0 +DEFAULT_VIEWPORT_MAX_DEPTH :: 0.0 +DEFAULT_VIEWPORT_MIN_DEPTH :: 0.0 +DEFAULT_VIEWPORT_TOPLEFTX :: 0 +DEFAULT_VIEWPORT_TOPLEFTY :: 0 +DEFAULT_VIEWPORT_WIDTH :: 0 + +DS_INPUT_CONTROL_POINTS_MAX_TOTAL_SCALARS :: 3968 +DS_INPUT_CONTROL_POINT_REGISTER_COMPONENTS :: 4 +DS_INPUT_CONTROL_POINT_REGISTER_COMPONENT_BIT_COUNT :: 32 +DS_INPUT_CONTROL_POINT_REGISTER_COUNT :: 32 +DS_INPUT_CONTROL_POINT_REGISTER_READS_PER_INST :: 2 +DS_INPUT_CONTROL_POINT_REGISTER_READ_PORTS :: 1 +DS_INPUT_DOMAIN_POINT_REGISTER_COMPONENTS :: 3 +DS_INPUT_DOMAIN_POINT_REGISTER_COMPONENT_BIT_COUNT :: 32 +DS_INPUT_DOMAIN_POINT_REGISTER_COUNT :: 1 +DS_INPUT_DOMAIN_POINT_REGISTER_READS_PER_INST :: 2 +DS_INPUT_DOMAIN_POINT_REGISTER_READ_PORTS :: 1 +DS_INPUT_PATCH_CONSTANT_REGISTER_COMPONENTS :: 4 +DS_INPUT_PATCH_CONSTANT_REGISTER_COMPONENT_BIT_COUNT :: 32 +DS_INPUT_PATCH_CONSTANT_REGISTER_COUNT :: 32 +DS_INPUT_PATCH_CONSTANT_REGISTER_READS_PER_INST :: 2 +DS_INPUT_PATCH_CONSTANT_REGISTER_READ_PORTS :: 1 +DS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENTS :: 1 +DS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENT_BIT_COUNT :: 32 +DS_INPUT_PRIMITIVE_ID_REGISTER_COUNT :: 1 +DS_INPUT_PRIMITIVE_ID_REGISTER_READS_PER_INST :: 2 +DS_INPUT_PRIMITIVE_ID_REGISTER_READ_PORTS :: 1 +DS_OUTPUT_REGISTER_COMPONENTS :: 4 +DS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT :: 32 +DS_OUTPUT_REGISTER_COUNT :: 32 + +FLOAT16_FUSED_TOLERANCE_IN_ULP :: 0.6 +FLOAT32_MAX :: 3.402823466e+38 +FLOAT32_TO_INTEGER_TOLERANCE_IN_ULP :: 0.6 +FLOAT_TO_SRGB_EXPONENT_DENOMINATOR :: 2.4 +FLOAT_TO_SRGB_EXPONENT_NUMERATOR :: 1.0 +FLOAT_TO_SRGB_OFFSET :: 0.055 +FLOAT_TO_SRGB_SCALE_1 :: 12.92 +FLOAT_TO_SRGB_SCALE_2 :: 1.055 +FLOAT_TO_SRGB_THRESHOLD :: 0.0031308 +FTOI_INSTRUCTION_MAX_INPUT :: 2147483647.999 +FTOI_INSTRUCTION_MIN_INPUT :: -2147483648.999 +FTOU_INSTRUCTION_MAX_INPUT :: 4294967295.999 +FTOU_INSTRUCTION_MIN_INPUT :: 0.0 +GS_INPUT_INSTANCE_ID_READS_PER_INST :: 2 +GS_INPUT_INSTANCE_ID_READ_PORTS :: 1 +GS_INPUT_INSTANCE_ID_REGISTER_COMPONENTS :: 1 +GS_INPUT_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT :: 32 +GS_INPUT_INSTANCE_ID_REGISTER_COUNT :: 1 +GS_INPUT_PRIM_CONST_REGISTER_COMPONENTS :: 1 +GS_INPUT_PRIM_CONST_REGISTER_COMPONENT_BIT_COUNT :: 32 +GS_INPUT_PRIM_CONST_REGISTER_COUNT :: 1 +GS_INPUT_PRIM_CONST_REGISTER_READS_PER_INST :: 2 +GS_INPUT_PRIM_CONST_REGISTER_READ_PORTS :: 1 +GS_INPUT_REGISTER_COMPONENTS :: 4 +GS_INPUT_REGISTER_COMPONENT_BIT_COUNT :: 32 +GS_INPUT_REGISTER_COUNT :: 32 +GS_INPUT_REGISTER_READS_PER_INST :: 2 +GS_INPUT_REGISTER_READ_PORTS :: 1 +GS_INPUT_REGISTER_VERTICES :: 32 +GS_MAX_INSTANCE_COUNT :: 32 +GS_MAX_OUTPUT_VERTEX_COUNT_ACROSS_INSTANCES :: 1024 +GS_OUTPUT_ELEMENTS :: 32 +GS_OUTPUT_REGISTER_COMPONENTS :: 4 +GS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT :: 32 +GS_OUTPUT_REGISTER_COUNT :: 32 +HS_CONTROL_POINT_PHASE_INPUT_REGISTER_COUNT :: 32 +HS_CONTROL_POINT_PHASE_OUTPUT_REGISTER_COUNT :: 32 +HS_CONTROL_POINT_REGISTER_COMPONENTS :: 4 +HS_CONTROL_POINT_REGISTER_COMPONENT_BIT_COUNT :: 32 +HS_CONTROL_POINT_REGISTER_READS_PER_INST :: 2 +HS_CONTROL_POINT_REGISTER_READ_PORTS :: 1 +HS_FORK_PHASE_INSTANCE_COUNT_UPPER_BOUND :: 0xffffffff +HS_INPUT_FORK_INSTANCE_ID_REGISTER_COMPONENTS :: 1 +HS_INPUT_FORK_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT :: 32 +HS_INPUT_FORK_INSTANCE_ID_REGISTER_COUNT :: 1 +HS_INPUT_FORK_INSTANCE_ID_REGISTER_READS_PER_INST :: 2 +HS_INPUT_FORK_INSTANCE_ID_REGISTER_READ_PORTS :: 1 +HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COMPONENTS :: 1 +HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT :: 32 +HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COUNT :: 1 +HS_INPUT_JOIN_INSTANCE_ID_REGISTER_READS_PER_INST :: 2 +HS_INPUT_JOIN_INSTANCE_ID_REGISTER_READ_PORTS :: 1 +HS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENTS :: 1 +HS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENT_BIT_COUNT :: 32 +HS_INPUT_PRIMITIVE_ID_REGISTER_COUNT :: 1 +HS_INPUT_PRIMITIVE_ID_REGISTER_READS_PER_INST :: 2 +HS_INPUT_PRIMITIVE_ID_REGISTER_READ_PORTS :: 1 +HS_JOIN_PHASE_INSTANCE_COUNT_UPPER_BOUND :: 0xffffffff +HS_MAXTESSFACTOR_LOWER_BOUND :: 1.0 +HS_MAXTESSFACTOR_UPPER_BOUND :: 64.0 +HS_OUTPUT_CONTROL_POINTS_MAX_TOTAL_SCALARS :: 3968 +HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COMPONENTS :: 1 +HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COMPONENT_BIT_COUNT :: 32 +HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COUNT :: 1 +HS_OUTPUT_CONTROL_POINT_ID_REGISTER_READS_PER_INST :: 2 +HS_OUTPUT_CONTROL_POINT_ID_REGISTER_READ_PORTS :: 1 +HS_OUTPUT_PATCH_CONSTANT_REGISTER_COMPONENTS :: 4 +HS_OUTPUT_PATCH_CONSTANT_REGISTER_COMPONENT_BIT_COUNT :: 32 +HS_OUTPUT_PATCH_CONSTANT_REGISTER_COUNT :: 32 +HS_OUTPUT_PATCH_CONSTANT_REGISTER_READS_PER_INST :: 2 +HS_OUTPUT_PATCH_CONSTANT_REGISTER_READ_PORTS :: 1 +HS_OUTPUT_PATCH_CONSTANT_REGISTER_SCALAR_COMPONENTS :: 128 +IA_DEFAULT_INDEX_BUFFER_OFFSET_IN_BYTES :: 0 +IA_DEFAULT_PRIMITIVE_TOPOLOGY :: 0 +IA_DEFAULT_VERTEX_BUFFER_OFFSET_IN_BYTES :: 0 +IA_INDEX_INPUT_RESOURCE_SLOT_COUNT :: 1 +IA_INSTANCE_ID_BIT_COUNT :: 32 +IA_INTEGER_ARITHMETIC_BIT_COUNT :: 32 +IA_PATCH_MAX_CONTROL_POINT_COUNT :: 32 +IA_PRIMITIVE_ID_BIT_COUNT :: 32 +IA_VERTEX_ID_BIT_COUNT :: 32 +IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT :: 32 +IA_VERTEX_INPUT_STRUCTURE_ELEMENTS_COMPONENTS :: 128 +IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT :: 32 +INTEGER_DIVIDE_BY_ZERO_QUOTIENT :: 0xffffffff +INTEGER_DIVIDE_BY_ZERO_REMAINDER :: 0xffffffff +KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL :: 0xffffffff +KEEP_UNORDERED_ACCESS_VIEWS :: 0xffffffff +LINEAR_GAMMA :: 1.0 +MAJOR_VERSION :: 11 +MAX_BORDER_COLOR_COMPONENT :: 1.0 +MAX_DEPTH :: 1.0 +MAX_MAXANISOTROPY :: 16 +MAX_MULTISAMPLE_SAMPLE_COUNT :: 32 +MAX_POSITION_VALUE :: 3.402823466e+34 +MAX_TEXTURE_DIMENSION_2_TO_EXP :: 17 +MINOR_VERSION :: 0 +MIN_BORDER_COLOR_COMPONENT :: 0.0 +MIN_DEPTH :: 0.0 +MIN_MAXANISOTROPY :: 0 +MIP_LOD_BIAS_MAX :: 15.99 +MIP_LOD_BIAS_MIN :: -16.0 +MIP_LOD_FRACTIONAL_BIT_COUNT :: 8 +MIP_LOD_RANGE_BIT_COUNT :: 8 +MULTISAMPLE_ANTIALIAS_LINE_WIDTH :: 1.4 +NONSAMPLE_FETCH_OUT_OF_RANGE_ACCESS_RESULT :: 0 +PIXEL_ADDRESS_RANGE_BIT_COUNT :: 15 +PRE_SCISSOR_PIXEL_ADDRESS_RANGE_BIT_COUNT :: 16 +PS_CS_UAV_REGISTER_COMPONENTS :: 1 +PS_CS_UAV_REGISTER_COUNT :: 8 +PS_CS_UAV_REGISTER_READS_PER_INST :: 1 +PS_CS_UAV_REGISTER_READ_PORTS :: 1 +PS_FRONTFACING_DEFAULT_VALUE :: 0xffffffff +PS_FRONTFACING_FALSE_VALUE :: 0 +PS_FRONTFACING_TRUE_VALUE :: 0xffffffff +PS_INPUT_REGISTER_COMPONENTS :: 4 +PS_INPUT_REGISTER_COMPONENT_BIT_COUNT :: 32 +PS_INPUT_REGISTER_COUNT :: 32 +PS_INPUT_REGISTER_READS_PER_INST :: 2 +PS_INPUT_REGISTER_READ_PORTS :: 1 +PS_LEGACY_PIXEL_CENTER_FRACTIONAL_COMPONENT :: 0.0 +PS_OUTPUT_DEPTH_REGISTER_COMPONENTS :: 1 +PS_OUTPUT_DEPTH_REGISTER_COMPONENT_BIT_COUNT :: 32 +PS_OUTPUT_DEPTH_REGISTER_COUNT :: 1 +PS_OUTPUT_MASK_REGISTER_COMPONENTS :: 1 +PS_OUTPUT_MASK_REGISTER_COMPONENT_BIT_COUNT :: 32 +PS_OUTPUT_MASK_REGISTER_COUNT :: 1 +PS_OUTPUT_REGISTER_COMPONENTS :: 4 +PS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT :: 32 +PS_OUTPUT_REGISTER_COUNT :: 8 +PS_PIXEL_CENTER_FRACTIONAL_COMPONENT :: 0.5 +RAW_UAV_SRV_BYTE_ALIGNMENT :: 16 +REQ_BLEND_OBJECT_COUNT_PER_DEVICE :: 4096 +REQ_BUFFER_RESOURCE_TEXEL_COUNT_2_TO_EXP :: 27 +REQ_CONSTANT_BUFFER_ELEMENT_COUNT :: 4096 +REQ_DEPTH_STENCIL_OBJECT_COUNT_PER_DEVICE :: 4096 +REQ_DRAWINDEXED_INDEX_COUNT_2_TO_EXP :: 32 +REQ_DRAW_VERTEX_COUNT_2_TO_EXP :: 32 +REQ_FILTERING_HW_ADDRESSABLE_RESOURCE_DIMENSION :: 16384 +REQ_GS_INVOCATION_32BIT_OUTPUT_COMPONENT_LIMIT :: 1024 +REQ_IMMEDIATE_CONSTANT_BUFFER_ELEMENT_COUNT :: 4096 +REQ_MAXANISOTROPY :: 16 +REQ_MIP_LEVELS :: 15 +REQ_MULTI_ELEMENT_STRUCTURE_SIZE_IN_BYTES :: 2048 +REQ_RASTERIZER_OBJECT_COUNT_PER_DEVICE :: 4096 +REQ_RENDER_TO_BUFFER_WINDOW_WIDTH :: 16384 +REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_A_TERM :: 128 +REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_B_TERM :: 0.25 +REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_C_TERM :: 2048 +REQ_RESOURCE_VIEW_COUNT_PER_DEVICE_2_TO_EXP :: 20 +REQ_SAMPLER_OBJECT_COUNT_PER_DEVICE :: 4096 +REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION :: 2048 +REQ_TEXTURE1D_U_DIMENSION :: 16384 +REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION :: 2048 +REQ_TEXTURE2D_U_OR_V_DIMENSION :: 16384 +REQ_TEXTURE3D_U_V_OR_W_DIMENSION :: 2048 +REQ_TEXTURECUBE_DIMENSION :: 16384 +RESINFO_INSTRUCTION_MISSING_COMPONENT_RETVAL :: 0 +SHADER_MAJOR_VERSION :: 5 +SHADER_MAX_INSTANCES :: 65535 +SHADER_MAX_INTERFACES :: 253 +SHADER_MAX_INTERFACE_CALL_SITES :: 4096 +SHADER_MAX_TYPES :: 65535 +SHADER_MINOR_VERSION :: 0 +SHIFT_INSTRUCTION_PAD_VALUE :: 0 +SHIFT_INSTRUCTION_SHIFT_VALUE_BIT_COUNT :: 5 +SIMULTANEOUS_RENDER_TARGET_COUNT :: 8 +SO_BUFFER_MAX_STRIDE_IN_BYTES :: 2048 +SO_BUFFER_MAX_WRITE_WINDOW_IN_BYTES :: 512 +SO_BUFFER_SLOT_COUNT :: 4 +SO_DDI_REGISTER_INDEX_DENOTING_GAP :: 0xffffffff +SO_NO_RASTERIZED_STREAM :: 0xffffffff +SO_OUTPUT_COMPONENT_COUNT :: 128 +SO_STREAM_COUNT :: 4 +SPEC_DATE_DAY :: 16 +SPEC_DATE_YEAR :: 2011 +SPEC_VERSION :: 1.07 +SRGB_GAMMA :: 2.2 +SRGB_TO_FLOAT_DENOMINATOR_1 :: 12.92 +SRGB_TO_FLOAT_DENOMINATOR_2 :: 1.055 +SRGB_TO_FLOAT_EXPONENT :: 2.4 +SRGB_TO_FLOAT_OFFSET :: 0.055 +SRGB_TO_FLOAT_THRESHOLD :: 0.04045 +SRGB_TO_FLOAT_TOLERANCE_IN_ULP :: 0.5 +STANDARD_COMPONENT_BIT_COUNT :: 32 +STANDARD_COMPONENT_BIT_COUNT_DOUBLED :: 64 +STANDARD_MAXIMUM_ELEMENT_ALIGNMENT_BYTE_MULTIPLE :: 4 +STANDARD_PIXEL_COMPONENT_COUNT :: 128 +STANDARD_PIXEL_ELEMENT_COUNT :: 32 +STANDARD_VECTOR_SIZE :: 4 +STANDARD_VERTEX_ELEMENT_COUNT :: 32 +STANDARD_VERTEX_TOTAL_COMPONENT_COUNT :: 64 +SUBPIXEL_FRACTIONAL_BIT_COUNT :: 8 +SUBTEXEL_FRACTIONAL_BIT_COUNT :: 8 +TESSELLATOR_MAX_EVEN_TESSELLATION_FACTOR :: 64 +TESSELLATOR_MAX_ISOLINE_DENSITY_TESSELLATION_FACTOR :: 64 +TESSELLATOR_MAX_ODD_TESSELLATION_FACTOR :: 63 +TESSELLATOR_MAX_TESSELLATION_FACTOR :: 64 +TESSELLATOR_MIN_EVEN_TESSELLATION_FACTOR :: 2 +TESSELLATOR_MIN_ISOLINE_DENSITY_TESSELLATION_FACTOR :: 1 +TESSELLATOR_MIN_ODD_TESSELLATION_FACTOR :: 1 +TEXEL_ADDRESS_RANGE_BIT_COUNT :: 16 +UNBOUND_MEMORY_ACCESS_RESULT :: 0 +VIEWPORT_AND_SCISSORRECT_MAX_INDEX :: 15 +VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE :: 16 +VIEWPORT_BOUNDS_MAX :: 32767 +VIEWPORT_BOUNDS_MIN :: -32768 +VS_INPUT_REGISTER_COMPONENTS :: 4 +VS_INPUT_REGISTER_COMPONENT_BIT_COUNT :: 32 +VS_INPUT_REGISTER_COUNT :: 32 +VS_INPUT_REGISTER_READS_PER_INST :: 2 +VS_INPUT_REGISTER_READ_PORTS :: 1 +VS_OUTPUT_REGISTER_COMPONENTS :: 4 +VS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT :: 32 +VS_OUTPUT_REGISTER_COUNT :: 32 +WHQL_CONTEXT_COUNT_FOR_RESOURCE_LIMIT :: 10 +WHQL_DRAWINDEXED_INDEX_COUNT_2_TO_EXP :: 25 +WHQL_DRAW_VERTEX_COUNT_2_TO_EXP :: 25 +_1_UAV_SLOT_COUNT :: 64 +_2_TILED_RESOURCE_TILE_SIZE_IN_BYTES :: 65536 +_4_VIDEO_DECODER_MAX_HISTOGRAM_COMPONENTS :: 4 +_4_VIDEO_DECODER_HISTOGRAM_OFFSET_ALIGNMENT :: 256 + +_FACD3D11 :: 0x87c + +APPEND_ALIGNED_ELEMENT :: 0xffffffff +FILTER_REDUCTION_TYPE_MASK :: 0x3 +FILTER_REDUCTION_TYPE_SHIFT :: 7 +FILTER_TYPE_MASK :: 0x3 +MIN_FILTER_SHIFT :: 4 +MAG_FILTER_SHIFT :: 2 +MIP_FILTER_SHIFT :: 0 +COMPARISON_FILTERING_BIT :: 0x80 +ANISOTROPIC_FILTERING_BIT :: 0x40 +SDK_VERSION :: 7 +RETURN_PARAMETER_INDEX :: -1 + +COMPONENT_MASK :: enum u32 { // TODO: make bit_set + X = 1, + Y = 2, + Z = 4, + W = 8, +} + +SHADER_REQUIRES :: enum u32 { // TODO: make bit_set + DOUBLES = 0x00000001, + EARLY_DEPTH_STENCIL = 0x00000002, + UAVS_AT_EVERY_STAGE = 0x00000004, + _64_UAVS = 0x00000008, + MINIMUM_PRECISION = 0x00000010, + _11_1_DOUBLE_EXTENSIONS = 0x00000020, + _11_1_SHADER_EXTENSIONS = 0x00000040, + LEVEL_9_COMPARISON_FILTERING = 0x00000080, + TILED_RESOURCES = 0x00000100, +} + +DRIVER_TYPE :: enum i32 { + UNKNOWN = 0, + HARDWARE = 1, + REFERENCE = 2, + NULL = 3, + SOFTWARE = 4, + WARP = 5, +} + +FEATURE_LEVEL :: enum i32 { + _1_0_CORE = 4096, + _9_1 = 37120, + _9_2 = 37376, + _9_3 = 37632, + _10_0 = 40960, + _10_1 = 41216, + _11_0 = 45056, + _11_1 = 45312, + _12_0 = 49152, + _12_1 = 49408, +} + +PRIMITIVE_TOPOLOGY :: enum i32 { + UNDEFINED = 0, + POINTLIST = 1, + LINELIST = 2, + LINESTRIP = 3, + TRIANGLELIST = 4, + TRIANGLESTRIP = 5, + LINELIST_ADJ = 10, + LINESTRIP_ADJ = 11, + TRIANGLELIST_ADJ = 12, + TRIANGLESTRIP_ADJ = 13, + _1_CONTROL_POINT_PATCHLIST = 33, + _2_CONTROL_POINT_PATCHLIST = 34, + _3_CONTROL_POINT_PATCHLIST = 35, + _4_CONTROL_POINT_PATCHLIST = 36, + _5_CONTROL_POINT_PATCHLIST = 37, + _6_CONTROL_POINT_PATCHLIST = 38, + _7_CONTROL_POINT_PATCHLIST = 39, + _8_CONTROL_POINT_PATCHLIST = 40, + _9_CONTROL_POINT_PATCHLIST = 41, + _10_CONTROL_POINT_PATCHLIST = 42, + _11_CONTROL_POINT_PATCHLIST = 43, + _12_CONTROL_POINT_PATCHLIST = 44, + _13_CONTROL_POINT_PATCHLIST = 45, + _14_CONTROL_POINT_PATCHLIST = 46, + _15_CONTROL_POINT_PATCHLIST = 47, + _16_CONTROL_POINT_PATCHLIST = 48, + _17_CONTROL_POINT_PATCHLIST = 49, + _18_CONTROL_POINT_PATCHLIST = 50, + _19_CONTROL_POINT_PATCHLIST = 51, + _20_CONTROL_POINT_PATCHLIST = 52, + _21_CONTROL_POINT_PATCHLIST = 53, + _22_CONTROL_POINT_PATCHLIST = 54, + _23_CONTROL_POINT_PATCHLIST = 55, + _24_CONTROL_POINT_PATCHLIST = 56, + _25_CONTROL_POINT_PATCHLIST = 57, + _26_CONTROL_POINT_PATCHLIST = 58, + _27_CONTROL_POINT_PATCHLIST = 59, + _28_CONTROL_POINT_PATCHLIST = 60, + _29_CONTROL_POINT_PATCHLIST = 61, + _30_CONTROL_POINT_PATCHLIST = 62, + _31_CONTROL_POINT_PATCHLIST = 63, + _32_CONTROL_POINT_PATCHLIST = 64, +} + +PRIMITIVE :: enum i32 { + UNDEFINED = 0, + POINT = 1, + LINE = 2, + TRIANGLE = 3, + LINE_ADJ = 6, + TRIANGLE_ADJ = 7, + _1_CONTROL_POINT_PATCH = 8, + _2_CONTROL_POINT_PATCH = 9, + _3_CONTROL_POINT_PATCH = 10, + _4_CONTROL_POINT_PATCH = 11, + _5_CONTROL_POINT_PATCH = 12, + _6_CONTROL_POINT_PATCH = 13, + _7_CONTROL_POINT_PATCH = 14, + _8_CONTROL_POINT_PATCH = 15, + _9_CONTROL_POINT_PATCH = 16, + _10_CONTROL_POINT_PATCH = 17, + _11_CONTROL_POINT_PATCH = 18, + _12_CONTROL_POINT_PATCH = 19, + _13_CONTROL_POINT_PATCH = 20, + _14_CONTROL_POINT_PATCH = 21, + _15_CONTROL_POINT_PATCH = 22, + _16_CONTROL_POINT_PATCH = 23, + _17_CONTROL_POINT_PATCH = 24, + _18_CONTROL_POINT_PATCH = 25, + _19_CONTROL_POINT_PATCH = 26, + _20_CONTROL_POINT_PATCH = 27, + _21_CONTROL_POINT_PATCH = 28, + _22_CONTROL_POINT_PATCH = 29, + _23_CONTROL_POINT_PATCH = 30, + _24_CONTROL_POINT_PATCH = 31, + _25_CONTROL_POINT_PATCH = 32, + _26_CONTROL_POINT_PATCH = 33, + _27_CONTROL_POINT_PATCH = 34, + _28_CONTROL_POINT_PATCH = 35, + _29_CONTROL_POINT_PATCH = 36, + _30_CONTROL_POINT_PATCH = 37, + _31_CONTROL_POINT_PATCH = 38, + _32_CONTROL_POINT_PATCH = 39, +} + +SRV_DIMENSION :: enum i32 { + UNKNOWN = 0, + BUFFER = 1, + TEXTURE1D = 2, + TEXTURE1DARRAY = 3, + TEXTURE2D = 4, + TEXTURE2DARRAY = 5, + TEXTURE2DMS = 6, + TEXTURE2DMSARRAY = 7, + TEXTURE3D = 8, + TEXTURECUBE = 9, + TEXTURECUBEARRAY = 10, + BUFFEREX = 11, +} + +PFN_DESTRUCTION_CALLBACK :: #type proc "c" (a0: rawptr) + + +ID3DDestructionNotifier_UUID :: "A06EB39A-50DA-425B-8C31-4EECD6C270F3" +ID3DDestructionNotifier :: struct #raw_union { + #subtype iunknown: IUnknown, + using id3ddestructionnotifier_vtable: ^ID3DDestructionNotifier_VTable, +} +ID3DDestructionNotifier_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + RegisterDestructionCallback: proc "stdcall" (this: ^ID3DDestructionNotifier, callbackFn: PFN_DESTRUCTION_CALLBACK, pData: rawptr, pCallbackID: ^u32) -> HRESULT, + UnregisterDestructionCallback: proc "stdcall" (this: ^ID3DDestructionNotifier, callbackID: u32) -> HRESULT, +} + + +SHADER_VARIABLE_CLASS :: enum i32 { + SCALAR = 0, + VECTOR = 1, + MATRIX_ROWS = 2, + MATRIX_COLUMNS = 3, + OBJECT = 4, + STRUCT = 5, + INTERFACE_CLASS = 6, + INTERFACE_POINTER = 7, +} + +SHADER_VARIABLE_FLAGS :: enum u32 { // TODO: make bit_set + USERPACKED = 0x1, + USED = 0x2, + INTERFACE_POINTER = 0x4, + INTERFACE_PARAMETER = 0x8, +} + +SHADER_VARIABLE_TYPE :: enum i32 { + VOID = 0, + BOOL = 1, + INT = 2, + FLOAT = 3, + STRING = 4, + TEXTURE = 5, + TEXTURE1D = 6, + TEXTURE2D = 7, + TEXTURE3D = 8, + TEXTURECUBE = 9, + SAMPLER = 10, + SAMPLER1D = 11, + SAMPLER2D = 12, + SAMPLER3D = 13, + SAMPLERCUBE = 14, + PIXELSHADER = 15, + VERTEXSHADER = 16, + PIXELFRAGMENT = 17, + VERTEXFRAGMENT = 18, + UINT = 19, + UINT8 = 20, + GEOMETRYSHADER = 21, + RASTERIZER = 22, + DEPTHSTENCIL = 23, + BLEND = 24, + BUFFER = 25, + CBUFFER = 26, + TBUFFER = 27, + TEXTURE1DARRAY = 28, + TEXTURE2DARRAY = 29, + RENDERTARGETVIEW = 30, + DEPTHSTENCILVIEW = 31, + TEXTURE2DMS = 32, + TEXTURE2DMSARRAY = 33, + TEXTURECUBEARRAY = 34, + HULLSHADER = 35, + DOMAINSHADER = 36, + INTERFACE_POINTER = 37, + COMPUTESHADER = 38, + DOUBLE = 39, + RWTEXTURE1D = 40, + RWTEXTURE1DARRAY = 41, + RWTEXTURE2D = 42, + RWTEXTURE2DARRAY = 43, + RWTEXTURE3D = 44, + RWBUFFER = 45, + BYTEADDRESS_BUFFER = 46, + RWBYTEADDRESS_BUFFER = 47, + STRUCTURED_BUFFER = 48, + RWSTRUCTURED_BUFFER = 49, + APPEND_STRUCTURED_BUFFER = 50, + CONSUME_STRUCTURED_BUFFER = 51, + MIN8FLOAT = 52, + MIN10FLOAT = 53, + MIN16FLOAT = 54, + MIN12INT = 55, + MIN16INT = 56, + MIN16UINT = 57, +} + +SHADER_INPUT_FLAGS :: enum u32 { // TODO: make bit_set + USERPACKED = 0x1, + COMPARISON_SAMPLER = 0x2, + TEXTURE_COMPONENT_0 = 0x4, + TEXTURE_COMPONENT_1 = 0x8, + TEXTURE_COMPONENTS = 0xc, + UNUSED = 0x10, +} + +SHADER_INPUT_TYPE :: enum i32 { + CBUFFER = 0, + TBUFFER = 1, + TEXTURE = 2, + SAMPLER = 3, + UAV_RWTYPED = 4, + STRUCTURED = 5, + UAV_RWSTRUCTURED = 6, + BYTEADDRESS = 7, + UAV_RWBYTEADDRESS = 8, + UAV_APPEND_STRUCTURED = 9, + UAV_CONSUME_STRUCTURED = 10, + UAV_RWSTRUCTURED_WITH_COUNTER = 11, + RTACCELERATIONSTRUCTURE = 12, + UAV_FEEDBACKTEXTURE = 13, +} + +SHADER_CBUFFER_FLAGS :: enum u32 { // TODO: make bit_set + USERPACKED = 0x1, +} + +CBUFFER_TYPE :: enum i32 { + CBUFFER = 0, + TBUFFER = 1, + INTERFACE_POINTERS = 2, + RESOURCE_BIND_INFO = 3, +} + +NAME :: enum i32 { + UNDEFINED = 0, + POSITION = 1, + CLIP_DISTANCE = 2, + CULL_DISTANCE = 3, + RENDER_TARGET_ARRAY_INDEX = 4, + VIEWPORT_ARRAY_INDEX = 5, + VERTEX_ID = 6, + PRIMITIVE_ID = 7, + INSTANCE_ID = 8, + IS_FRONT_FACE = 9, + SAMPLE_INDEX = 10, + FINAL_QUAD_EDGE_TESSFACTOR = 11, + FINAL_QUAD_INSIDE_TESSFACTOR = 12, + FINAL_TRI_EDGE_TESSFACTOR = 13, + FINAL_TRI_INSIDE_TESSFACTOR = 14, + FINAL_LINE_DETAIL_TESSFACTOR = 15, + FINAL_LINE_DENSITY_TESSFACTOR = 16, + BARYCENTRICS = 23, + SHADINGRATE = 24, + CULLPRIMITIVE = 25, + TARGET = 64, + DEPTH = 65, + COVERAGE = 66, + DEPTH_GREATER_EQUAL = 67, + DEPTH_LESS_EQUAL = 68, + STENCIL_REF = 69, + INNER_COVERAGE = 70, +} + +RESOURCE_RETURN_TYPE :: enum i32 { + UNORM = 1, + SNORM = 2, + SINT = 3, + UINT = 4, + FLOAT = 5, + MIXED = 6, + DOUBLE = 7, + CONTINUED = 8, +} + +REGISTER_COMPONENT_TYPE :: enum i32 { + UNKNOWN = 0, + UINT32 = 1, + SINT32 = 2, + FLOAT32 = 3, +} + +TESSELLATOR_DOMAIN :: enum i32 { + UNDEFINED = 0, + ISOLINE = 1, + TRI = 2, + QUAD = 3, +} + +TESSELLATOR_PARTITIONING :: enum i32 { + UNDEFINED = 0, + INTEGER = 1, + POW2 = 2, + FRACTIONAL_ODD = 3, + FRACTIONAL_EVEN = 4, +} + +TESSELLATOR_OUTPUT_PRIMITIVE :: enum i32 { + UNDEFINED = 0, + POINT = 1, + LINE = 2, + TRIANGLE_CW = 3, + TRIANGLE_CCW = 4, +} + +MIN_PRECISION :: enum i32 { + DEFAULT = 0, + FLOAT_16 = 1, + FLOAT_2_8 = 2, + RESERVED = 3, + SINT_16 = 4, + UINT_16 = 5, + ANY_16 = 240, + ANY_10 = 241, +} + +INTERPOLATION_MODE :: enum i32 { + UNDEFINED = 0, + CONSTANT = 1, + LINEAR = 2, + LINEAR_CENTROID = 3, + LINEAR_NOPERSPECTIVE = 4, + LINEAR_NOPERSPECTIVE_CENTROID = 5, + LINEAR_SAMPLE = 6, + LINEAR_NOPERSPECTIVE_SAMPLE = 7, +} + +PARAMETER_FLAGS :: enum u32 { // TODO: make bit_set + NONE = 0x0, + IN = 0x1, + OUT = 0x2, +} + +CDEFAULT :: struct { + _: u8, +} + +INPUT_CLASSIFICATION :: enum i32 { + VERTEX_DATA = 0, + INSTANCE_DATA = 1, +} + +INPUT_ELEMENT_DESC :: struct { + SemanticName: cstring, + SemanticIndex: u32, + Format: dxgi.FORMAT, + InputSlot: u32, + AlignedByteOffset: u32, + InputSlotClass: INPUT_CLASSIFICATION, + InstanceDataStepRate: u32, +} + +FILL_MODE :: enum i32 { + WIREFRAME = 2, + SOLID = 3, +} + +CULL_MODE :: enum i32 { + NONE = 1, + FRONT = 2, + BACK = 3, +} + +SO_DECLARATION_ENTRY :: struct { + Stream: u32, + SemanticName: cstring, + SemanticIndex: u32, + StartComponent: u8, + ComponentCount: u8, + OutputSlot: u8, +} + +VIEWPORT :: struct { + TopLeftX: f32, + TopLeftY: f32, + Width: f32, + Height: f32, + MinDepth: f32, + MaxDepth: f32, +} + +DRAW_INSTANCED_INDIRECT_ARGS :: struct { + VertexCountPerInstance: u32, + InstanceCount: u32, + StartVertexLocation: u32, + StartInstanceLocation: u32, +} + +DRAW_INDEXED_INSTANCED_INDIRECT_ARGS :: struct { + IndexCountPerInstance: u32, + InstanceCount: u32, + StartIndexLocation: u32, + BaseVertexLocation: i32, + StartInstanceLocation: u32, +} + +RESOURCE_DIMENSION :: enum i32 { + UNKNOWN = 0, + BUFFER = 1, + TEXTURE1D = 2, + TEXTURE2D = 3, + TEXTURE3D = 4, +} + +DSV_DIMENSION :: enum i32 { + UNKNOWN = 0, + TEXTURE1D = 1, + TEXTURE1DARRAY = 2, + TEXTURE2D = 3, + TEXTURE2DARRAY = 4, + TEXTURE2DMS = 5, + TEXTURE2DMSARRAY = 6, +} + +RTV_DIMENSION :: enum i32 { + UNKNOWN = 0, + BUFFER = 1, + TEXTURE1D = 2, + TEXTURE1DARRAY = 3, + TEXTURE2D = 4, + TEXTURE2DARRAY = 5, + TEXTURE2DMS = 6, + TEXTURE2DMSARRAY = 7, + TEXTURE3D = 8, +} + +UAV_DIMENSION :: enum i32 { + UNKNOWN = 0, + BUFFER = 1, + TEXTURE1D = 2, + TEXTURE1DARRAY = 3, + TEXTURE2D = 4, + TEXTURE2DARRAY = 5, + TEXTURE3D = 8, +} + +USAGE :: enum i32 { + DEFAULT = 0, + IMMUTABLE = 1, + DYNAMIC = 2, + STAGING = 3, +} + +BIND_FLAG :: enum u32 { // TODO: make bit_set + VERTEX_BUFFER = 0x1, + INDEX_BUFFER = 0x2, + CONSTANT_BUFFER = 0x4, + SHADER_RESOURCE = 0x8, + STREAM_OUTPUT = 0x10, + RENDER_TARGET = 0x20, + DEPTH_STENCIL = 0x40, + UNORDERED_ACCESS = 0x80, + DECODER = 0x200, + VIDEO_ENCODER = 0x400, +} + +CPU_ACCESS_FLAG :: enum u32 { // TODO: make bit_set + WRITE = 0x10000, + READ = 0x20000, + +} + +RESOURCE_MISC_FLAG :: enum u32 { // TODO: make bit_set + GENERATE_MIPS = 0x1, + SHARED = 0x2, + TEXTURECUBE = 0x4, + DRAWINDIRECT_ARGS = 0x10, + BUFFER_ALLOW_RAW_VIEWS = 0x20, + BUFFER_STRUCTURED = 0x40, + RESOURCE_CLAMP = 0x80, + SHARED_KEYEDMUTEX = 0x100, + GDI_COMPATIBLE = 0x200, + SHARED_NTHANDLE = 0x800, + RESTRICTED_CONTENT = 0x1000, + RESTRICT_SHARED_RESOURCE = 0x2000, + RESTRICT_SHARED_RESOURCE_DRIVER = 0x4000, + GUARDED = 0x8000, + TILE_POOL = 0x20000, + TILED = 0x40000, + HW_PROTECTED = 0x80000, +} + +MAP :: enum i32 { + READ = 1, + WRITE = 2, + READ_WRITE = 3, + WRITE_DISCARD = 4, + WRITE_NO_OVERWRITE = 5, +} + +MAP_FLAG :: enum u32 { // TODO: make bit_set + DO_NOT_WAIT = 0x100000, +} + +RAISE_FLAG :: enum u32 { // TODO: make bit_set + DRIVER_INTERNAL_ERROR = 0x1, +} + +CLEAR_FLAG :: enum u32 { // TODO: make bit_set + DEPTH = 0x1, + STENCIL = 0x2, +} + + +CRECT :: struct { + using d3d11_rect: RECT, +} + +BOX :: struct { + left: u32, + top: u32, + front: u32, + right: u32, + bottom: u32, + back: u32, +} + +CBOX :: struct { + using d3d11_box: BOX, +} + + +IDeviceChild_UUID :: "1841E5C8-16B0-489B-BCC8-44CFB0D5DEAE" +IDeviceChild :: struct #raw_union { + #subtype iunknown: IUnknown, + using id3d11devicechild_vtable: ^IDeviceChild_VTable, +} +IDeviceChild_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + GetDevice: proc "stdcall" (this: ^IDeviceChild, ppDevice: ^^IDevice), + GetPrivateData: proc "stdcall" (this: ^IDeviceChild, guid: ^GUID, pDataSize: ^u32, pData: rawptr) -> HRESULT, + SetPrivateData: proc "stdcall" (this: ^IDeviceChild, guid: ^GUID, DataSize: u32, pData: rawptr) -> HRESULT, + SetPrivateDataInterface: proc "stdcall" (this: ^IDeviceChild, guid: ^GUID, pData: ^IUnknown) -> HRESULT, +} + + +COMPARISON_FUNC :: enum i32 { + NEVER = 1, + LESS = 2, + EQUAL = 3, + LESS_EQUAL = 4, + GREATER = 5, + NOT_EQUAL = 6, + GREATER_EQUAL = 7, + ALWAYS = 8, +} + +DEPTH_WRITE_MASK :: enum i32 { + ZERO = 0, + ALL = 1, +} + +STENCIL_OP :: enum i32 { + KEEP = 1, + ZERO = 2, + REPLACE = 3, + INCR_SAT = 4, + DECR_SAT = 5, + INVERT = 6, + INCR = 7, + DECR = 8, +} + +DEPTH_STENCILOP_DESC :: struct { + StencilFailOp: STENCIL_OP, + StencilDepthFailOp: STENCIL_OP, + StencilPassOp: STENCIL_OP, + StencilFunc: COMPARISON_FUNC, +} + +DEPTH_STENCIL_DESC :: struct { + DepthEnable: BOOL, + DepthWriteMask: DEPTH_WRITE_MASK, + DepthFunc: COMPARISON_FUNC, + StencilEnable: BOOL, + StencilReadMask: u8, + StencilWriteMask: u8, + FrontFace: DEPTH_STENCILOP_DESC, + BackFace: DEPTH_STENCILOP_DESC, +} + +CDEPTH_STENCIL_DESC :: struct { + using d3d11_depth_stencil_desc: DEPTH_STENCIL_DESC, +} + + +IDepthStencilState_UUID :: "03823EFB-8D8F-4E1C-9AA2-F64BB2CBFDF1" +IDepthStencilState :: struct #raw_union { + #subtype id3d11devicechild: IDeviceChild, + using id3d11depthstencilstate_vtable: ^IDepthStencilState_VTable, +} +IDepthStencilState_VTable :: struct { + using id3d11devicechild_vtable: IDeviceChild_VTable, + GetDesc: proc "stdcall" (this: ^IDepthStencilState, pDesc: ^DEPTH_STENCIL_DESC), +} + + +BLEND :: enum i32 { + ZERO = 1, + ONE = 2, + SRC_COLOR = 3, + INV_SRC_COLOR = 4, + SRC_ALPHA = 5, + INV_SRC_ALPHA = 6, + DEST_ALPHA = 7, + INV_DEST_ALPHA = 8, + DEST_COLOR = 9, + INV_DEST_COLOR = 10, + SRC_ALPHA_SAT = 11, + BLEND_FACTOR = 14, + INV_BLEND_FACTOR = 15, + SRC1_COLOR = 16, + INV_SRC1_COLOR = 17, + SRC1_ALPHA = 18, + INV_SRC1_ALPHA = 19, +} + +BLEND_OP :: enum i32 { + ADD = 1, + SUBTRACT = 2, + REV_SUBTRACT = 3, + MIN = 4, + MAX = 5, +} + +COLOR_WRITE_ENABLE :: enum i32 { // TODO: make bit_set + RED = 1, + GREEN = 2, + BLUE = 4, + ALPHA = 8, + ALL = 15, +} + +RENDER_TARGET_BLEND_DESC :: struct { + BlendEnable: BOOL, + SrcBlend: BLEND, + DestBlend: BLEND, + BlendOp: BLEND_OP, + SrcBlendAlpha: BLEND, + DestBlendAlpha: BLEND, + BlendOpAlpha: BLEND_OP, + RenderTargetWriteMask: u8, +} + +BLEND_DESC :: struct { + AlphaToCoverageEnable: BOOL, + IndependentBlendEnable: BOOL, + RenderTarget: [8]RENDER_TARGET_BLEND_DESC, +} + +CBLEND_DESC :: struct { + using d3d11_blend_desc: BLEND_DESC, +} + + +IBlendState_UUID :: "75B68FAA-347D-4159-8F45-A0640F01CD9A" +IBlendState :: struct #raw_union { + #subtype id3d11devicechild: IDeviceChild, + using id3d11blendstate_vtable: ^IBlendState_VTable, +} +IBlendState_VTable :: struct { + using id3d11devicechild_vtable: IDeviceChild_VTable, + GetDesc: proc "stdcall" (this: ^IBlendState, pDesc: ^BLEND_DESC), +} + + +RASTERIZER_DESC :: struct { + FillMode: FILL_MODE, + CullMode: CULL_MODE, + FrontCounterClockwise: BOOL, + DepthBias: i32, + DepthBiasClamp: f32, + SlopeScaledDepthBias: f32, + DepthClipEnable: BOOL, + ScissorEnable: BOOL, + MultisampleEnable: BOOL, + AntialiasedLineEnable: BOOL, +} + +CRASTERIZER_DESC :: struct { + using d3d11_rasterizer_desc: RASTERIZER_DESC, +} + + +IRasterizerState_UUID :: "9BB4AB81-AB1A-4D8F-B506-FC04200B6EE7" +IRasterizerState :: struct #raw_union { + #subtype id3d11devicechild: IDeviceChild, + using id3d11rasterizerstate_vtable: ^IRasterizerState_VTable, +} +IRasterizerState_VTable :: struct { + using id3d11devicechild_vtable: IDeviceChild_VTable, + GetDesc: proc "stdcall" (this: ^IRasterizerState, pDesc: ^RASTERIZER_DESC), +} + + +SUBRESOURCE_DATA :: struct { + pSysMem: rawptr, + SysMemPitch: u32, + SysMemSlicePitch: u32, +} + +MAPPED_SUBRESOURCE :: struct { + pData: rawptr, + RowPitch: u32, + DepthPitch: u32, +} + + +IResource_UUID :: "DC8E63F3-D12B-4952-B47B-5E45026A862D" +IResource :: struct #raw_union { + #subtype id3d11devicechild: IDeviceChild, + using id3d11resource_vtable: ^IResource_VTable, +} +IResource_VTable :: struct { + using id3d11devicechild_vtable: IDeviceChild_VTable, + GetType: proc "stdcall" (this: ^IResource, pResourceDimension: ^RESOURCE_DIMENSION), + SetEvictionPriority: proc "stdcall" (this: ^IResource, EvictionPriority: u32), + GetEvictionPriority: proc "stdcall" (this: ^IResource) -> u32, +} + + +BUFFER_DESC :: struct { + ByteWidth: u32, + Usage: USAGE, + BindFlags: BIND_FLAG, + CPUAccessFlags: CPU_ACCESS_FLAG, + MiscFlags: RESOURCE_MISC_FLAG, + StructureByteStride: u32, +} + +CBUFFER_DESC :: struct { + using d3d11_buffer_desc: BUFFER_DESC, +} + + +IBuffer_UUID :: "48570B85-D1EE-4FCD-A250-EB350722B037" +IBuffer :: struct #raw_union { + #subtype id3d11resource: IResource, + using id3d11buffer_vtable: ^IBuffer_VTable, +} +IBuffer_VTable :: struct { + using id3d11resource_vtable: IResource_VTable, + GetDesc: proc "stdcall" (this: ^IBuffer, pDesc: ^BUFFER_DESC), +} + + +TEXTURE1D_DESC :: struct { + Width: u32, + MipLevels: u32, + ArraySize: u32, + Format: dxgi.FORMAT, + Usage: USAGE, + BindFlags: BIND_FLAG, + CPUAccessFlags: CPU_ACCESS_FLAG, + MiscFlags: RESOURCE_MISC_FLAG, +} + +CTEXTURE1D_DESC :: struct { + using d3d11_texture1d_desc: TEXTURE1D_DESC, +} + + +ITexture1D_UUID :: "F8FB5C27-C6B3-4F75-A4C8-439AF2EF564C" +ITexture1D :: struct #raw_union { + #subtype id3d11resource: IResource, + using id3d11texture1d_vtable: ^ITexture1D_VTable, +} +ITexture1D_VTable :: struct { + using id3d11resource_vtable: IResource_VTable, + GetDesc: proc "stdcall" (this: ^ITexture1D, pDesc: ^TEXTURE1D_DESC), +} + + +TEXTURE2D_DESC :: struct { + Width: u32, + Height: u32, + MipLevels: u32, + ArraySize: u32, + Format: dxgi.FORMAT, + SampleDesc: dxgi.SAMPLE_DESC, + Usage: USAGE, + BindFlags: BIND_FLAG, + CPUAccessFlags: CPU_ACCESS_FLAG, + MiscFlags: RESOURCE_MISC_FLAG, +} + +CTEXTURE2D_DESC :: struct { + using d3d11_texture2d_desc: TEXTURE2D_DESC, +} + + +ITexture2D_UUID :: "6F15AAF2-D208-4E89-9AB4-489535D34F9C" +ITexture2D :: struct #raw_union { + #subtype id3d11resource: IResource, + using id3d11texture2d_vtable: ^ITexture2D_VTable, +} +ITexture2D_VTable :: struct { + using id3d11resource_vtable: IResource_VTable, + GetDesc: proc "stdcall" (this: ^ITexture2D, pDesc: ^TEXTURE2D_DESC), +} + + +TEXTURE3D_DESC :: struct { + Width: u32, + Height: u32, + Depth: u32, + MipLevels: u32, + Format: dxgi.FORMAT, + Usage: USAGE, + BindFlags: BIND_FLAG, + CPUAccessFlags: CPU_ACCESS_FLAG, + MiscFlags: RESOURCE_MISC_FLAG, +} + +CTEXTURE3D_DESC :: struct { + using d3d11_texture3d_desc: TEXTURE3D_DESC, +} + + +ITexture3D_UUID :: "037E866E-F56D-4357-A8AF-9DABBE6E250E" +ITexture3D :: struct #raw_union { + #subtype id3d11resource: IResource, + using id3d11texture3d_vtable: ^ITexture3D_VTable, +} +ITexture3D_VTable :: struct { + using id3d11resource_vtable: IResource_VTable, + GetDesc: proc "stdcall" (this: ^ITexture3D, pDesc: ^TEXTURE3D_DESC), +} + + +TEXTURECUBE_FACE :: enum i32 { + POSITIVE_X = 0, + NEGATIVE_X = 1, + POSITIVE_Y = 2, + NEGATIVE_Y = 3, + POSITIVE_Z = 4, + NEGATIVE_Z = 5, +} + + +IView_UUID :: "839D1216-BB2E-412B-B7F4-A9DBEBE08ED1" +IView :: struct #raw_union { + #subtype id3d11devicechild: IDeviceChild, + using id3d11view_vtable: ^IView_VTable, +} +IView_VTable :: struct { + using id3d11devicechild_vtable: IDeviceChild_VTable, + GetResource: proc "stdcall" (this: ^IView, ppResource: ^^IResource), +} + + +BUFFER_SRV :: struct { + using _: struct #raw_union { + FirstElement: u32, + ElementOffset: u32, + }, + using _: struct #raw_union { + NumElements: u32, + ElementWidth: u32, + }, +} + +BUFFEREX_SRV_FLAG :: enum u32 { // TODO: make bit_set + RAW = 0x1, +} + +BUFFEREX_SRV :: struct { + FirstElement: u32, + NumElements: u32, + Flags: u32, +} + +TEX1D_SRV :: struct { + MostDetailedMip: u32, + MipLevels: u32, +} + +TEX1D_ARRAY_SRV :: struct { + MostDetailedMip: u32, + MipLevels: u32, + FirstArraySlice: u32, + ArraySize: u32, +} + +TEX2D_SRV :: struct { + MostDetailedMip: u32, + MipLevels: u32, +} + +TEX2D_ARRAY_SRV :: struct { + MostDetailedMip: u32, + MipLevels: u32, + FirstArraySlice: u32, + ArraySize: u32, +} + +TEX3D_SRV :: struct { + MostDetailedMip: u32, + MipLevels: u32, +} + +TEXCUBE_SRV :: struct { + MostDetailedMip: u32, + MipLevels: u32, +} + +TEXCUBE_ARRAY_SRV :: struct { + MostDetailedMip: u32, + MipLevels: u32, + First2DArrayFace: u32, + NumCubes: u32, +} + +TEX2DMS_SRV :: struct { + UnusedField_NothingToDefine: u32, +} + +TEX2DMS_ARRAY_SRV :: struct { + FirstArraySlice: u32, + ArraySize: u32, +} + +SHADER_RESOURCE_VIEW_DESC :: struct { + Format: dxgi.FORMAT, + ViewDimension: SRV_DIMENSION, + using _: struct #raw_union { + Buffer: BUFFER_SRV, + Texture1D: TEX1D_SRV, + Texture1DArray: TEX1D_ARRAY_SRV, + Texture2D: TEX2D_SRV, + Texture2DArray: TEX2D_ARRAY_SRV, + Texture2DMS: TEX2DMS_SRV, + Texture2DMSArray: TEX2DMS_ARRAY_SRV, + Texture3D: TEX3D_SRV, + TextureCube: TEXCUBE_SRV, + TextureCubeArray: TEXCUBE_ARRAY_SRV, + BufferEx: BUFFEREX_SRV, + }, +} + +CSHADER_RESOURCE_VIEW_DESC :: struct { + using d3d11_shader_resource_view_desc: SHADER_RESOURCE_VIEW_DESC, +} + + +IShaderResourceView_UUID :: "B0E06FE0-8192-4E1A-B1CA-36D7414710B2" +IShaderResourceView :: struct #raw_union { + #subtype id3d11view: IView, + using id3d11shaderresourceview_vtable: ^IShaderResourceView_VTable, +} +IShaderResourceView_VTable :: struct { + using id3d11view_vtable: IView_VTable, + GetDesc: proc "stdcall" (this: ^IShaderResourceView, pDesc: ^SHADER_RESOURCE_VIEW_DESC), +} + + +BUFFER_RTV :: struct { + using _: struct #raw_union { + FirstElement: u32, + ElementOffset: u32, + }, + using _: struct #raw_union { + NumElements: u32, + ElementWidth: u32, + }, +} + +TEX1D_RTV :: struct { + MipSlice: u32, +} + +TEX1D_ARRAY_RTV :: struct { + MipSlice: u32, + FirstArraySlice: u32, + ArraySize: u32, +} + +TEX2D_RTV :: struct { + MipSlice: u32, +} + +TEX2DMS_RTV :: struct { + UnusedField_NothingToDefine: u32, +} + +TEX2D_ARRAY_RTV :: struct { + MipSlice: u32, + FirstArraySlice: u32, + ArraySize: u32, +} + +TEX2DMS_ARRAY_RTV :: struct { + FirstArraySlice: u32, + ArraySize: u32, +} + +TEX3D_RTV :: struct { + MipSlice: u32, + FirstWSlice: u32, + WSize: u32, +} + +RENDER_TARGET_VIEW_DESC :: struct { + Format: dxgi.FORMAT, + ViewDimension: RTV_DIMENSION, + using _: struct #raw_union { + Buffer: BUFFER_RTV, + Texture1D: TEX1D_RTV, + Texture1DArray: TEX1D_ARRAY_RTV, + Texture2D: TEX2D_RTV, + Texture2DArray: TEX2D_ARRAY_RTV, + Texture2DMS: TEX2DMS_RTV, + Texture2DMSArray: TEX2DMS_ARRAY_RTV, + Texture3D: TEX3D_RTV, + }, +} + +CRENDER_TARGET_VIEW_DESC :: struct { + using d3d11_render_target_view_desc: RENDER_TARGET_VIEW_DESC, +} + + +IRenderTargetView_UUID :: "DFDBA067-0B8D-4865-875B-D7B4516CC164" +IRenderTargetView :: struct #raw_union { + #subtype id3d11view: IView, + using id3d11rendertargetview_vtable: ^IRenderTargetView_VTable, +} +IRenderTargetView_VTable :: struct { + using id3d11view_vtable: IView_VTable, + GetDesc: proc "stdcall" (this: ^IRenderTargetView, pDesc: ^RENDER_TARGET_VIEW_DESC), +} + + +CVIEWPORT :: struct { + using d3d11_viewport: VIEWPORT, +} + +TEX1D_DSV :: struct { + MipSlice: u32, +} + +TEX1D_ARRAY_DSV :: struct { + MipSlice: u32, + FirstArraySlice: u32, + ArraySize: u32, +} + +TEX2D_DSV :: struct { + MipSlice: u32, +} + +TEX2D_ARRAY_DSV :: struct { + MipSlice: u32, + FirstArraySlice: u32, + ArraySize: u32, +} + +TEX2DMS_DSV :: struct { + UnusedField_NothingToDefine: u32, +} + +TEX2DMS_ARRAY_DSV :: struct { + FirstArraySlice: u32, + ArraySize: u32, +} + +DSV_FLAG :: enum u32 { // TODO: make bit_set + DEPTH = 0x1, + STENCIL = 0x2, +} + +DEPTH_STENCIL_VIEW_DESC :: struct { + Format: dxgi.FORMAT, + ViewDimension: DSV_DIMENSION, + Flags: u32, + using _: struct #raw_union { + Texture1D: TEX1D_DSV, + Texture1DArray: TEX1D_ARRAY_DSV, + Texture2D: TEX2D_DSV, + Texture2DArray: TEX2D_ARRAY_DSV, + Texture2DMS: TEX2DMS_DSV, + Texture2DMSArray: TEX2DMS_ARRAY_DSV, + }, +} + +CDEPTH_STENCIL_VIEW_DESC :: struct { + using d3d11_depth_stencil_view_desc: DEPTH_STENCIL_VIEW_DESC, +} + + +IDepthStencilView_UUID :: "9FDAC92A-1876-48C3-AFAD-25B94F84A9B6" +IDepthStencilView :: struct #raw_union { + #subtype id3d11view: IView, + using id3d11depthstencilview_vtable: ^IDepthStencilView_VTable, +} +IDepthStencilView_VTable :: struct { + using id3d11view_vtable: IView_VTable, + GetDesc: proc "stdcall" (this: ^IDepthStencilView, pDesc: ^DEPTH_STENCIL_VIEW_DESC), +} + + +BUFFER_UAV_FLAG :: enum u32 { // TODO: make bit_set + RAW = 0x1, + APPEND = 0x2, + COUNTER = 0x4, +} + +BUFFER_UAV :: struct { + FirstElement: u32, + NumElements: u32, + Flags: u32, +} + +TEX1D_UAV :: struct { + MipSlice: u32, +} + +TEX1D_ARRAY_UAV :: struct { + MipSlice: u32, + FirstArraySlice: u32, + ArraySize: u32, +} + +TEX2D_UAV :: struct { + MipSlice: u32, +} + +TEX2D_ARRAY_UAV :: struct { + MipSlice: u32, + FirstArraySlice: u32, + ArraySize: u32, +} + +TEX3D_UAV :: struct { + MipSlice: u32, + FirstWSlice: u32, + WSize: u32, +} + +UNORDERED_ACCESS_VIEW_DESC :: struct { + Format: dxgi.FORMAT, + ViewDimension: UAV_DIMENSION, + using _: struct #raw_union { + Buffer: BUFFER_UAV, + Texture1D: TEX1D_UAV, + Texture1DArray: TEX1D_ARRAY_UAV, + Texture2D: TEX2D_UAV, + Texture2DArray: TEX2D_ARRAY_UAV, + Texture3D: TEX3D_UAV, + }, +} + +CUNORDERED_ACCESS_VIEW_DESC :: struct { + using d3d11_unordered_access_view_desc: UNORDERED_ACCESS_VIEW_DESC, +} + + +IUnorderedAccessView_UUID :: "28ACF509-7F5C-48F6-8611-F316010A6380" +IUnorderedAccessView :: struct #raw_union { + #subtype id3d11view: IView, + using id3d11unorderedaccessview_vtable: ^IUnorderedAccessView_VTable, +} +IUnorderedAccessView_VTable :: struct { + using id3d11view_vtable: IView_VTable, + GetDesc: proc "stdcall" (this: ^IUnorderedAccessView, pDesc: ^UNORDERED_ACCESS_VIEW_DESC), +} + + + +IVertexShader_UUID :: "3B301D64-D678-4289-8897-22F8928B72F3" +IVertexShader :: struct { + using id3d11devicechild: IDeviceChild, +} + + +IHullShader_UUID :: "8E5C6061-628A-4C8E-8264-BBE45CB3D5DD" +IHullShader :: struct { + using id3d11devicechild: IDeviceChild, +} + + +IDomainShader_UUID :: "F582C508-0F36-490C-9977-31EECE268CFA" +IDomainShader :: struct { + using id3d11devicechild: IDeviceChild, +} + + +IGeometryShader_UUID :: "38325B96-EFFB-4022-BA02-2E795B70275C" +IGeometryShader :: struct { + using id3d11devicechild: IDeviceChild, +} + + +IPixelShader_UUID :: "EA82E40D-51DC-4F33-93D4-DB7C9125AE8C" +IPixelShader :: struct { + using id3d11devicechild: IDeviceChild, +} + + +IComputeShader_UUID :: "4F5B196E-C2BD-495E-BD01-1FDED38E4969" +IComputeShader :: struct { + using id3d11devicechild: IDeviceChild, +} + + +IInputLayout_UUID :: "E4819DDC-4CF0-4025-BD26-5DE82A3E07B7" +IInputLayout :: struct { + using id3d11devicechild: IDeviceChild, +} + +FILTER :: enum i32 { + MIN_MAG_MIP_POINT = 0, + MIN_MAG_POINT_MIP_LINEAR = 1, + MIN_POINT_MAG_LINEAR_MIP_POINT = 4, + MIN_POINT_MAG_MIP_LINEAR = 5, + MIN_LINEAR_MAG_MIP_POINT = 16, + MIN_LINEAR_MAG_POINT_MIP_LINEAR = 17, + MIN_MAG_LINEAR_MIP_POINT = 20, + MIN_MAG_MIP_LINEAR = 21, + ANISOTROPIC = 85, + COMPARISON_MIN_MAG_MIP_POINT = 128, + COMPARISON_MIN_MAG_POINT_MIP_LINEAR = 129, + COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT = 132, + COMPARISON_MIN_POINT_MAG_MIP_LINEAR = 133, + COMPARISON_MIN_LINEAR_MAG_MIP_POINT = 144, + COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 145, + COMPARISON_MIN_MAG_LINEAR_MIP_POINT = 148, + COMPARISON_MIN_MAG_MIP_LINEAR = 149, + COMPARISON_ANISOTROPIC = 213, + MINIMUM_MIN_MAG_MIP_POINT = 256, + MINIMUM_MIN_MAG_POINT_MIP_LINEAR = 257, + MINIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT = 260, + MINIMUM_MIN_POINT_MAG_MIP_LINEAR = 261, + MINIMUM_MIN_LINEAR_MAG_MIP_POINT = 272, + MINIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 273, + MINIMUM_MIN_MAG_LINEAR_MIP_POINT = 276, + MINIMUM_MIN_MAG_MIP_LINEAR = 277, + MINIMUM_ANISOTROPIC = 341, + MAXIMUM_MIN_MAG_MIP_POINT = 384, + MAXIMUM_MIN_MAG_POINT_MIP_LINEAR = 385, + MAXIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT = 388, + MAXIMUM_MIN_POINT_MAG_MIP_LINEAR = 389, + MAXIMUM_MIN_LINEAR_MAG_MIP_POINT = 400, + MAXIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 401, + MAXIMUM_MIN_MAG_LINEAR_MIP_POINT = 404, + MAXIMUM_MIN_MAG_MIP_LINEAR = 405, + MAXIMUM_ANISOTROPIC = 469, +} + +FILTER_TYPE :: enum i32 { + POINT = 0, + LINEAR = 1, +} + +FILTER_REDUCTION_TYPE :: enum i32 { + STANDARD = 0, + COMPARISON = 1, + MINIMUM = 2, + MAXIMUM = 3, +} + +TEXTURE_ADDRESS_MODE :: enum i32 { + WRAP = 1, + MIRROR = 2, + CLAMP = 3, + BORDER = 4, + MIRROR_ONCE = 5, +} + +SAMPLER_DESC :: struct { + Filter: FILTER, + AddressU: TEXTURE_ADDRESS_MODE, + AddressV: TEXTURE_ADDRESS_MODE, + AddressW: TEXTURE_ADDRESS_MODE, + MipLODBias: f32, + MaxAnisotropy: u32, + ComparisonFunc: COMPARISON_FUNC, + BorderColor: [4]f32, + MinLOD: f32, + MaxLOD: f32, +} + +CSAMPLER_DESC :: struct { + using d3d11_sampler_desc: SAMPLER_DESC, +} + + +ISamplerState_UUID :: "DA6FEA51-564C-4487-9810-F0D0F9B4E3A5" +ISamplerState :: struct #raw_union { + #subtype id3d11devicechild: IDeviceChild, + using id3d11samplerstate_vtable: ^ISamplerState_VTable, +} +ISamplerState_VTable :: struct { + using id3d11devicechild_vtable: IDeviceChild_VTable, + GetDesc: proc "stdcall" (this: ^ISamplerState, pDesc: ^SAMPLER_DESC), +} + + +FORMAT_SUPPORT :: enum i32 { // TODO: make bit_set + BUFFER = 1, + IA_VERTEX_BUFFER = 2, + IA_INDEX_BUFFER = 4, + SO_BUFFER = 8, + TEXTURE1D = 16, + TEXTURE2D = 32, + TEXTURE3D = 64, + TEXTURECUBE = 128, + SHADER_LOAD = 256, + SHADER_SAMPLE = 512, + SHADER_SAMPLE_COMPARISON = 1024, + SHADER_SAMPLE_MONO_TEXT = 2048, + MIP = 4096, + MIP_AUTOGEN = 8192, + RENDER_TARGET = 16384, + BLENDABLE = 32768, + DEPTH_STENCIL = 65536, + CPU_LOCKABLE = 131072, + MULTISAMPLE_RESOLVE = 262144, + DISPLAY = 524288, + CAST_WITHIN_BIT_LAYOUT = 1048576, + MULTISAMPLE_RENDERTARGET = 2097152, + MULTISAMPLE_LOAD = 4194304, + SHADER_GATHER = 8388608, + BACK_BUFFER_CAST = 16777216, + TYPED_UNORDERED_ACCESS_VIEW = 33554432, + SHADER_GATHER_COMPARISON = 67108864, + DECODER_OUTPUT = 134217728, + VIDEO_PROCESSOR_OUTPUT = 268435456, + VIDEO_PROCESSOR_INPUT = 536870912, + VIDEO_ENCODER = 1073741824, +} + +FORMAT_SUPPORT2 :: enum i32 { // TODO: make bit_set + UAV_ATOMIC_ADD = 1, + UAV_ATOMIC_BITWISE_OPS = 2, + UAV_ATOMIC_COMPARE_STORE_OR_COMPARE_EXCHANGE = 4, + UAV_ATOMIC_EXCHANGE = 8, + UAV_ATOMIC_SIGNED_MIN_OR_MAX = 16, + UAV_ATOMIC_UNSIGNED_MIN_OR_MAX = 32, + UAV_TYPED_LOAD = 64, + UAV_TYPED_STORE = 128, + OUTPUT_MERGER_LOGIC_OP = 256, + TILED = 512, + SHAREABLE = 1024, + MULTIPLANE_OVERLAY = 16384, +} + + +IAsynchronous_UUID :: "4B35D0CD-1E15-4258-9C98-1B1333F6DD3B" +IAsynchronous :: struct #raw_union { + #subtype id3d11devicechild: IDeviceChild, + using id3d11asynchronous_vtable: ^IAsynchronous_VTable, +} +IAsynchronous_VTable :: struct { + using id3d11devicechild_vtable: IDeviceChild_VTable, + GetDataSize: proc "stdcall" (this: ^IAsynchronous) -> u32, +} + + +ASYNC_GETDATA_FLAG :: enum u32 { // TODO: make bit_set + DONOTFLUSH = 0x1, +} + +QUERY :: enum i32 { + EVENT = 0, + OCCLUSION = 1, + TIMESTAMP = 2, + TIMESTAMP_DISJOINT = 3, + PIPELINE_STATISTICS = 4, + OCCLUSION_PREDICATE = 5, + SO_STATISTICS = 6, + SO_OVERFLOW_PREDICATE = 7, + SO_STATISTICS_STREAM0 = 8, + SO_OVERFLOW_PREDICATE_STREAM0 = 9, + SO_STATISTICS_STREAM1 = 10, + SO_OVERFLOW_PREDICATE_STREAM1 = 11, + SO_STATISTICS_STREAM2 = 12, + SO_OVERFLOW_PREDICATE_STREAM2 = 13, + SO_STATISTICS_STREAM3 = 14, + SO_OVERFLOW_PREDICATE_STREAM3 = 15, +} + +QUERY_MISC_FLAG :: enum u32 { // TODO: make bit_set + QUERY_MISC_PREDICATEHINT = 0x1, +} + +QUERY_DESC :: struct { + Query: QUERY, + MiscFlags: RESOURCE_MISC_FLAG, +} + +CQUERY_DESC :: struct { + using d3d11_query_desc: QUERY_DESC, +} + + +IQuery_UUID :: "D6C00747-87B7-425E-B84D-44D108560AFD" +IQuery :: struct #raw_union { + #subtype id3d11asynchronous: IAsynchronous, + using id3d11query_vtable: ^IQuery_VTable, +} +IQuery_VTable :: struct { + using id3d11asynchronous_vtable: IAsynchronous_VTable, + GetDesc: proc "stdcall" (this: ^IQuery, pDesc: ^QUERY_DESC), +} + + + +IPredicate_UUID :: "9EB576DD-9F77-4D86-81AA-8BAB5FE490E2" +IPredicate :: struct { + using id3d11query: IQuery, +} + +QUERY_DATA_TIMESTAMP_DISJOINT :: struct { + Frequency: u64, + Disjoint: BOOL, +} + +QUERY_DATA_PIPELINE_STATISTICS :: struct { + IAVertices: u64, + IAPrimitives: u64, + VSInvocations: u64, + GSInvocations: u64, + GSPrimitives: u64, + CInvocations: u64, + CPrimitives: u64, + PSInvocations: u64, + HSInvocations: u64, + DSInvocations: u64, + CSInvocations: u64, +} + +QUERY_DATA_SO_STATISTICS :: struct { + NumPrimitivesWritten: u64, + PrimitivesStorageNeeded: u64, +} + +COUNTER :: enum i32 { + DEVICE_DEPENDENT_0 = 1073741824, +} + +COUNTER_TYPE :: enum i32 { + FLOAT32 = 0, + UINT16 = 1, + UINT32 = 2, + UINT64 = 3, +} + +COUNTER_DESC :: struct { + Counter: COUNTER, + MiscFlags: RESOURCE_MISC_FLAG, +} + +CCOUNTER_DESC :: struct { + using d3d11_counter_desc: COUNTER_DESC, +} + +COUNTER_INFO :: struct { + LastDeviceDependentCounter: COUNTER, + NumSimultaneousCounters: u32, + NumDetectableParallelUnits: u8, +} + + +ICounter_UUID :: "6E8C49FB-A371-4770-B440-29086022B741" +ICounter :: struct #raw_union { + #subtype id3d11asynchronous: IAsynchronous, + using id3d11counter_vtable: ^ICounter_VTable, +} +ICounter_VTable :: struct { + using id3d11asynchronous_vtable: IAsynchronous_VTable, + GetDesc: proc "stdcall" (this: ^ICounter, pDesc: ^COUNTER_DESC), +} + + +STANDARD_MULTISAMPLE_QUALITY_LEVELS :: enum i32 { + STANDARD_MULTISAMPLE_PATTERN = -1, + CENTER_MULTISAMPLE_PATTERN = -2, +} + +DEVICE_CONTEXT_TYPE :: enum i32 { + IMMEDIATE = 0, + DEFERRED = 1, +} + +CLASS_INSTANCE_DESC :: struct { + InstanceId: u32, + InstanceIndex: u32, + TypeId: u32, + ConstantBuffer: u32, + BaseConstantBufferOffset: u32, + BaseTexture: u32, + BaseSampler: u32, + Created: BOOL, +} + + +IClassInstance_UUID :: "A6CD7FAA-B0B7-4A2F-9436-8662A65797CB" +IClassInstance :: struct #raw_union { + #subtype id3d11devicechild: IDeviceChild, + using id3d11classinstance_vtable: ^IClassInstance_VTable, +} +IClassInstance_VTable :: struct { + using id3d11devicechild_vtable: IDeviceChild_VTable, + GetClassLinkage: proc "stdcall" (this: ^IClassInstance, ppLinkage: ^^IClassLinkage), + GetDesc: proc "stdcall" (this: ^IClassInstance, pDesc: ^CLASS_INSTANCE_DESC), + GetInstanceName: proc "stdcall" (this: ^IClassInstance, pInstanceName: cstring, pBufferLength: ^SIZE_T), + GetTypeName: proc "stdcall" (this: ^IClassInstance, pTypeName: cstring, pBufferLength: ^SIZE_T), +} + + + +IClassLinkage_UUID :: "DDF57CBA-9543-46E4-A12B-F207A0FE7FED" +IClassLinkage :: struct #raw_union { + #subtype id3d11devicechild: IDeviceChild, + using id3d11classlinkage_vtable: ^IClassLinkage_VTable, +} +IClassLinkage_VTable :: struct { + using id3d11devicechild_vtable: IDeviceChild_VTable, + GetClassInstance: proc "stdcall" (this: ^IClassLinkage, pClassInstanceName: cstring, InstanceIndex: u32, ppInstance: ^^IClassInstance) -> HRESULT, + CreateClassInstance: proc "stdcall" (this: ^IClassLinkage, pClassTypeName: cstring, ConstantBufferOffset: u32, ConstantVectorOffset: u32, TextureOffset: u32, SamplerOffset: u32, ppInstance: ^^IClassInstance) -> HRESULT, +} + + + +ICommandList_UUID :: "A24BC4D1-769E-43F7-8013-98FF566C18E2" +ICommandList :: struct #raw_union { + #subtype id3d11devicechild: IDeviceChild, + using id3d11commandlist_vtable: ^ICommandList_VTable, +} +ICommandList_VTable :: struct { + using id3d11devicechild_vtable: IDeviceChild_VTable, + GetContextFlags: proc "stdcall" (this: ^ICommandList) -> u32, +} + + +FEATURE :: enum i32 { + THREADING = 0, + DOUBLES = 1, + FORMAT_SUPPORT = 2, + FORMAT_SUPPORT2 = 3, + D3D10_X_HARDWARE_OPTIONS = 4, + OPTIONS = 5, + ARCHITECTURE_INFO = 6, + D3D9_OPTIONS = 7, + SHADER_MIN_PRECISION_SUPPORT = 8, + D3D9_SHADOW_SUPPORT = 9, + OPTIONS1 = 10, + D3D9_SIMPLE_INSTANCING_SUPPORT = 11, + MARKER_SUPPORT = 12, + D3D9_OPTIONS1 = 13, + OPTIONS2 = 14, + OPTIONS3 = 15, + GPU_VIRTUAL_ADDRESS_SUPPORT = 16, + OPTIONS4 = 17, + SHADER_CACHE = 18, + OPTIONS5 = 19, +} + +FEATURE_DATA_THREADING :: struct { + DriverConcurrentCreates: BOOL, + DriverCommandLists: BOOL, +} + +FEATURE_DATA_DOUBLES :: struct { + DoublePrecisionFloatShaderOps: BOOL, +} + +FEATURE_DATA_FORMAT_SUPPORT :: struct { + InFormat: dxgi.FORMAT, + OutFormatSupport: u32, +} + +FEATURE_DATA_FORMAT_SUPPORT2 :: struct { + InFormat: dxgi.FORMAT, + OutFormatSupport2: u32, +} + +FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS :: struct { + ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x: BOOL, +} + +FEATURE_DATA_OPTIONS :: struct { + OutputMergerLogicOp: BOOL, + UAVOnlyRenderingForcedSampleCount: BOOL, + DiscardAPIsSeenByDriver: BOOL, + FlagsForUpdateAndCopySeenByDriver: BOOL, + ClearView: BOOL, + CopyWithOverlap: BOOL, + ConstantBufferPartialUpdate: BOOL, + ConstantBufferOffsetting: BOOL, + MapNoOverwriteOnDynamicConstantBuffer: BOOL, + MapNoOverwriteOnDynamicBufferSRV: BOOL, + MultisampleRTVWithForcedSampleCountOne: BOOL, + SAD4ShaderInstructions: BOOL, + ExtendedDoublesShaderInstructions: BOOL, + ExtendedResourceSharing: BOOL, +} + +FEATURE_DATA_ARCHITECTURE_INFO :: struct { + TileBasedDeferredRenderer: BOOL, +} + +FEATURE_DATA_D3D9_OPTIONS :: struct { + FullNonPow2TextureSupport: BOOL, +} + +FEATURE_DATA_D3D9_SHADOW_SUPPORT :: struct { + SupportsDepthAsTextureWithLessEqualComparisonFilter: BOOL, +} + +SHADER_MIN_PRECISION_SUPPORT :: enum i32 { + _10_BIT = 1, + _16_BIT = 2, +} + +FEATURE_DATA_SHADER_MIN_PRECISION_SUPPORT :: struct { + PixelShaderMinPrecision: u32, + AllOtherShaderStagesMinPrecision: u32, +} + +TILED_RESOURCES_TIER :: enum i32 { + TILED_RESOURCES_NOT_SUPPORTED = 0, + _1 = 1, + _2 = 2, + _3 = 3, +} + +FEATURE_DATA_OPTIONS1 :: struct { + TiledResourcesTier: TILED_RESOURCES_TIER, + MinMaxFiltering: BOOL, + ClearViewAlsoSupportsDepthOnlyFormats: BOOL, + MapOnDefaultBuffers: BOOL, +} + +FEATURE_DATA_D3D9_SIMPLE_INSTANCING_SUPPORT :: struct { + SimpleInstancingSupported: BOOL, +} + +FEATURE_DATA_MARKER_SUPPORT :: struct { + Profile: BOOL, +} + +FEATURE_DATA_D3D9_OPTIONS1 :: struct { + FullNonPow2TextureSupported: BOOL, + DepthAsTextureWithLessEqualComparisonFilterSupported: BOOL, + SimpleInstancingSupported: BOOL, + TextureCubeFaceRenderTargetWithNonCubeDepthStencilSupported: BOOL, +} + +CONSERVATIVE_RASTERIZATION_TIER :: enum i32 { + CONSERVATIVE_RASTERIZATION_NOT_SUPPORTED = 0, + _1 = 1, + _2 = 2, + _3 = 3, +} + +FEATURE_DATA_OPTIONS2 :: struct { + PSSpecifiedStencilRefSupported: BOOL, + TypedUAVLoadAdditionalFormats: BOOL, + ROVsSupported: BOOL, + ConservativeRasterizationTier: CONSERVATIVE_RASTERIZATION_TIER, + TiledResourcesTier: TILED_RESOURCES_TIER, + MapOnDefaultTextures: BOOL, + StandardSwizzle: BOOL, + UnifiedMemoryArchitecture: BOOL, +} + +FEATURE_DATA_OPTIONS3 :: struct { + VPAndRTArrayIndexFromAnyShaderFeedingRasterizer: BOOL, +} + +FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT :: struct { + MaxGPUVirtualAddressBitsPerResource: u32, + MaxGPUVirtualAddressBitsPerProcess: u32, +} + +SHADER_CACHE_SUPPORT_FLAGS :: enum u32 { // TODO: make bit_set + NONE = 0x0, + AUTOMATIC_INPROC_CACHE = 0x1, + AUTOMATIC_DISK_CACHE = 0x2, +} + +FEATURE_DATA_SHADER_CACHE :: struct { + SupportFlags: u32, +} + +SHARED_RESOURCE_TIER :: enum i32 { + _0 = 0, + _1 = 1, + _2 = 2, + _3 = 3, +} + +FEATURE_DATA_OPTIONS5 :: struct { + SharedResourceTier: SHARED_RESOURCE_TIER, +} + + +IDeviceContext_UUID :: "C0BFA96C-E089-44FB-8EAF-26F8796190DA" +IDeviceContext :: struct #raw_union { + #subtype id3d11devicechild: IDeviceChild, + using id3d11devicecontext_vtable: ^IDeviceContext_VTable, +} +IDeviceContext_VTable :: struct { + using id3d11devicechild_vtable: IDeviceChild_VTable, + VSSetConstantBuffers: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumBuffers: u32, ppConstantBuffers: ^^IBuffer), + PSSetShaderResources: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumViews: u32, ppShaderResourceViews: ^^IShaderResourceView), + PSSetShader: proc "stdcall" (this: ^IDeviceContext, pPixelShader: ^IPixelShader, ppClassInstances: ^^IClassInstance, NumClassInstances: u32), + PSSetSamplers: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumSamplers: u32, ppSamplers: ^^ISamplerState), + VSSetShader: proc "stdcall" (this: ^IDeviceContext, pVertexShader: ^IVertexShader, ppClassInstances: ^^IClassInstance, NumClassInstances: u32), + DrawIndexed: proc "stdcall" (this: ^IDeviceContext, IndexCount: u32, StartIndexLocation: u32, BaseVertexLocation: i32), + Draw: proc "stdcall" (this: ^IDeviceContext, VertexCount: u32, StartVertexLocation: u32), + Map: proc "stdcall" (this: ^IDeviceContext, pResource: ^IResource, Subresource: u32, MapType: MAP, MapFlags: u32, pMappedResource: ^MAPPED_SUBRESOURCE) -> HRESULT, + Unmap: proc "stdcall" (this: ^IDeviceContext, pResource: ^IResource, Subresource: u32), + PSSetConstantBuffers: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumBuffers: u32, ppConstantBuffers: ^^IBuffer), + IASetInputLayout: proc "stdcall" (this: ^IDeviceContext, pInputLayout: ^IInputLayout), + IASetVertexBuffers: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumBuffers: u32, ppVertexBuffers: ^^IBuffer, pStrides: ^u32, pOffsets: ^u32), + IASetIndexBuffer: proc "stdcall" (this: ^IDeviceContext, pIndexBuffer: ^IBuffer, Format: dxgi.FORMAT, Offset: u32), + DrawIndexedInstanced: proc "stdcall" (this: ^IDeviceContext, IndexCountPerInstance: u32, InstanceCount: u32, StartIndexLocation: u32, BaseVertexLocation: i32, StartInstanceLocation: u32), + DrawInstanced: proc "stdcall" (this: ^IDeviceContext, VertexCountPerInstance: u32, InstanceCount: u32, StartVertexLocation: u32, StartInstanceLocation: u32), + GSSetConstantBuffers: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumBuffers: u32, ppConstantBuffers: ^^IBuffer), + GSSetShader: proc "stdcall" (this: ^IDeviceContext, pShader: ^IGeometryShader, ppClassInstances: ^^IClassInstance, NumClassInstances: u32), + IASetPrimitiveTopology: proc "stdcall" (this: ^IDeviceContext, Topology: PRIMITIVE_TOPOLOGY), + VSSetShaderResources: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumViews: u32, ppShaderResourceViews: ^^IShaderResourceView), + VSSetSamplers: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumSamplers: u32, ppSamplers: ^^ISamplerState), + Begin: proc "stdcall" (this: ^IDeviceContext, pAsync: ^IAsynchronous), + End: proc "stdcall" (this: ^IDeviceContext, pAsync: ^IAsynchronous), + GetData: proc "stdcall" (this: ^IDeviceContext, pAsync: ^IAsynchronous, pData: rawptr, DataSize: u32, GetDataFlags: u32) -> HRESULT, + SetPredication: proc "stdcall" (this: ^IDeviceContext, pPredicate: ^IPredicate, PredicateValue: BOOL), + GSSetShaderResources: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumViews: u32, ppShaderResourceViews: ^^IShaderResourceView), + GSSetSamplers: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumSamplers: u32, ppSamplers: ^^ISamplerState), + OMSetRenderTargets: proc "stdcall" (this: ^IDeviceContext, NumViews: u32, ppRenderTargetViews: ^^IRenderTargetView, pDepthStencilView: ^IDepthStencilView), + OMSetRenderTargetsAndUnorderedAccessViews: proc "stdcall" (this: ^IDeviceContext, NumRTVs: u32, ppRenderTargetViews: ^^IRenderTargetView, pDepthStencilView: ^IDepthStencilView, UAVStartSlot: u32, NumUAVs: u32, ppUnorderedAccessViews: ^^IUnorderedAccessView, pUAVInitialCounts: ^u32), + OMSetBlendState: proc "stdcall" (this: ^IDeviceContext, pBlendState: ^IBlendState, BlendFactor: ^[4]f32, SampleMask: u32), + OMSetDepthStencilState: proc "stdcall" (this: ^IDeviceContext, pDepthStencilState: ^IDepthStencilState, StencilRef: u32), + SOSetTargets: proc "stdcall" (this: ^IDeviceContext, NumBuffers: u32, ppSOTargets: ^^IBuffer, pOffsets: ^u32), + DrawAuto: proc "stdcall" (this: ^IDeviceContext), + DrawIndexedInstancedIndirect: proc "stdcall" (this: ^IDeviceContext, pBufferForArgs: ^IBuffer, AlignedByteOffsetForArgs: u32), + DrawInstancedIndirect: proc "stdcall" (this: ^IDeviceContext, pBufferForArgs: ^IBuffer, AlignedByteOffsetForArgs: u32), + Dispatch: proc "stdcall" (this: ^IDeviceContext, ThreadGroupCountX: u32, ThreadGroupCountY: u32, ThreadGroupCountZ: u32), + DispatchIndirect: proc "stdcall" (this: ^IDeviceContext, pBufferForArgs: ^IBuffer, AlignedByteOffsetForArgs: u32), + RSSetState: proc "stdcall" (this: ^IDeviceContext, pRasterizerState: ^IRasterizerState), + RSSetViewports: proc "stdcall" (this: ^IDeviceContext, NumViewports: u32, pViewports: ^VIEWPORT), + RSSetScissorRects: proc "stdcall" (this: ^IDeviceContext, NumRects: u32, pRects: ^RECT), + CopySubresourceRegion: proc "stdcall" (this: ^IDeviceContext, pDstResource: ^IResource, DstSubresource: u32, DstX: u32, DstY: u32, DstZ: u32, pSrcResource: ^IResource, SrcSubresource: u32, pSrcBox: ^BOX), + CopyResource: proc "stdcall" (this: ^IDeviceContext, pDstResource: ^IResource, pSrcResource: ^IResource), + UpdateSubresource: proc "stdcall" (this: ^IDeviceContext, pDstResource: ^IResource, DstSubresource: u32, pDstBox: ^BOX, pSrcData: rawptr, SrcRowPitch: u32, SrcDepthPitch: u32), + CopyStructureCount: proc "stdcall" (this: ^IDeviceContext, pDstBuffer: ^IBuffer, DstAlignedByteOffset: u32, pSrcView: ^IUnorderedAccessView), + ClearRenderTargetView: proc "stdcall" (this: ^IDeviceContext, pRenderTargetView: ^IRenderTargetView, ColorRGBA: ^[4]f32), + ClearUnorderedAccessViewUint: proc "stdcall" (this: ^IDeviceContext, pUnorderedAccessView: ^IUnorderedAccessView, Values: ^[4]u32), + ClearUnorderedAccessViewFloat: proc "stdcall" (this: ^IDeviceContext, pUnorderedAccessView: ^IUnorderedAccessView, Values: ^[4]f32), + ClearDepthStencilView: proc "stdcall" (this: ^IDeviceContext, pDepthStencilView: ^IDepthStencilView, ClearFlags: u32, Depth: f32, Stencil: u8), + GenerateMips: proc "stdcall" (this: ^IDeviceContext, pShaderResourceView: ^IShaderResourceView), + SetResourceMinLOD: proc "stdcall" (this: ^IDeviceContext, pResource: ^IResource, MinLOD: f32), + GetResourceMinLOD: proc "stdcall" (this: ^IDeviceContext, pResource: ^IResource) -> f32, + ResolveSubresource: proc "stdcall" (this: ^IDeviceContext, pDstResource: ^IResource, DstSubresource: u32, pSrcResource: ^IResource, SrcSubresource: u32, Format: dxgi.FORMAT), + ExecuteCommandList: proc "stdcall" (this: ^IDeviceContext, pCommandList: ^ICommandList, RestoreContextState: BOOL), + HSSetShaderResources: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumViews: u32, ppShaderResourceViews: ^^IShaderResourceView), + HSSetShader: proc "stdcall" (this: ^IDeviceContext, pHullShader: ^IHullShader, ppClassInstances: ^^IClassInstance, NumClassInstances: u32), + HSSetSamplers: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumSamplers: u32, ppSamplers: ^^ISamplerState), + HSSetConstantBuffers: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumBuffers: u32, ppConstantBuffers: ^^IBuffer), + DSSetShaderResources: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumViews: u32, ppShaderResourceViews: ^^IShaderResourceView), + DSSetShader: proc "stdcall" (this: ^IDeviceContext, pDomainShader: ^IDomainShader, ppClassInstances: ^^IClassInstance, NumClassInstances: u32), + DSSetSamplers: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumSamplers: u32, ppSamplers: ^^ISamplerState), + DSSetConstantBuffers: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumBuffers: u32, ppConstantBuffers: ^^IBuffer), + CSSetShaderResources: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumViews: u32, ppShaderResourceViews: ^^IShaderResourceView), + CSSetUnorderedAccessViews: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumUAVs: u32, ppUnorderedAccessViews: ^^IUnorderedAccessView, pUAVInitialCounts: ^u32), + CSSetShader: proc "stdcall" (this: ^IDeviceContext, pComputeShader: ^IComputeShader, ppClassInstances: ^^IClassInstance, NumClassInstances: u32), + CSSetSamplers: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumSamplers: u32, ppSamplers: ^^ISamplerState), + CSSetConstantBuffers: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumBuffers: u32, ppConstantBuffers: ^^IBuffer), + VSGetConstantBuffers: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumBuffers: u32, ppConstantBuffers: ^^IBuffer), + PSGetShaderResources: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumViews: u32, ppShaderResourceViews: ^^IShaderResourceView), + PSGetShader: proc "stdcall" (this: ^IDeviceContext, ppPixelShader: ^^IPixelShader, ppClassInstances: ^^IClassInstance, pNumClassInstances: ^u32), + PSGetSamplers: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumSamplers: u32, ppSamplers: ^^ISamplerState), + VSGetShader: proc "stdcall" (this: ^IDeviceContext, ppVertexShader: ^^IVertexShader, ppClassInstances: ^^IClassInstance, pNumClassInstances: ^u32), + PSGetConstantBuffers: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumBuffers: u32, ppConstantBuffers: ^^IBuffer), + IAGetInputLayout: proc "stdcall" (this: ^IDeviceContext, ppInputLayout: ^^IInputLayout), + IAGetVertexBuffers: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumBuffers: u32, ppVertexBuffers: ^^IBuffer, pStrides: ^u32, pOffsets: ^u32), + IAGetIndexBuffer: proc "stdcall" (this: ^IDeviceContext, pIndexBuffer: ^^IBuffer, Format: ^dxgi.FORMAT, Offset: ^u32), + GSGetConstantBuffers: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumBuffers: u32, ppConstantBuffers: ^^IBuffer), + GSGetShader: proc "stdcall" (this: ^IDeviceContext, ppGeometryShader: ^^IGeometryShader, ppClassInstances: ^^IClassInstance, pNumClassInstances: ^u32), + IAGetPrimitiveTopology: proc "stdcall" (this: ^IDeviceContext, pTopology: ^PRIMITIVE_TOPOLOGY), + VSGetShaderResources: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumViews: u32, ppShaderResourceViews: ^^IShaderResourceView), + VSGetSamplers: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumSamplers: u32, ppSamplers: ^^ISamplerState), + GetPredication: proc "stdcall" (this: ^IDeviceContext, ppPredicate: ^^IPredicate, pPredicateValue: ^BOOL), + GSGetShaderResources: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumViews: u32, ppShaderResourceViews: ^^IShaderResourceView), + GSGetSamplers: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumSamplers: u32, ppSamplers: ^^ISamplerState), + OMGetRenderTargets: proc "stdcall" (this: ^IDeviceContext, NumViews: u32, ppRenderTargetViews: ^^IRenderTargetView, ppDepthStencilView: ^^IDepthStencilView), + OMGetRenderTargetsAndUnorderedAccessViews: proc "stdcall" (this: ^IDeviceContext, NumRTVs: u32, ppRenderTargetViews: ^^IRenderTargetView, ppDepthStencilView: ^^IDepthStencilView, UAVStartSlot: u32, NumUAVs: u32, ppUnorderedAccessViews: ^^IUnorderedAccessView), + OMGetBlendState: proc "stdcall" (this: ^IDeviceContext, ppBlendState: ^^IBlendState, BlendFactor: ^[4]f32, pSampleMask: ^u32), + OMGetDepthStencilState: proc "stdcall" (this: ^IDeviceContext, ppDepthStencilState: ^^IDepthStencilState, pStencilRef: ^u32), + SOGetTargets: proc "stdcall" (this: ^IDeviceContext, NumBuffers: u32, ppSOTargets: ^^IBuffer), + RSGetState: proc "stdcall" (this: ^IDeviceContext, ppRasterizerState: ^^IRasterizerState), + RSGetViewports: proc "stdcall" (this: ^IDeviceContext, pNumViewports: ^u32, pViewports: ^VIEWPORT), + RSGetScissorRects: proc "stdcall" (this: ^IDeviceContext, pNumRects: ^u32, pRects: ^RECT), + HSGetShaderResources: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumViews: u32, ppShaderResourceViews: ^^IShaderResourceView), + HSGetShader: proc "stdcall" (this: ^IDeviceContext, ppHullShader: ^^IHullShader, ppClassInstances: ^^IClassInstance, pNumClassInstances: ^u32), + HSGetSamplers: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumSamplers: u32, ppSamplers: ^^ISamplerState), + HSGetConstantBuffers: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumBuffers: u32, ppConstantBuffers: ^^IBuffer), + DSGetShaderResources: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumViews: u32, ppShaderResourceViews: ^^IShaderResourceView), + DSGetShader: proc "stdcall" (this: ^IDeviceContext, ppDomainShader: ^^IDomainShader, ppClassInstances: ^^IClassInstance, pNumClassInstances: ^u32), + DSGetSamplers: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumSamplers: u32, ppSamplers: ^^ISamplerState), + DSGetConstantBuffers: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumBuffers: u32, ppConstantBuffers: ^^IBuffer), + CSGetShaderResources: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumViews: u32, ppShaderResourceViews: ^^IShaderResourceView), + CSGetUnorderedAccessViews: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumUAVs: u32, ppUnorderedAccessViews: ^^IUnorderedAccessView), + CSGetShader: proc "stdcall" (this: ^IDeviceContext, ppComputeShader: ^^IComputeShader, ppClassInstances: ^^IClassInstance, pNumClassInstances: ^u32), + CSGetSamplers: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumSamplers: u32, ppSamplers: ^^ISamplerState), + CSGetConstantBuffers: proc "stdcall" (this: ^IDeviceContext, StartSlot: u32, NumBuffers: u32, ppConstantBuffers: ^^IBuffer), + ClearState: proc "stdcall" (this: ^IDeviceContext), + Flush: proc "stdcall" (this: ^IDeviceContext), + GetType: proc "stdcall" (this: ^IDeviceContext) -> DEVICE_CONTEXT_TYPE, + GetContextFlags: proc "stdcall" (this: ^IDeviceContext) -> u32, + FinishCommandList: proc "stdcall" (this: ^IDeviceContext, RestoreDeferredContextState: BOOL, ppCommandList: ^^ICommandList) -> HRESULT, +} + + +CVIDEO_DEFAULT :: struct { + _: u8, +} + +APP_DEPRECATED_HRESULT :: HRESULT + + +VIDEO_DECODER_DESC :: struct { + Guid: GUID, + SampleWidth: u32, + SampleHeight: u32, + OutputFormat: dxgi.FORMAT, +} + +VIDEO_DECODER_CONFIG :: struct { + guidConfigBitstreamEncryption: GUID, + guidConfigMBcontrolEncryption: GUID, + guidConfigResidDiffEncryption: GUID, + ConfigBitstreamRaw: u32, + ConfigMBcontrolRasterOrder: u32, + ConfigResidDiffHost: u32, + ConfigSpatialResid8: u32, + ConfigResid8Subtraction: u32, + ConfigSpatialHost8or9Clipping: u32, + ConfigSpatialResidInterleaved: u32, + ConfigIntraResidUnsigned: u32, + ConfigResidDiffAccelerator: u32, + ConfigHostInverseScan: u32, + ConfigSpecificIDCT: u32, + Config4GroupedCoefs: u32, + ConfigMinRenderTargetBuffCount: u16, + ConfigDecoderSpecific: u16, +} + +VIDEO_DECODER_BUFFER_TYPE :: enum i32 { + PICTURE_PARAMETERS = 0, + MACROBLOCK_CONTROL = 1, + RESIDUAL_DIFFERENCE = 2, + DEBLOCKING_CONTROL = 3, + INVERSE_QUANTIZATION_MATRIX = 4, + SLICE_CONTROL = 5, + BITSTREAM = 6, + MOTION_VECTOR = 7, + FILM_GRAIN = 8, +} + +AES_CTR_IV :: struct { + IV: u64, + Count: u64, +} + +ENCRYPTED_BLOCK_INFO :: struct { + NumEncryptedBytesAtBeginning: u32, + NumBytesInSkipPattern: u32, + NumBytesInEncryptPattern: u32, +} + +VIDEO_DECODER_BUFFER_DESC :: struct { + BufferType: VIDEO_DECODER_BUFFER_TYPE, + BufferIndex: u32, + DataOffset: u32, + DataSize: u32, + FirstMBaddress: u32, + NumMBsInBuffer: u32, + Width: u32, + Height: u32, + Stride: u32, + ReservedBits: u32, + + pIV: rawptr, + IVSize: u32, + PartialEncryption: BOOL, + EncryptedBlockInfo: ENCRYPTED_BLOCK_INFO, +} + +VIDEO_DECODER_EXTENSION :: struct { + Function: u32, + + pPrivateInputData: rawptr, + PrivateInputDataSize: u32, + + pPrivateOutputData: rawptr, + PrivateOutputDataSize: u32, + ResourceCount: u32, + + ppResourceList: ^^IResource, +} + + +IVideoDecoder_UUID :: "3C9C5B51-995D-48D1-9B8D-FA5CAEDED65C" +IVideoDecoder :: struct #raw_union { + #subtype id3d11devicechild: IDeviceChild, + using id3d11videodecoder_vtable: ^IVideoDecoder_VTable, +} +IVideoDecoder_VTable :: struct { + using id3d11devicechild_vtable: IDeviceChild_VTable, + GetCreationParameters: proc "stdcall" (this: ^IVideoDecoder, pVideoDesc: ^VIDEO_DECODER_DESC, pConfig: ^VIDEO_DECODER_CONFIG) -> HRESULT, + GetDriverHandle: proc "stdcall" (this: ^IVideoDecoder, pDriverHandle: ^HANDLE) -> HRESULT, +} + + +VIDEO_PROCESSOR_FORMAT_SUPPORT :: enum i32 { + INPUT = 1, + OUTPUT = 2, +} + +VIDEO_PROCESSOR_DEVICE_CAPS :: enum i32 { // TODO: make bit_set + LINEAR_SPACE = 1, + xvYCC = 2, + RGB_RANGE_CONVERSION = 4, + YCbCr_MATRIX_CONVERSION = 8, + NOMINAL_RANGE = 16, +} + +VIDEO_PROCESSOR_FEATURE_CAPS :: enum i32 { // TODO: make bit_set + ALPHA_FILL = 1, + CONSTRICTION = 2, + LUMA_KEY = 4, + ALPHA_PALETTE = 8, + LEGACY = 16, + STEREO = 32, + ROTATION = 64, + ALPHA_STREAM = 128, + PIXEL_ASPECT_RATIO = 256, + MIRROR = 512, + SHADER_USAGE = 1024, + METADATA_HDR10 = 2048, +} + +VIDEO_PROCESSOR_FILTER_CAPS :: enum i32 { // TODO: make bit_set + BRIGHTNESS = 1, + CONTRAST = 2, + HUE = 4, + SATURATION = 8, + NOISE_REDUCTION = 16, + EDGE_ENHANCEMENT = 32, + ANAMORPHIC_SCALING = 64, + STEREO_ADJUSTMENT = 128, +} + +VIDEO_PROCESSOR_FORMAT_CAPS :: enum i32 { // TODO: make bit_set + RGB_INTERLACED = 1, + RGB_PROCAMP = 2, + RGB_LUMA_KEY = 4, + PALETTE_INTERLACED = 8, +} + +VIDEO_PROCESSOR_AUTO_STREAM_CAPS :: enum i32 { // TODO: make bit_set + DENOISE = 1, + DERINGING = 2, + EDGE_ENHANCEMENT = 4, + COLOR_CORRECTION = 8, + FLESH_TONE_MAPPING = 16, + IMAGE_STABILIZATION = 32, + SUPER_RESOLUTION = 64, + ANAMORPHIC_SCALING = 128, +} + +VIDEO_PROCESSOR_STEREO_CAPS :: enum i32 { // TODO: make bit_set + MONO_OFFSET = 1, + ROW_INTERLEAVED = 2, + COLUMN_INTERLEAVED = 4, + CHECKERBOARD = 8, + FLIP_MODE = 16, +} + +VIDEO_PROCESSOR_CAPS :: struct { + DeviceCaps: u32, + FeatureCaps: u32, + FilterCaps: u32, + InputFormatCaps: u32, + AutoStreamCaps: u32, + StereoCaps: u32, + RateConversionCapsCount: u32, + MaxInputStreams: u32, + MaxStreamStates: u32, +} + +VIDEO_PROCESSOR_PROCESSOR_CAPS :: enum i32 { // TODO: make bit_set + DEINTERLACE_BLEND = 1, + DEINTERLACE_BOB = 2, + DEINTERLACE_ADAPTIVE = 4, + DEINTERLACE_MOTION_COMPENSATION = 8, + INVERSE_TELECINE = 16, + FRAME_RATE_CONVERSION = 32, +} + +VIDEO_PROCESSOR_ITELECINE_CAPS :: enum i32 { + _32 = 1, + _22 = 2, + _2224 = 4, + _2332 = 8, + _32322 = 16, + _55 = 32, + _64 = 64, + _87 = 128, + _222222222223 = 256, + OTHER = -2147483648, +} + +VIDEO_PROCESSOR_RATE_CONVERSION_CAPS :: struct { + PastFrames: u32, + FutureFrames: u32, + ProcessorCaps: u32, + ITelecineCaps: u32, + CustomRateCount: u32, +} + +CONTENT_PROTECTION_CAPS :: enum i32 { + SOFTWARE = 1, + HARDWARE = 2, + PROTECTION_ALWAYS_ON = 4, + PARTIAL_DECRYPTION = 8, + CONTENT_KEY = 16, + FRESHEN_SESSION_KEY = 32, + ENCRYPTED_READ_BACK = 64, + ENCRYPTED_READ_BACK_KEY = 128, + SEQUENTIAL_CTR_IV = 256, + ENCRYPT_SLICEDATA_ONLY = 512, + DECRYPTION_BLT = 1024, + HARDWARE_PROTECT_UNCOMPRESSED = 2048, + HARDWARE_PROTECTED_MEMORY_PAGEABLE = 4096, + HARDWARE_TEARDOWN = 8192, + HARDWARE_DRM_COMMUNICATION = 16384, + HARDWARE_DRM_COMMUNICATION_MULTI_THREADED = 32768, +} + + +VIDEO_CONTENT_PROTECTION_CAPS :: struct { + Caps: u32, + KeyExchangeTypeCount: u32, + BlockAlignmentSize: u32, + ProtectedMemorySize: u64, +} + +VIDEO_PROCESSOR_CUSTOM_RATE :: struct { + CustomRate: dxgi.RATIONAL, + OutputFrames: u32, + InputInterlaced: BOOL, + InputFramesOrFields: u32, +} + +VIDEO_PROCESSOR_FILTER :: enum i32 { + BRIGHTNESS = 0, + CONTRAST = 1, + HUE = 2, + SATURATION = 3, + NOISE_REDUCTION = 4, + EDGE_ENHANCEMENT = 5, + ANAMORPHIC_SCALING = 6, + STEREO_ADJUSTMENT = 7, +} + +VIDEO_PROCESSOR_FILTER_RANGE :: struct { + Minimum: i32, + Maximum: i32, + Default: i32, + Multiplier: f32, +} + +VIDEO_FRAME_FORMAT :: enum i32 { + PROGRESSIVE = 0, + INTERLACED_TOP_FIELD_FIRST = 1, + INTERLACED_BOTTOM_FIELD_FIRST = 2, +} + +VIDEO_USAGE :: enum i32 { + PLAYBACK_NORMAL = 0, + OPTIMAL_SPEED = 1, + OPTIMAL_QUALITY = 2, +} + +VIDEO_PROCESSOR_CONTENT_DESC :: struct { + InputFrameFormat: VIDEO_FRAME_FORMAT, + InputFrameRate: dxgi.RATIONAL, + InputWidth: u32, + InputHeight: u32, + OutputFrameRate: dxgi.RATIONAL, + OutputWidth: u32, + OutputHeight: u32, + Usage: VIDEO_USAGE, +} + + +IVideoProcessorEnumerator_UUID :: "31627037-53AB-4200-9061-05FAA9AB45F9" +IVideoProcessorEnumerator :: struct #raw_union { + #subtype id3d11devicechild: IDeviceChild, + using id3d11videoprocessorenumerator_vtable: ^IVideoProcessorEnumerator_VTable, +} +IVideoProcessorEnumerator_VTable :: struct { + using id3d11devicechild_vtable: IDeviceChild_VTable, + GetVideoProcessorContentDesc: proc "stdcall" (this: ^IVideoProcessorEnumerator, pContentDesc: ^VIDEO_PROCESSOR_CONTENT_DESC) -> HRESULT, + CheckVideoProcessorFormat: proc "stdcall" (this: ^IVideoProcessorEnumerator, Format: dxgi.FORMAT, pFlags: ^u32) -> HRESULT, + GetVideoProcessorCaps: proc "stdcall" (this: ^IVideoProcessorEnumerator, pCaps: ^VIDEO_PROCESSOR_CAPS) -> HRESULT, + GetVideoProcessorRateConversionCaps: proc "stdcall" (this: ^IVideoProcessorEnumerator, TypeIndex: u32, pCaps: ^VIDEO_PROCESSOR_RATE_CONVERSION_CAPS) -> HRESULT, + GetVideoProcessorCustomRate: proc "stdcall" (this: ^IVideoProcessorEnumerator, TypeIndex: u32, CustomRateIndex: u32, pRate: ^VIDEO_PROCESSOR_CUSTOM_RATE) -> HRESULT, + GetVideoProcessorFilterRange: proc "stdcall" (this: ^IVideoProcessorEnumerator, Filter: VIDEO_PROCESSOR_FILTER, pRange: ^VIDEO_PROCESSOR_FILTER_RANGE) -> HRESULT, +} + + +VIDEO_COLOR_RGBA :: struct { + R: f32, + G: f32, + B: f32, + A: f32, +} + +VIDEO_COLOR_YCbCrA :: struct { + Y: f32, + Cb: f32, + Cr: f32, + A: f32, +} + +VIDEO_COLOR :: struct { + using _: struct #raw_union { + YCbCr: VIDEO_COLOR_YCbCrA, + RGBA: VIDEO_COLOR_RGBA, + }, +} + +VIDEO_PROCESSOR_NOMINAL_RANGE :: enum i32 { + UNDEFINED = 0, + _16_235 = 1, + _0_255 = 2, +} + +VIDEO_PROCESSOR_COLOR_SPACE_FLAG :: enum u32 { + Usage = 0, + RGB_Range = 1, + YCbCr_Matrix = 2, + YCbCr_xvYCC = 3, + Nominal_Range = 4, + Reserved = 6, +} + +VIDEO_PROCESSOR_COLOR_SPACE :: distinct bit_set[VIDEO_PROCESSOR_COLOR_SPACE_FLAG; u32] + +VIDEO_PROCESSOR_ALPHA_FILL_MODE :: enum i32 { + OPAQUE = 0, + BACKGROUND = 1, + DESTINATION = 2, + SOURCE_STREAM = 3, +} + +VIDEO_PROCESSOR_OUTPUT_RATE :: enum i32 { + NORMAL = 0, + HALF = 1, + CUSTOM = 2, +} + +VIDEO_PROCESSOR_STEREO_FORMAT :: enum i32 { + MONO = 0, + HORIZONTAL = 1, + VERTICAL = 2, + SEPARATE = 3, + MONO_OFFSET = 4, + ROW_INTERLEAVED = 5, + COLUMN_INTERLEAVED = 6, + CHECKERBOARD = 7, +} + +VIDEO_PROCESSOR_STEREO_FLIP_MODE :: enum i32 { + NONE = 0, + FRAME0 = 1, + FRAME1 = 2, +} + +VIDEO_PROCESSOR_ROTATION :: enum i32 { + IDENTITY = 0, + _90 = 1, + _180 = 2, + _270 = 3, +} + +VIDEO_PROCESSOR_STREAM :: struct { + Enable: BOOL, + OutputIndex: u32, + InputFrameOrField: u32, + PastFrames: u32, + FutureFrames: u32, + + ppPastSurfaces: ^^IVideoProcessorInputView, + pInputSurface: ^IVideoProcessorInputView, + + ppFutureSurfaces: ^^IVideoProcessorInputView, + + ppPastSurfacesRight: ^^IVideoProcessorInputView, + pInputSurfaceRight: ^IVideoProcessorInputView, + + ppFutureSurfacesRight: ^^IVideoProcessorInputView, +} + + +IVideoProcessor_UUID :: "1D7B0652-185F-41C6-85CE-0C5BE3D4AE6C" +IVideoProcessor :: struct #raw_union { + #subtype id3d11devicechild: IDeviceChild, + using id3d11videoprocessor_vtable: ^IVideoProcessor_VTable, +} +IVideoProcessor_VTable :: struct { + using id3d11devicechild_vtable: IDeviceChild_VTable, + GetContentDesc: proc "stdcall" (this: ^IVideoProcessor, pDesc: ^VIDEO_PROCESSOR_CONTENT_DESC), + GetRateConversionCaps: proc "stdcall" (this: ^IVideoProcessor, pCaps: ^VIDEO_PROCESSOR_RATE_CONVERSION_CAPS), +} + + +OMAC :: struct { + Omac: [16]u8, +} + +AUTHENTICATED_CHANNEL_TYPE :: enum i32 { + D3D11 = 1, + DRIVER_SOFTWARE = 2, + DRIVER_HARDWARE = 3, +} + + +IAuthenticatedChannel_UUID :: "3015A308-DCBD-47AA-A747-192486D14D4A" +IAuthenticatedChannel :: struct #raw_union { + #subtype id3d11devicechild: IDeviceChild, + using id3d11authenticatedchannel_vtable: ^IAuthenticatedChannel_VTable, +} +IAuthenticatedChannel_VTable :: struct { + using id3d11devicechild_vtable: IDeviceChild_VTable, + GetCertificateSize: proc "stdcall" (this: ^IAuthenticatedChannel, pCertificateSize: ^u32) -> HRESULT, + GetCertificate: proc "stdcall" (this: ^IAuthenticatedChannel, CertificateSize: u32, pCertificate: cstring) -> HRESULT, + GetChannelHandle: proc "stdcall" (this: ^IAuthenticatedChannel, pChannelHandle: ^HANDLE), +} + + +AUTHENTICATED_QUERY_INPUT :: struct { + QueryType: GUID, + hChannel: HANDLE, + SequenceNumber: u32, +} + +AUTHENTICATED_QUERY_OUTPUT :: struct { + omac: OMAC, + QueryType: GUID, + hChannel: HANDLE, + SequenceNumber: u32, + ReturnCode: HRESULT, +} + +AUTHENTICATED_PROTECTION_FLAG :: enum u32 { + ProtectionEnabled = 0, + OverlayOrFullscreenRequired = 1, + Reserved = 2, +} +AUTHENTICATED_PROTECTION_FLAGS :: distinct bit_set[AUTHENTICATED_PROTECTION_FLAG; u32] + +AUTHENTICATED_QUERY_PROTECTION_OUTPUT :: struct { + Output: AUTHENTICATED_QUERY_OUTPUT, + ProtectionFlags: AUTHENTICATED_PROTECTION_FLAGS, +} + +AUTHENTICATED_QUERY_CHANNEL_TYPE_OUTPUT :: struct { + Output: AUTHENTICATED_QUERY_OUTPUT, + ChannelType: AUTHENTICATED_CHANNEL_TYPE, +} + +AUTHENTICATED_QUERY_DEVICE_HANDLE_OUTPUT :: struct { + Output: AUTHENTICATED_QUERY_OUTPUT, + DeviceHandle: HANDLE, +} + +AUTHENTICATED_QUERY_CRYPTO_SESSION_INPUT :: struct { + Input: AUTHENTICATED_QUERY_INPUT, + DecoderHandle: HANDLE, +} + +AUTHENTICATED_QUERY_CRYPTO_SESSION_OUTPUT :: struct { + Output: AUTHENTICATED_QUERY_OUTPUT, + DecoderHandle: HANDLE, + CryptoSessionHandle: HANDLE, + DeviceHandle: HANDLE, +} + +AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_COUNT_OUTPUT :: struct { + Output: AUTHENTICATED_QUERY_OUTPUT, + RestrictedSharedResourceProcessCount: u32, +} + +AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_INPUT :: struct { + Input: AUTHENTICATED_QUERY_INPUT, + ProcessIndex: u32, +} + +AUTHENTICATED_PROCESS_IDENTIFIER_TYPE :: enum i32 { + UNKNOWN = 0, + DWM = 1, + HANDLE = 2, +} + +AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_OUTPUT :: struct { + Output: AUTHENTICATED_QUERY_OUTPUT, + ProcessIndex: u32, + ProcessIdentifier: AUTHENTICATED_PROCESS_IDENTIFIER_TYPE, + ProcessHandle: HANDLE, +} + +AUTHENTICATED_QUERY_UNRESTRICTED_PROTECTED_SHARED_RESOURCE_COUNT_OUTPUT :: struct { + Output: AUTHENTICATED_QUERY_OUTPUT, + UnrestrictedProtectedSharedResourceCount: u32, +} + +AUTHENTICATED_QUERY_OUTPUT_ID_COUNT_INPUT :: struct { + Input: AUTHENTICATED_QUERY_INPUT, + DeviceHandle: HANDLE, + CryptoSessionHandle: HANDLE, +} + +AUTHENTICATED_QUERY_OUTPUT_ID_COUNT_OUTPUT :: struct { + Output: AUTHENTICATED_QUERY_OUTPUT, + DeviceHandle: HANDLE, + CryptoSessionHandle: HANDLE, + OutputIDCount: u32, +} + +AUTHENTICATED_QUERY_OUTPUT_ID_INPUT :: struct { + Input: AUTHENTICATED_QUERY_INPUT, + DeviceHandle: HANDLE, + CryptoSessionHandle: HANDLE, + OutputIDIndex: u32, +} + +AUTHENTICATED_QUERY_OUTPUT_ID_OUTPUT :: struct { + Output: AUTHENTICATED_QUERY_OUTPUT, + DeviceHandle: HANDLE, + CryptoSessionHandle: HANDLE, + OutputIDIndex: u32, + OutputID: u64, +} + +BUS_TYPE :: enum i32 { + OTHER = 0, + PCI = 1, + PCIX = 2, + PCIEXPRESS = 3, + AGP = 4, + NSIDE_OF_CHIPSET = 65536, + RACKS_ON_MOTHER_BOARD_TO_CHIP = 131072, + RACKS_ON_MOTHER_BOARD_TO_SOCKET = 196608, + AUGHTER_BOARD_CONNECTOR = 262144, + AUGHTER_BOARD_CONNECTOR_INSIDE_OF_NUAE = 327680, + ON_STANDARD = -2147483648, +} + +AUTHENTICATED_QUERY_ACESSIBILITY_OUTPUT :: struct { + Output: AUTHENTICATED_QUERY_OUTPUT, + BusType: BUS_TYPE, + AccessibleInContiguousBlocks: BOOL, + AccessibleInNonContiguousBlocks: BOOL, +} + +AUTHENTICATED_QUERY_ACCESSIBILITY_OUTPUT :: AUTHENTICATED_QUERY_ACESSIBILITY_OUTPUT + +AUTHENTICATED_QUERY_ACCESSIBILITY_ENCRYPTION_GUID_COUNT_OUTPUT :: struct { + Output: AUTHENTICATED_QUERY_OUTPUT, + EncryptionGuidCount: u32, +} + +AUTHENTICATED_QUERY_ACCESSIBILITY_ENCRYPTION_GUID_INPUT :: struct { + Input: AUTHENTICATED_QUERY_INPUT, + EncryptionGuidIndex: u32, +} + +AUTHENTICATED_QUERY_ACCESSIBILITY_ENCRYPTION_GUID_OUTPUT :: struct { + Output: AUTHENTICATED_QUERY_OUTPUT, + EncryptionGuidIndex: u32, + EncryptionGuid: GUID, +} + +AUTHENTICATED_QUERY_CURRENT_ACCESSIBILITY_ENCRYPTION_OUTPUT :: struct { + Output: AUTHENTICATED_QUERY_OUTPUT, + EncryptionGuid: GUID, +} + +AUTHENTICATED_CONFIGURE_INPUT :: struct { + omac: OMAC, + ConfigureType: GUID, + hChannel: HANDLE, + SequenceNumber: u32, +} + +AUTHENTICATED_CONFIGURE_OUTPUT :: struct { + omac: OMAC, + ConfigureType: GUID, + hChannel: HANDLE, + SequenceNumber: u32, + ReturnCode: HRESULT, +} + +AUTHENTICATED_CONFIGURE_INITIALIZE_INPUT :: struct { + Parameters: AUTHENTICATED_CONFIGURE_INPUT, + StartSequenceQuery: u32, + StartSequenceConfigure: u32, +} + +AUTHENTICATED_CONFIGURE_PROTECTION_INPUT :: struct { + Parameters: AUTHENTICATED_CONFIGURE_INPUT, + Protections: AUTHENTICATED_PROTECTION_FLAGS, +} + +AUTHENTICATED_CONFIGURE_CRYPTO_SESSION_INPUT :: struct { + Parameters: AUTHENTICATED_CONFIGURE_INPUT, + DecoderHandle: HANDLE, + CryptoSessionHandle: HANDLE, + DeviceHandle: HANDLE, +} + +AUTHENTICATED_CONFIGURE_SHARED_RESOURCE_INPUT :: struct { + Parameters: AUTHENTICATED_CONFIGURE_INPUT, + ProcessType: AUTHENTICATED_PROCESS_IDENTIFIER_TYPE, + ProcessHandle: HANDLE, + AllowAccess: BOOL, +} + +AUTHENTICATED_CONFIGURE_ACCESSIBLE_ENCRYPTION_INPUT :: struct { + Parameters: AUTHENTICATED_CONFIGURE_INPUT, + EncryptionGuid: GUID, +} + + + +ICryptoSession_UUID :: "9B32F9AD-BDCC-40A6-A39D-D5C865845720" +ICryptoSession :: struct #raw_union { + #subtype id3d11devicechild: IDeviceChild, + using id3d11cryptosession_vtable: ^ICryptoSession_VTable, +} +ICryptoSession_VTable :: struct { + using id3d11devicechild_vtable: IDeviceChild_VTable, + GetCryptoType: proc "stdcall" (this: ^ICryptoSession, pCryptoType: ^GUID), + GetDecoderProfile: proc "stdcall" (this: ^ICryptoSession, pDecoderProfile: ^GUID), + GetCertificateSize: proc "stdcall" (this: ^ICryptoSession, pCertificateSize: ^u32) -> HRESULT, + GetCertificate: proc "stdcall" (this: ^ICryptoSession, CertificateSize: u32, pCertificate: cstring) -> HRESULT, + GetCryptoSessionHandle: proc "stdcall" (this: ^ICryptoSession, pCryptoSessionHandle: ^HANDLE), +} + + +VDOV_DIMENSION :: enum i32 { + UNKNOWN = 0, + TEXTURE2D = 1, +} + +TEX2D_VDOV :: struct { + ArraySlice: u32, +} + +VIDEO_DECODER_OUTPUT_VIEW_DESC :: struct { + DecodeProfile: GUID, + ViewDimension: VDOV_DIMENSION, + using _: struct #raw_union { + Texture2D: TEX2D_VDOV, + }, +} + + +IVideoDecoderOutputView_UUID :: "C2931AEA-2A85-4F20-860F-FBA1FD256E18" +IVideoDecoderOutputView :: struct #raw_union { + #subtype id3d11view: IView, + using id3d11videodecoderoutputview_vtable: ^IVideoDecoderOutputView_VTable, +} +IVideoDecoderOutputView_VTable :: struct { + using id3d11view_vtable: IView_VTable, + GetDesc: proc "stdcall" (this: ^IVideoDecoderOutputView, pDesc: ^VIDEO_DECODER_OUTPUT_VIEW_DESC), +} + + +VPIV_DIMENSION :: enum i32 { + UNKNOWN = 0, + TEXTURE2D = 1, +} + +TEX2D_VPIV :: struct { + MipSlice: u32, + ArraySlice: u32, +} + +VIDEO_PROCESSOR_INPUT_VIEW_DESC :: struct { + FourCC: u32, + ViewDimension: VPIV_DIMENSION, + using _: struct #raw_union { + Texture2D: TEX2D_VPIV, + }, +} + + +IVideoProcessorInputView_UUID :: "11EC5A5F-51DC-4945-AB34-6E8C21300EA5" +IVideoProcessorInputView :: struct #raw_union { + #subtype id3d11view: IView, + using id3d11videoprocessorinputview_vtable: ^IVideoProcessorInputView_VTable, +} +IVideoProcessorInputView_VTable :: struct { + using id3d11view_vtable: IView_VTable, + GetDesc: proc "stdcall" (this: ^IVideoProcessorInputView, pDesc: ^VIDEO_PROCESSOR_INPUT_VIEW_DESC), +} + + +VPOV_DIMENSION :: enum i32 { + UNKNOWN = 0, + TEXTURE2D = 1, + TEXTURE2DARRAY = 2, +} + +TEX2D_VPOV :: struct { + MipSlice: u32, +} + +TEX2D_ARRAY_VPOV :: struct { + MipSlice: u32, + FirstArraySlice: u32, + ArraySize: u32, +} + +VIDEO_PROCESSOR_OUTPUT_VIEW_DESC :: struct { + ViewDimension: VPOV_DIMENSION, + using _: struct #raw_union { + Texture2D: TEX2D_VPOV, + Texture2DArray: TEX2D_ARRAY_VPOV, + }, +} + + +IVideoProcessorOutputView_UUID :: "A048285E-25A9-4527-BD93-D68B68C44254" +IVideoProcessorOutputView :: struct #raw_union { + #subtype id3d11view: IView, + using id3d11videoprocessoroutputview_vtable: ^IVideoProcessorOutputView_VTable, +} +IVideoProcessorOutputView_VTable :: struct { + using id3d11view_vtable: IView_VTable, + GetDesc: proc "stdcall" (this: ^IVideoProcessorOutputView, pDesc: ^VIDEO_PROCESSOR_OUTPUT_VIEW_DESC), +} + + + +IVideoContext_UUID :: "61F21C45-3C0E-4A74-9CEA-67100D9AD5E4" +IVideoContext :: struct #raw_union { + #subtype id3d11devicechild: IDeviceChild, + using id3d11videocontext_vtable: ^IVideoContext_VTable, +} +IVideoContext_VTable :: struct { + using id3d11devicechild_vtable: IDeviceChild_VTable, + GetDecoderBuffer: proc "stdcall" (this: ^IVideoContext, pDecoder: ^IVideoDecoder, Type: VIDEO_DECODER_BUFFER_TYPE, pBufferSize: ^u32, ppBuffer: ^rawptr) -> HRESULT, + ReleaseDecoderBuffer: proc "stdcall" (this: ^IVideoContext, pDecoder: ^IVideoDecoder, Type: VIDEO_DECODER_BUFFER_TYPE) -> HRESULT, + DecoderBeginFrame: proc "stdcall" (this: ^IVideoContext, pDecoder: ^IVideoDecoder, pView: ^IVideoDecoderOutputView, ContentKeySize: u32, pContentKey: rawptr) -> HRESULT, + DecoderEndFrame: proc "stdcall" (this: ^IVideoContext, pDecoder: ^IVideoDecoder) -> HRESULT, + SubmitDecoderBuffers: proc "stdcall" (this: ^IVideoContext, pDecoder: ^IVideoDecoder, NumBuffers: u32, pBufferDesc: ^VIDEO_DECODER_BUFFER_DESC) -> HRESULT, + DecoderExtension: proc "stdcall" (this: ^IVideoContext, pDecoder: ^IVideoDecoder, pExtensionData: ^VIDEO_DECODER_EXTENSION) -> APP_DEPRECATED_HRESULT, + VideoProcessorSetOutputTargetRect: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, Enable: BOOL, pRect: ^RECT), + VideoProcessorSetOutputBackgroundColor: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, YCbCr: BOOL, pColor: ^VIDEO_COLOR), + VideoProcessorSetOutputColorSpace: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, pColorSpace: ^VIDEO_PROCESSOR_COLOR_SPACE), + VideoProcessorSetOutputAlphaFillMode: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, AlphaFillMode: VIDEO_PROCESSOR_ALPHA_FILL_MODE, StreamIndex: u32), + VideoProcessorSetOutputConstriction: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, Enable: BOOL, Size: SIZE), + VideoProcessorSetOutputStereoMode: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, Enable: BOOL), + VideoProcessorSetOutputExtension: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, pExtensionGuid: ^GUID, DataSize: u32, pData: rawptr) -> APP_DEPRECATED_HRESULT, + VideoProcessorGetOutputTargetRect: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, Enabled: ^BOOL, pRect: ^RECT), + VideoProcessorGetOutputBackgroundColor: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, pYCbCr: ^BOOL, pColor: ^VIDEO_COLOR), + VideoProcessorGetOutputColorSpace: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, pColorSpace: ^VIDEO_PROCESSOR_COLOR_SPACE), + VideoProcessorGetOutputAlphaFillMode: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, pAlphaFillMode: ^VIDEO_PROCESSOR_ALPHA_FILL_MODE, pStreamIndex: ^u32), + VideoProcessorGetOutputConstriction: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, pEnabled: ^BOOL, pSize: ^SIZE), + VideoProcessorGetOutputStereoMode: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, pEnabled: ^BOOL), + VideoProcessorGetOutputExtension: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, pExtensionGuid: ^GUID, DataSize: u32, pData: rawptr) -> APP_DEPRECATED_HRESULT, + VideoProcessorSetStreamFrameFormat: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, StreamIndex: u32, FrameFormat: VIDEO_FRAME_FORMAT), + VideoProcessorSetStreamColorSpace: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, StreamIndex: u32, pColorSpace: ^VIDEO_PROCESSOR_COLOR_SPACE), + VideoProcessorSetStreamOutputRate: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, StreamIndex: u32, OutputRate: VIDEO_PROCESSOR_OUTPUT_RATE, RepeatFrame: BOOL, pCustomRate: ^dxgi.RATIONAL), + VideoProcessorSetStreamSourceRect: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, StreamIndex: u32, Enable: BOOL, pRect: ^RECT), + VideoProcessorSetStreamDestRect: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, StreamIndex: u32, Enable: BOOL, pRect: ^RECT), + VideoProcessorSetStreamAlpha: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, StreamIndex: u32, Enable: BOOL, Alpha: f32), + VideoProcessorSetStreamPalette: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, StreamIndex: u32, Count: u32, pEntries: ^u32), + VideoProcessorSetStreamPixelAspectRatio: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, StreamIndex: u32, Enable: BOOL, pSourceAspectRatio: ^dxgi.RATIONAL, pDestinationAspectRatio: ^dxgi.RATIONAL), + VideoProcessorSetStreamLumaKey: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, StreamIndex: u32, Enable: BOOL, Lower: f32, Upper: f32), + VideoProcessorSetStreamStereoFormat: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, StreamIndex: u32, Enable: BOOL, Format: VIDEO_PROCESSOR_STEREO_FORMAT, LeftViewFrame0: BOOL, BaseViewFrame0: BOOL, FlipMode: VIDEO_PROCESSOR_STEREO_FLIP_MODE, MonoOffset: i32), + VideoProcessorSetStreamAutoProcessingMode: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, StreamIndex: u32, Enable: BOOL), + VideoProcessorSetStreamFilter: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, StreamIndex: u32, Filter: VIDEO_PROCESSOR_FILTER, Enable: BOOL, Level: i32), + VideoProcessorSetStreamExtension: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, StreamIndex: u32, pExtensionGuid: ^GUID, DataSize: u32, pData: rawptr) -> APP_DEPRECATED_HRESULT, + VideoProcessorGetStreamFrameFormat: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, StreamIndex: u32, pFrameFormat: ^VIDEO_FRAME_FORMAT), + VideoProcessorGetStreamColorSpace: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, StreamIndex: u32, pColorSpace: ^VIDEO_PROCESSOR_COLOR_SPACE), + VideoProcessorGetStreamOutputRate: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, StreamIndex: u32, pOutputRate: ^VIDEO_PROCESSOR_OUTPUT_RATE, pRepeatFrame: ^BOOL, pCustomRate: ^dxgi.RATIONAL), + VideoProcessorGetStreamSourceRect: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, StreamIndex: u32, pEnabled: ^BOOL, pRect: ^RECT), + VideoProcessorGetStreamDestRect: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, StreamIndex: u32, pEnabled: ^BOOL, pRect: ^RECT), + VideoProcessorGetStreamAlpha: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, StreamIndex: u32, pEnabled: ^BOOL, pAlpha: ^f32), + VideoProcessorGetStreamPalette: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, StreamIndex: u32, Count: u32, pEntries: ^u32), + VideoProcessorGetStreamPixelAspectRatio: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, StreamIndex: u32, pEnabled: ^BOOL, pSourceAspectRatio: ^dxgi.RATIONAL, pDestinationAspectRatio: ^dxgi.RATIONAL), + VideoProcessorGetStreamLumaKey: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, StreamIndex: u32, pEnabled: ^BOOL, pLower: ^f32, pUpper: ^f32), + VideoProcessorGetStreamStereoFormat: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, StreamIndex: u32, pEnable: ^BOOL, pFormat: ^VIDEO_PROCESSOR_STEREO_FORMAT, pLeftViewFrame0: ^BOOL, pBaseViewFrame0: ^BOOL, pFlipMode: ^VIDEO_PROCESSOR_STEREO_FLIP_MODE, MonoOffset: ^i32), + VideoProcessorGetStreamAutoProcessingMode: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, StreamIndex: u32, pEnabled: ^BOOL), + VideoProcessorGetStreamFilter: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, StreamIndex: u32, Filter: VIDEO_PROCESSOR_FILTER, pEnabled: ^BOOL, pLevel: ^i32), + VideoProcessorGetStreamExtension: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, StreamIndex: u32, pExtensionGuid: ^GUID, DataSize: u32, pData: rawptr) -> APP_DEPRECATED_HRESULT, + VideoProcessorBlt: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, pView: ^IVideoProcessorOutputView, OutputFrame: u32, StreamCount: u32, pStreams: ^VIDEO_PROCESSOR_STREAM) -> HRESULT, + NegotiateCryptoSessionKeyExchange: proc "stdcall" (this: ^IVideoContext, pCryptoSession: ^ICryptoSession, DataSize: u32, pData: rawptr) -> HRESULT, + EncryptionBlt: proc "stdcall" (this: ^IVideoContext, pCryptoSession: ^ICryptoSession, pSrcSurface: ^ITexture2D, pDstSurface: ^ITexture2D, IVSize: u32, pIV: rawptr), + DecryptionBlt: proc "stdcall" (this: ^IVideoContext, pCryptoSession: ^ICryptoSession, pSrcSurface: ^ITexture2D, pDstSurface: ^ITexture2D, pEncryptedBlockInfo: ^ENCRYPTED_BLOCK_INFO, ContentKeySize: u32, pContentKey: rawptr, IVSize: u32, pIV: rawptr), + StartSessionKeyRefresh: proc "stdcall" (this: ^IVideoContext, pCryptoSession: ^ICryptoSession, RandomNumberSize: u32, pRandomNumber: rawptr), + FinishSessionKeyRefresh: proc "stdcall" (this: ^IVideoContext, pCryptoSession: ^ICryptoSession), + GetEncryptionBltKey: proc "stdcall" (this: ^IVideoContext, pCryptoSession: ^ICryptoSession, KeySize: u32, pReadbackKey: rawptr) -> HRESULT, + NegotiateAuthenticatedChannelKeyExchange: proc "stdcall" (this: ^IVideoContext, pChannel: ^IAuthenticatedChannel, DataSize: u32, pData: rawptr) -> HRESULT, + QueryAuthenticatedChannel: proc "stdcall" (this: ^IVideoContext, pChannel: ^IAuthenticatedChannel, InputSize: u32, pInput: rawptr, OutputSize: u32, pOutput: rawptr) -> HRESULT, + ConfigureAuthenticatedChannel: proc "stdcall" (this: ^IVideoContext, pChannel: ^IAuthenticatedChannel, InputSize: u32, pInput: rawptr, pOutput: ^AUTHENTICATED_CONFIGURE_OUTPUT) -> HRESULT, + VideoProcessorSetStreamRotation: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, StreamIndex: u32, Enable: BOOL, Rotation: VIDEO_PROCESSOR_ROTATION), + VideoProcessorGetStreamRotation: proc "stdcall" (this: ^IVideoContext, pVideoProcessor: ^IVideoProcessor, StreamIndex: u32, pEnable: ^BOOL, pRotation: ^VIDEO_PROCESSOR_ROTATION), +} + + + +IVideoDevice_UUID :: "10EC4D5B-975A-4689-B9E4-D0AAC30FE333" +IVideoDevice :: struct #raw_union { + #subtype iunknown: IUnknown, + using id3d11videodevice_vtable: ^IVideoDevice_VTable, +} +IVideoDevice_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + CreateVideoDecoder: proc "stdcall" (this: ^IVideoDevice, pVideoDesc: ^VIDEO_DECODER_DESC, pConfig: ^VIDEO_DECODER_CONFIG, ppDecoder: ^^IVideoDecoder) -> HRESULT, + CreateVideoProcessor: proc "stdcall" (this: ^IVideoDevice, pEnum: ^IVideoProcessorEnumerator, RateConversionIndex: u32, ppVideoProcessor: ^^IVideoProcessor) -> HRESULT, + CreateAuthenticatedChannel: proc "stdcall" (this: ^IVideoDevice, ChannelType: AUTHENTICATED_CHANNEL_TYPE, ppAuthenticatedChannel: ^^IAuthenticatedChannel) -> HRESULT, + CreateCryptoSession: proc "stdcall" (this: ^IVideoDevice, pCryptoType: ^GUID, pDecoderProfile: ^GUID, pKeyExchangeType: ^GUID, ppCryptoSession: ^^ICryptoSession) -> HRESULT, + CreateVideoDecoderOutputView: proc "stdcall" (this: ^IVideoDevice, pResource: ^IResource, pDesc: ^VIDEO_DECODER_OUTPUT_VIEW_DESC, ppVDOVView: ^^IVideoDecoderOutputView) -> HRESULT, + CreateVideoProcessorInputView: proc "stdcall" (this: ^IVideoDevice, pResource: ^IResource, pEnum: ^IVideoProcessorEnumerator, pDesc: ^VIDEO_PROCESSOR_INPUT_VIEW_DESC, ppVPIView: ^^IVideoProcessorInputView) -> HRESULT, + CreateVideoProcessorOutputView: proc "stdcall" (this: ^IVideoDevice, pResource: ^IResource, pEnum: ^IVideoProcessorEnumerator, pDesc: ^VIDEO_PROCESSOR_OUTPUT_VIEW_DESC, ppVPOView: ^^IVideoProcessorOutputView) -> HRESULT, + CreateVideoProcessorEnumerator: proc "stdcall" (this: ^IVideoDevice, pDesc: ^VIDEO_PROCESSOR_CONTENT_DESC, ppEnum: ^^IVideoProcessorEnumerator) -> HRESULT, + GetVideoDecoderProfileCount: proc "stdcall" (this: ^IVideoDevice) -> u32, + GetVideoDecoderProfile: proc "stdcall" (this: ^IVideoDevice, Index: u32, pDecoderProfile: ^GUID) -> HRESULT, + CheckVideoDecoderFormat: proc "stdcall" (this: ^IVideoDevice, pDecoderProfile: ^GUID, Format: dxgi.FORMAT, pSupported: ^BOOL) -> HRESULT, + GetVideoDecoderConfigCount: proc "stdcall" (this: ^IVideoDevice, pDesc: ^VIDEO_DECODER_DESC, pCount: ^u32) -> HRESULT, + GetVideoDecoderConfig: proc "stdcall" (this: ^IVideoDevice, pDesc: ^VIDEO_DECODER_DESC, Index: u32, pConfig: ^VIDEO_DECODER_CONFIG) -> HRESULT, + GetContentProtectionCaps: proc "stdcall" (this: ^IVideoDevice, pCryptoType: ^GUID, pDecoderProfile: ^GUID, pCaps: ^VIDEO_CONTENT_PROTECTION_CAPS) -> HRESULT, + CheckCryptoKeyExchange: proc "stdcall" (this: ^IVideoDevice, pCryptoType: ^GUID, pDecoderProfile: ^GUID, Index: u32, pKeyExchangeType: ^GUID) -> HRESULT, + SetPrivateData: proc "stdcall" (this: ^IVideoDevice, guid: ^GUID, DataSize: u32, pData: rawptr) -> HRESULT, + SetPrivateDataInterface: proc "stdcall" (this: ^IVideoDevice, guid: ^GUID, pData: ^IUnknown) -> HRESULT, +} + + + +IDevice_UUID :: "DB6F6DDB-AC77-4E88-8253-819DF9BBF140" +IDevice :: struct #raw_union { + #subtype iunknown: IUnknown, + using id3d11device_vtable: ^IDevice_VTable, +} +IDevice_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + CreateBuffer: proc "stdcall" (this: ^IDevice, pDesc: ^BUFFER_DESC, pInitialData: ^SUBRESOURCE_DATA, ppBuffer: ^^IBuffer) -> HRESULT, + CreateTexture1D: proc "stdcall" (this: ^IDevice, pDesc: ^TEXTURE1D_DESC, pInitialData: ^SUBRESOURCE_DATA, ppTexture1D: ^^ITexture1D) -> HRESULT, + CreateTexture2D: proc "stdcall" (this: ^IDevice, pDesc: ^TEXTURE2D_DESC, pInitialData: ^SUBRESOURCE_DATA, ppTexture2D: ^^ITexture2D) -> HRESULT, + CreateTexture3D: proc "stdcall" (this: ^IDevice, pDesc: ^TEXTURE3D_DESC, pInitialData: ^SUBRESOURCE_DATA, ppTexture3D: ^^ITexture3D) -> HRESULT, + CreateShaderResourceView: proc "stdcall" (this: ^IDevice, pResource: ^IResource, pDesc: ^SHADER_RESOURCE_VIEW_DESC, ppSRView: ^^IShaderResourceView) -> HRESULT, + CreateUnorderedAccessView: proc "stdcall" (this: ^IDevice, pResource: ^IResource, pDesc: ^UNORDERED_ACCESS_VIEW_DESC, ppUAView: ^^IUnorderedAccessView) -> HRESULT, + CreateRenderTargetView: proc "stdcall" (this: ^IDevice, pResource: ^IResource, pDesc: ^RENDER_TARGET_VIEW_DESC, ppRTView: ^^IRenderTargetView) -> HRESULT, + CreateDepthStencilView: proc "stdcall" (this: ^IDevice, pResource: ^IResource, pDesc: ^DEPTH_STENCIL_VIEW_DESC, ppDepthStencilView: ^^IDepthStencilView) -> HRESULT, + CreateInputLayout: proc "stdcall" (this: ^IDevice, pInputElementDescs: ^INPUT_ELEMENT_DESC, NumElements: u32, pShaderBytecodeWithInputSignature: rawptr, BytecodeLength: SIZE_T, ppInputLayout: ^^IInputLayout) -> HRESULT, + CreateVertexShader: proc "stdcall" (this: ^IDevice, pShaderBytecode: rawptr, BytecodeLength: SIZE_T, pClassLinkage: ^IClassLinkage, ppVertexShader: ^^IVertexShader) -> HRESULT, + CreateGeometryShader: proc "stdcall" (this: ^IDevice, pShaderBytecode: rawptr, BytecodeLength: SIZE_T, pClassLinkage: ^IClassLinkage, ppGeometryShader: ^^IGeometryShader) -> HRESULT, + CreateGeometryShaderWithStreamOutput: proc "stdcall" (this: ^IDevice, pShaderBytecode: rawptr, BytecodeLength: SIZE_T, pSODeclaration: ^SO_DECLARATION_ENTRY, NumEntries: u32, pBufferStrides: ^u32, NumStrides: u32, RasterizedStream: u32, pClassLinkage: ^IClassLinkage, ppGeometryShader: ^^IGeometryShader) -> HRESULT, + CreatePixelShader: proc "stdcall" (this: ^IDevice, pShaderBytecode: rawptr, BytecodeLength: SIZE_T, pClassLinkage: ^IClassLinkage, ppPixelShader: ^^IPixelShader) -> HRESULT, + CreateHullShader: proc "stdcall" (this: ^IDevice, pShaderBytecode: rawptr, BytecodeLength: SIZE_T, pClassLinkage: ^IClassLinkage, ppHullShader: ^^IHullShader) -> HRESULT, + CreateDomainShader: proc "stdcall" (this: ^IDevice, pShaderBytecode: rawptr, BytecodeLength: SIZE_T, pClassLinkage: ^IClassLinkage, ppDomainShader: ^^IDomainShader) -> HRESULT, + CreateComputeShader: proc "stdcall" (this: ^IDevice, pShaderBytecode: rawptr, BytecodeLength: SIZE_T, pClassLinkage: ^IClassLinkage, ppComputeShader: ^^IComputeShader) -> HRESULT, + CreateClassLinkage: proc "stdcall" (this: ^IDevice, ppLinkage: ^^IClassLinkage) -> HRESULT, + CreateBlendState: proc "stdcall" (this: ^IDevice, pBlendStateDesc: ^BLEND_DESC, ppBlendState: ^^IBlendState) -> HRESULT, + CreateDepthStencilState: proc "stdcall" (this: ^IDevice, pDepthStencilDesc: ^DEPTH_STENCIL_DESC, ppDepthStencilState: ^^IDepthStencilState) -> HRESULT, + CreateRasterizerState: proc "stdcall" (this: ^IDevice, pRasterizerDesc: ^RASTERIZER_DESC, ppRasterizerState: ^^IRasterizerState) -> HRESULT, + CreateSamplerState: proc "stdcall" (this: ^IDevice, pSamplerDesc: ^SAMPLER_DESC, ppSamplerState: ^^ISamplerState) -> HRESULT, + CreateQuery: proc "stdcall" (this: ^IDevice, pQueryDesc: ^QUERY_DESC, ppQuery: ^^IQuery) -> HRESULT, + CreatePredicate: proc "stdcall" (this: ^IDevice, pPredicateDesc: ^QUERY_DESC, ppPredicate: ^^IPredicate) -> HRESULT, + CreateCounter: proc "stdcall" (this: ^IDevice, pCounterDesc: ^COUNTER_DESC, ppCounter: ^^ICounter) -> HRESULT, + CreateDeferredContext: proc "stdcall" (this: ^IDevice, ContextFlags: u32, ppDeferredContext: ^^IDeviceContext) -> HRESULT, + OpenSharedResource: proc "stdcall" (this: ^IDevice, hResource: HANDLE, ReturnedInterface: ^IID, ppResource: ^rawptr) -> HRESULT, + CheckFormatSupport: proc "stdcall" (this: ^IDevice, Format: dxgi.FORMAT, pFormatSupport: ^u32) -> HRESULT, + CheckMultisampleQualityLevels: proc "stdcall" (this: ^IDevice, Format: dxgi.FORMAT, SampleCount: u32, pNumQualityLevels: ^u32) -> HRESULT, + CheckCounterInfo: proc "stdcall" (this: ^IDevice, pCounterInfo: ^COUNTER_INFO), + CheckCounter: proc "stdcall" (this: ^IDevice, pDesc: ^COUNTER_DESC, pType: ^COUNTER_TYPE, pActiveCounters: ^u32, szName: cstring, pNameLength: ^u32, szUnits: ^u8, pUnitsLength: ^u32, szDescription: cstring, pDescriptionLength: ^u32) -> HRESULT, + CheckFeatureSupport: proc "stdcall" (this: ^IDevice, Feature: FEATURE, pFeatureSupportData: rawptr, FeatureSupportDataSize: u32) -> HRESULT, + GetPrivateData: proc "stdcall" (this: ^IDevice, guid: ^GUID, pDataSize: ^u32, pData: rawptr) -> HRESULT, + SetPrivateData: proc "stdcall" (this: ^IDevice, guid: ^GUID, DataSize: u32, pData: rawptr) -> HRESULT, + SetPrivateDataInterface: proc "stdcall" (this: ^IDevice, guid: ^GUID, pData: ^IUnknown) -> HRESULT, + GetFeatureLevel: proc "stdcall" (this: ^IDevice) -> FEATURE_LEVEL, + GetCreationFlags: proc "stdcall" (this: ^IDevice) -> u32, + GetDeviceRemovedReason: proc "stdcall" (this: ^IDevice) -> HRESULT, + GetImmediateContext: proc "stdcall" (this: ^IDevice, ppImmediateContext: ^^IDeviceContext), + SetExceptionMode: proc "stdcall" (this: ^IDevice, RaiseFlags: u32) -> HRESULT, + GetExceptionMode: proc "stdcall" (this: ^IDevice) -> u32, +} + + +CREATE_DEVICE_FLAG :: enum u32 { // TODO: make bit_set + SINGLETHREADED = 0x1, + DEBUG = 0x2, + SWITCH_TO_REF = 0x4, + PREVENT_INTERNAL_THREADING_OPTIMIZATIONS = 0x8, + BGRA_SUPPORT = 0x20, + DEBUGGABLE = 0x40, + PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY = 0x80, + DISABLE_GPU_TIMEOUT = 0x100, + VIDEO_SUPPORT = 0x800, +} + +PFN_CREATE_DEVICE :: #type proc "c" (a0: ^dxgi.IAdapter, a1: DRIVER_TYPE, a2: HMODULE, a3: u32, a4: ^FEATURE_LEVEL, a5: u32, a6: u32, a7: ^^IDevice, a8: ^FEATURE_LEVEL, a9: ^^IDeviceContext) -> HRESULT +PFN_CREATE_DEVICE_AND_SWAP_CHAIN :: #type proc "c" (a0: ^dxgi.IAdapter, a1: DRIVER_TYPE, a2: HMODULE, a3: u32, a4: ^FEATURE_LEVEL, a5: u32, a6: u32, a7: ^dxgi.SWAP_CHAIN_DESC, a8: ^^dxgi.ISwapChain, a9: ^^IDevice, a10: ^FEATURE_LEVEL, a11: ^^IDeviceContext) -> HRESULT + +SHADER_VERSION_TYPE :: enum i32 { + PIXEL_SHADER = 0, + VERTEX_SHADER = 1, + GEOMETRY_SHADER = 2, + + HULL_SHADER = 3, + DOMAIN_SHADER = 4, + COMPUTE_SHADER = 5, + + RESERVED0 = 65520, +} + +SIGNATURE_PARAMETER_DESC :: struct { + SemanticName: cstring, + SemanticIndex: u32, + Register: u32, + SystemValueType: NAME, + ComponentType: REGISTER_COMPONENT_TYPE, + Mask: u8, + + ReadWriteMask: u8, + + Stream: u32, + MinPrecision: MIN_PRECISION, +} + +SHADER_BUFFER_DESC :: struct { + Name: cstring, + Type: CBUFFER_TYPE, + Variables: u32, + Size: u32, + uFlags: u32, +} + +SHADER_VARIABLE_DESC :: struct { + Name: cstring, + StartOffset: u32, + Size: u32, + uFlags: u32, + DefaultValue: rawptr, + StartTexture: u32, + TextureSize: u32, + StartSampler: u32, + SamplerSize: u32, +} + +SHADER_TYPE_DESC :: struct { + Class: SHADER_VARIABLE_CLASS, + Type: SHADER_VARIABLE_TYPE, + Rows: u32, + Columns: u32, + Elements: u32, + Members: u32, + Offset: u32, + Name: cstring, +} + +SHADER_DESC :: struct { + Version: u32, + Creator: cstring, + Flags: u32, + + ConstantBuffers: u32, + BoundResources: u32, + InputParameters: u32, + OutputParameters: u32, + + InstructionCount: u32, + TempRegisterCount: u32, + TempArrayCount: u32, + DefCount: u32, + DclCount: u32, + TextureNormalInstructions: u32, + TextureLoadInstructions: u32, + TextureCompInstructions: u32, + TextureBiasInstructions: u32, + TextureGradientInstructions: u32, + FloatInstructionCount: u32, + IntInstructionCount: u32, + UintInstructionCount: u32, + StaticFlowControlCount: u32, + DynamicFlowControlCount: u32, + MacroInstructionCount: u32, + ArrayInstructionCount: u32, + CutInstructionCount: u32, + EmitInstructionCount: u32, + GSOutputTopology: PRIMITIVE_TOPOLOGY, + GSMaxOutputVertexCount: u32, + InputPrimitive: PRIMITIVE, + PatchConstantParameters: u32, + cGSInstanceCount: u32, + cControlPoints: u32, + HSOutputPrimitive: TESSELLATOR_OUTPUT_PRIMITIVE, + HSPartitioning: TESSELLATOR_PARTITIONING, + TessellatorDomain: TESSELLATOR_DOMAIN, + + cBarrierInstructions: u32, + cInterlockedInstructions: u32, + cTextureStoreInstructions: u32, +} + +SHADER_INPUT_BIND_DESC :: struct { + Name: cstring, + Type: SHADER_INPUT_TYPE, + BindPoint: u32, + BindCount: u32, + + uFlags: u32, + ReturnType: RESOURCE_RETURN_TYPE, + Dimension: SRV_DIMENSION, + NumSamples: u32, +} + +LIBRARY_DESC :: struct { + Creator: cstring, + Flags: u32, + FunctionCount: u32, +} + +FUNCTION_DESC :: struct { + Version: u32, + Creator: cstring, + Flags: u32, + + ConstantBuffers: u32, + BoundResources: u32, + + InstructionCount: u32, + TempRegisterCount: u32, + TempArrayCount: u32, + DefCount: u32, + DclCount: u32, + TextureNormalInstructions: u32, + TextureLoadInstructions: u32, + TextureCompInstructions: u32, + TextureBiasInstructions: u32, + TextureGradientInstructions: u32, + FloatInstructionCount: u32, + IntInstructionCount: u32, + UintInstructionCount: u32, + StaticFlowControlCount: u32, + DynamicFlowControlCount: u32, + MacroInstructionCount: u32, + ArrayInstructionCount: u32, + MovInstructionCount: u32, + MovcInstructionCount: u32, + ConversionInstructionCount: u32, + BitwiseInstructionCount: u32, + MinFeatureLevel: FEATURE_LEVEL, + RequiredFeatureFlags: u64, + + Name: cstring, + FunctionParameterCount: i32, + HasReturn: BOOL, + Has10Level9VertexShader: BOOL, + Has10Level9PixelShader: BOOL, +} + +PARAMETER_DESC :: struct { + Name: cstring, + SemanticName: cstring, + Type: SHADER_VARIABLE_TYPE, + Class: SHADER_VARIABLE_CLASS, + Rows: u32, + Columns: u32, + InterpolationMode: INTERPOLATION_MODE, + Flags: PARAMETER_FLAGS, + + FirstInRegister: u32, + FirstInComponent: u32, + FirstOutRegister: u32, + FirstOutComponent: u32, +} + +IShaderReflectionType :: struct { + using vtable: ^IShaderReflectionType_VTable, +} +IShaderReflectionType_VTable :: struct { + GetDesc: proc "stdcall" (this: ^IShaderReflectionType, pDesc: ^SHADER_TYPE_DESC) -> HRESULT, + GetMemberTypeByIndex: proc "stdcall" (this: ^IShaderReflectionType, Index: u32) -> ^IShaderReflectionType, + GetMemberTypeByName: proc "stdcall" (this: ^IShaderReflectionType, Name: cstring) -> ^IShaderReflectionType, + GetMemberTypeName: proc "stdcall" (this: ^IShaderReflectionType, Index: u32) -> cstring, + IsEqual: proc "stdcall" (this: ^IShaderReflectionType, pType: ^IShaderReflectionType) -> HRESULT, + GetSubType: proc "stdcall" (this: ^IShaderReflectionType) -> ^IShaderReflectionType, + GetBaseClass: proc "stdcall" (this: ^IShaderReflectionType) -> ^IShaderReflectionType, + GetNumInterfaces: proc "stdcall" (this: ^IShaderReflectionType) -> u32, + GetInterfaceByIndex: proc "stdcall" (this: ^IShaderReflectionType, uIndex: u32) -> ^IShaderReflectionType, + IsOfType: proc "stdcall" (this: ^IShaderReflectionType, pType: ^IShaderReflectionType) -> HRESULT, + ImplementsInterface: proc "stdcall" (this: ^IShaderReflectionType, pBase: ^IShaderReflectionType) -> HRESULT, +} + +IShaderReflectionVariable :: struct { + using vtable: ^IShaderReflectionVariable_VTable, +} +IShaderReflectionVariable_VTable :: struct { + GetDesc: proc "stdcall" (this: ^IShaderReflectionVariable, pDesc: ^SHADER_VARIABLE_DESC) -> HRESULT, + GetType: proc "stdcall" (this: ^IShaderReflectionVariable) -> ^IShaderReflectionType, + GetBuffer: proc "stdcall" (this: ^IShaderReflectionVariable) -> ^IShaderReflectionConstantBuffer, + GetInterfaceSlot: proc "stdcall" (this: ^IShaderReflectionVariable, uArrayIndex: u32) -> u32, +} + +IShaderReflectionConstantBuffer :: struct { + using vtable: ^IShaderReflectionConstantBuffer_VTable, +} +IShaderReflectionConstantBuffer_VTable :: struct { + GetDesc: proc "stdcall" (this: ^IShaderReflectionConstantBuffer, pDesc: ^SHADER_BUFFER_DESC) -> HRESULT, + GetVariableByIndex: proc "stdcall" (this: ^IShaderReflectionConstantBuffer, Index: u32) -> ^IShaderReflectionVariable, + GetVariableByName: proc "stdcall" (this: ^IShaderReflectionConstantBuffer, Name: cstring) -> ^IShaderReflectionVariable, +} + + +IShaderReflection :: struct #raw_union { + #subtype iunknown: IUnknown, + using id3d11shaderreflection_vtable: ^IShaderReflection_VTable, +} +IShaderReflection_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + GetDesc: proc "stdcall" (this: ^IShaderReflection, pDesc: ^SHADER_DESC) -> HRESULT, + GetConstantBufferByIndex: proc "stdcall" (this: ^IShaderReflection, Index: u32) -> ^IShaderReflectionConstantBuffer, + GetConstantBufferByName: proc "stdcall" (this: ^IShaderReflection, Name: cstring) -> ^IShaderReflectionConstantBuffer, + GetResourceBindingDesc: proc "stdcall" (this: ^IShaderReflection, ResourceIndex: u32, pDesc: ^SHADER_INPUT_BIND_DESC) -> HRESULT, + GetInputParameterDesc: proc "stdcall" (this: ^IShaderReflection, ParameterIndex: u32, pDesc: ^SIGNATURE_PARAMETER_DESC) -> HRESULT, + GetOutputParameterDesc: proc "stdcall" (this: ^IShaderReflection, ParameterIndex: u32, pDesc: ^SIGNATURE_PARAMETER_DESC) -> HRESULT, + GetPatchConstantParameterDesc: proc "stdcall" (this: ^IShaderReflection, ParameterIndex: u32, pDesc: ^SIGNATURE_PARAMETER_DESC) -> HRESULT, + GetVariableByName: proc "stdcall" (this: ^IShaderReflection, Name: cstring) -> ^IShaderReflectionVariable, + GetResourceBindingDescByName: proc "stdcall" (this: ^IShaderReflection, Name: cstring, pDesc: ^SHADER_INPUT_BIND_DESC) -> HRESULT, + GetMovInstructionCount: proc "stdcall" (this: ^IShaderReflection) -> u32, + GetMovcInstructionCount: proc "stdcall" (this: ^IShaderReflection) -> u32, + GetConversionInstructionCount: proc "stdcall" (this: ^IShaderReflection) -> u32, + GetBitwiseInstructionCount: proc "stdcall" (this: ^IShaderReflection) -> u32, + GetGSInputPrimitive: proc "stdcall" (this: ^IShaderReflection) -> PRIMITIVE, + IsSampleFrequencyShader: proc "stdcall" (this: ^IShaderReflection) -> BOOL, + GetNumInterfaceSlots: proc "stdcall" (this: ^IShaderReflection) -> u32, + GetMinFeatureLevel: proc "stdcall" (this: ^IShaderReflection, pLevel: ^FEATURE_LEVEL) -> HRESULT, + GetThreadGroupSize: proc "stdcall" (this: ^IShaderReflection, pSizeX: ^u32, pSizeY: ^u32, pSizeZ: ^u32) -> u32, + GetRequiresFlags: proc "stdcall" (this: ^IShaderReflection) -> u64, +} + + +ILibraryReflection :: struct #raw_union { + #subtype iunknown: IUnknown, + using id3d11libraryreflection_vtable: ^ILibraryReflection_VTable, +} +ILibraryReflection_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + GetDesc: proc "stdcall" (this: ^ILibraryReflection, pDesc: ^LIBRARY_DESC) -> HRESULT, + GetFunctionByIndex: proc "stdcall" (this: ^ILibraryReflection, FunctionIndex: i32) -> ^IFunctionReflection, +} + +IFunctionReflection :: struct { + using vtable: ^IFunctionReflection_VTable, +} +IFunctionReflection_VTable :: struct { + GetDesc: proc "stdcall" (this: ^IFunctionReflection, pDesc: ^FUNCTION_DESC) -> HRESULT, + GetConstantBufferByIndex: proc "stdcall" (this: ^IFunctionReflection, BufferIndex: u32) -> ^IShaderReflectionConstantBuffer, + GetConstantBufferByName: proc "stdcall" (this: ^IFunctionReflection, Name: cstring) -> ^IShaderReflectionConstantBuffer, + GetResourceBindingDesc: proc "stdcall" (this: ^IFunctionReflection, ResourceIndex: u32, pDesc: ^SHADER_INPUT_BIND_DESC) -> HRESULT, + GetVariableByName: proc "stdcall" (this: ^IFunctionReflection, Name: cstring) -> ^IShaderReflectionVariable, + GetResourceBindingDescByName: proc "stdcall" (this: ^IFunctionReflection, Name: cstring, pDesc: ^SHADER_INPUT_BIND_DESC) -> HRESULT, + GetFunctionParameter: proc "stdcall" (this: ^IFunctionReflection, ParameterIndex: i32) -> ^IFunctionParameterReflection, +} + +IFunctionParameterReflection :: struct { + using vtable: ^IFunctionParameterReflection_VTable, +} +IFunctionParameterReflection_VTable :: struct { + GetDesc: proc "stdcall" (this: ^IFunctionParameterReflection, pDesc: ^PARAMETER_DESC) -> HRESULT, +} + + +ILinkingNode :: struct { + using iunknown: IUnknown, +} + +IFunctionLinkingGraph :: struct #raw_union { + #subtype iunknown: IUnknown, + using id3d11functionlinkinggraph_vtable: ^IFunctionLinkingGraph_VTable, +} +IFunctionLinkingGraph_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + CreateModuleInstance: proc "stdcall" (this: ^IFunctionLinkingGraph, ppModuleInstance: ^^IModuleInstance, ppErrorBuffer: ^^IBlob) -> HRESULT, + SetInputSignature: proc "stdcall" (this: ^IFunctionLinkingGraph, pInputParameters: ^PARAMETER_DESC, cInputParameters: u32, ppInputNode: ^^ILinkingNode) -> HRESULT, + SetOutputSignature: proc "stdcall" (this: ^IFunctionLinkingGraph, pOutputParameters: ^PARAMETER_DESC, cOutputParameters: u32, ppOutputNode: ^^ILinkingNode) -> HRESULT, + CallFunction: proc "stdcall" (this: ^IFunctionLinkingGraph, pModuleInstanceNamespace: cstring, pModuleWithFunctionPrototype: ^IModule, pFunctionName: cstring, ppCallNode: ^^ILinkingNode) -> HRESULT, + PassValue: proc "stdcall" (this: ^IFunctionLinkingGraph, pSrcNode: ^ILinkingNode, SrcParameterIndex: i32, pDstNode: ^ILinkingNode, DstParameterIndex: i32) -> HRESULT, + PassValueWithSwizzle: proc "stdcall" (this: ^IFunctionLinkingGraph, pSrcNode: ^ILinkingNode, SrcParameterIndex: i32, pSrcSwizzle: ^u8, pDstNode: ^ILinkingNode, DstParameterIndex: i32, pDstSwizzle: ^u8) -> HRESULT, + GetLastError: proc "stdcall" (this: ^IFunctionLinkingGraph, ppErrorBuffer: ^^IBlob) -> HRESULT, + GenerateHlsl: proc "stdcall" (this: ^IFunctionLinkingGraph, uFlags: u32, ppBuffer: ^^IBlob) -> HRESULT, +} diff --git a/vendor/directx/d3d12/d3d12.odin b/vendor/directx/d3d12/d3d12.odin new file mode 100644 index 000000000..f3885ed63 --- /dev/null +++ b/vendor/directx/d3d12/d3d12.odin @@ -0,0 +1,5102 @@ +package directx_d3d12 + +foreign import "system:d3d12.lib" + +import "../dxgi" +import "../d3d_compiler" +import win32 "core:sys/windows" + +IUnknown :: dxgi.IUnknown +IUnknown_VTable :: dxgi.IUnknown_VTable + +HANDLE :: dxgi.HANDLE +HMODULE :: dxgi.HMODULE +HRESULT :: dxgi.HRESULT +HWND :: dxgi.HWND +LUID :: dxgi.LUID +UUID :: dxgi.UUID +GUID :: dxgi.GUID +IID :: dxgi.IID +SIZE_T :: dxgi.SIZE_T +BOOL :: dxgi.BOOL + +RECT :: dxgi.RECT + +IModuleInstance :: d3d_compiler.ID3D11ModuleInstance +IBlob :: d3d_compiler.ID3DBlob +IModule :: d3d_compiler.ID3D11Module + +@(default_calling_convention="stdcall", link_prefix="D3D12") +foreign d3d12 { + CreateDevice :: proc(pAdapter: ^IUnknown, MinimumFeatureLevel: FEATURE_LEVEL, riid: ^IID, ppDevice: ^rawptr) -> HRESULT --- + CreateRootSignatureDeserializer :: proc(pSrcData: rawptr, SrcDataSizeInBytes: SIZE_T, pRootSignatureDeserializerInterface: ^IID, ppRootSignatureDeserializer: ^rawptr) -> HRESULT --- + CreateVersionedRootSignatureDeserializer :: proc(pSrcData: rawptr, SrcDataSizeInBytes: SIZE_T, pRootSignatureDeserializerInterface: ^IID, ppRootSignatureDeserializer: ^rawptr) -> HRESULT --- + EnableExperimentalFeatures :: proc(NumFeatures: u32, pIIDs: ^IID, pConfigurationStructs: rawptr, pConfigurationStructSizes: ^u32) -> HRESULT --- + GetDebugInterface :: proc(riid: ^IID, ppvDebug: ^rawptr) -> HRESULT --- + SerializeRootSignature :: proc(pRootSignature: ^ROOT_SIGNATURE_DESC, Version: ROOT_SIGNATURE_VERSION, ppBlob: ^^IBlob, ppErrorBlob: ^^IBlob) -> HRESULT --- + SerializeVersionedRootSignature :: proc(pRootSignature: ^VERSIONED_ROOT_SIGNATURE_DESC, ppBlob: ^^IBlob, ppErrorBlob: ^^IBlob) -> HRESULT --- +} + +foreign d3d12 { + WKPDID_D3DDebugObjectNameW: GUID + WKPDID_CommentStringW: GUID + + @(link_name="DXGI_DEBUG_D3D12") + DEBUG_D3D12: GUID + + @(link_name="D3D12_PROTECTED_RESOURCES_SESSION_HARDWARE_PROTECTED") + PROTECTED_RESOURCES_SESSION_HARDWARE_PROTECTED: GUID +} + +@(link_prefix="D3D_") +foreign d3d12 { + TEXTURE_LAYOUT_ROW_MAJOR: GUID + TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE: GUID +} + +@(link_prefix="D3D12") +foreign d3d12 { + ExperimentalShaderModels: UUID + TiledResourceTier4: UUID + MetaCommand: UUID +} + + +DRIVER_TYPE :: enum i32 { + UNKNOWN = 0, + HARDWARE = 1, + REFERENCE = 2, + NULL = 3, + SOFTWARE = 4, + WARP = 5, +} + +FEATURE_LEVEL :: enum i32 { + _1_0_CORE = 4096, + _9_1 = 37120, + _9_2 = 37376, + _9_3 = 37632, + _10_0 = 40960, + _10_1 = 41216, + _11_0 = 45056, + _11_1 = 45312, + _12_0 = 49152, + _12_1 = 49408, +} + +PRIMITIVE_TOPOLOGY :: enum i32 { + UNDEFINED = 0, + POINTLIST = 1, + LINELIST = 2, + LINESTRIP = 3, + TRIANGLELIST = 4, + TRIANGLESTRIP = 5, + LINELIST_ADJ = 10, + LINESTRIP_ADJ = 11, + TRIANGLELIST_ADJ = 12, + TRIANGLESTRIP_ADJ = 13, + _1_CONTROL_POINT_PATCHLIST = 33, + _2_CONTROL_POINT_PATCHLIST = 34, + _3_CONTROL_POINT_PATCHLIST = 35, + _4_CONTROL_POINT_PATCHLIST = 36, + _5_CONTROL_POINT_PATCHLIST = 37, + _6_CONTROL_POINT_PATCHLIST = 38, + _7_CONTROL_POINT_PATCHLIST = 39, + _8_CONTROL_POINT_PATCHLIST = 40, + _9_CONTROL_POINT_PATCHLIST = 41, + _10_CONTROL_POINT_PATCHLIST = 42, + _11_CONTROL_POINT_PATCHLIST = 43, + _12_CONTROL_POINT_PATCHLIST = 44, + _13_CONTROL_POINT_PATCHLIST = 45, + _14_CONTROL_POINT_PATCHLIST = 46, + _15_CONTROL_POINT_PATCHLIST = 47, + _16_CONTROL_POINT_PATCHLIST = 48, + _17_CONTROL_POINT_PATCHLIST = 49, + _18_CONTROL_POINT_PATCHLIST = 50, + _19_CONTROL_POINT_PATCHLIST = 51, + _20_CONTROL_POINT_PATCHLIST = 52, + _21_CONTROL_POINT_PATCHLIST = 53, + _22_CONTROL_POINT_PATCHLIST = 54, + _23_CONTROL_POINT_PATCHLIST = 55, + _24_CONTROL_POINT_PATCHLIST = 56, + _25_CONTROL_POINT_PATCHLIST = 57, + _26_CONTROL_POINT_PATCHLIST = 58, + _27_CONTROL_POINT_PATCHLIST = 59, + _28_CONTROL_POINT_PATCHLIST = 60, + _29_CONTROL_POINT_PATCHLIST = 61, + _30_CONTROL_POINT_PATCHLIST = 62, + _31_CONTROL_POINT_PATCHLIST = 63, + _32_CONTROL_POINT_PATCHLIST = 64, +} + +PRIMITIVE :: enum i32 { + UNDEFINED = 0, + POINT = 1, + LINE = 2, + TRIANGLE = 3, + LINE_ADJ = 6, + TRIANGLE_ADJ = 7, + _1_CONTROL_POINT_PATCH = 8, + _2_CONTROL_POINT_PATCH = 9, + _3_CONTROL_POINT_PATCH = 10, + _4_CONTROL_POINT_PATCH = 11, + _5_CONTROL_POINT_PATCH = 12, + _6_CONTROL_POINT_PATCH = 13, + _7_CONTROL_POINT_PATCH = 14, + _8_CONTROL_POINT_PATCH = 15, + _9_CONTROL_POINT_PATCH = 16, + _10_CONTROL_POINT_PATCH = 17, + _11_CONTROL_POINT_PATCH = 18, + _12_CONTROL_POINT_PATCH = 19, + _13_CONTROL_POINT_PATCH = 20, + _14_CONTROL_POINT_PATCH = 21, + _15_CONTROL_POINT_PATCH = 22, + _16_CONTROL_POINT_PATCH = 23, + _17_CONTROL_POINT_PATCH = 24, + _18_CONTROL_POINT_PATCH = 25, + _19_CONTROL_POINT_PATCH = 26, + _20_CONTROL_POINT_PATCH = 27, + _21_CONTROL_POINT_PATCH = 28, + _22_CONTROL_POINT_PATCH = 29, + _23_CONTROL_POINT_PATCH = 30, + _24_CONTROL_POINT_PATCH = 31, + _25_CONTROL_POINT_PATCH = 32, + _26_CONTROL_POINT_PATCH = 33, + _27_CONTROL_POINT_PATCH = 34, + _28_CONTROL_POINT_PATCH = 35, + _29_CONTROL_POINT_PATCH = 36, + _30_CONTROL_POINT_PATCH = 37, + _31_CONTROL_POINT_PATCH = 38, + _32_CONTROL_POINT_PATCH = 39, +} + +SRV_DIMENSION :: enum i32 { + UNKNOWN = 0, + BUFFER = 1, + TEXTURE1D = 2, + TEXTURE1DARRAY = 3, + TEXTURE2D = 4, + TEXTURE2DARRAY = 5, + TEXTURE2DMS = 6, + TEXTURE2DMSARRAY = 7, + TEXTURE3D = 8, + TEXTURECUBE = 9, + TEXTURECUBEARRAY = 10, + BUFFEREX = 11, + RAYTRACING_ACCELERATION_STRUCTURE = 11, +} + +PFN_DESTRUCTION_CALLBACK :: #type proc "c" (a0: rawptr) + + +ID3DDestructionNotifier_UUID :: "a06eb39a-50da-425b-8c31-4eecd6c270f3" +ID3DDestructionNotifier :: struct #raw_union { + #subtype iunknown: IUnknown, + using id3ddestructionnotifier_vtable: ^ID3DDestructionNotifier_VTable, +} +ID3DDestructionNotifier_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + RegisterDestructionCallback: proc "stdcall" (this: ^ID3DDestructionNotifier, callbackFn: PFN_DESTRUCTION_CALLBACK, pData: rawptr, pCallbackID: ^u32) -> HRESULT, + UnregisterDestructionCallback: proc "stdcall" (this: ^ID3DDestructionNotifier, callbackID: u32) -> HRESULT, +} + +SHADER_VARIABLE_CLASS :: enum i32 { + SCALAR = 0, + VECTOR = 1, + MATRIX_ROWS = 2, + MATRIX_COLUMNS = 3, + OBJECT = 4, + STRUCT = 5, + INTERFACE_CLASS = 6, + INTERFACE_POINTER = 7, +} + +SHADER_VARIABLE_FLAGS :: enum u32 { // TODO: make bit_set + USERPACKED = 0x1, + USED = 0x2, + INTERFACE_POINTER = 0x4, + INTERFACE_PARAMETER = 0x8, +} + +SHADER_VARIABLE_TYPE :: enum i32 { + VOID = 0, + BOOL = 1, + INT = 2, + FLOAT = 3, + STRING = 4, + TEXTURE = 5, + TEXTURE1D = 6, + TEXTURE2D = 7, + TEXTURE3D = 8, + TEXTURECUBE = 9, + SAMPLER = 10, + SAMPLER1D = 11, + SAMPLER2D = 12, + SAMPLER3D = 13, + SAMPLERCUBE = 14, + PIXELSHADER = 15, + VERTEXSHADER = 16, + PIXELFRAGMENT = 17, + VERTEXFRAGMENT = 18, + UINT = 19, + UINT8 = 20, + GEOMETRYSHADER = 21, + RASTERIZER = 22, + DEPTHSTENCIL = 23, + BLEND = 24, + BUFFER = 25, + CBUFFER = 26, + TBUFFER = 27, + TEXTURE1DARRAY = 28, + TEXTURE2DARRAY = 29, + RENDERTARGETVIEW = 30, + DEPTHSTENCILVIEW = 31, + TEXTURE2DMS = 32, + TEXTURE2DMSARRAY = 33, + TEXTURECUBEARRAY = 34, + HULLSHADER = 35, + DOMAINSHADER = 36, + INTERFACE_POINTER = 37, + COMPUTESHADER = 38, + DOUBLE = 39, + RWTEXTURE1D = 40, + RWTEXTURE1DARRAY = 41, + RWTEXTURE2D = 42, + RWTEXTURE2DARRAY = 43, + RWTEXTURE3D = 44, + RWBUFFER = 45, + BYTEADDRESS_BUFFER = 46, + RWBYTEADDRESS_BUFFER = 47, + STRUCTURED_BUFFER = 48, + RWSTRUCTURED_BUFFER = 49, + APPEND_STRUCTURED_BUFFER = 50, + CONSUME_STRUCTURED_BUFFER = 51, + MIN8FLOAT = 52, + MIN10FLOAT = 53, + MIN16FLOAT = 54, + MIN12INT = 55, + MIN16INT = 56, + MIN16UINT = 57, +} + +SHADER_INPUT_FLAGS :: enum u32 { // TODO: make bit_set + USERPACKED = 0x1, + COMPARISON_SAMPLER = 0x2, + TEXTURE_COMPONENT_0 = 0x4, + TEXTURE_COMPONENT_1 = 0x8, + TEXTURE_COMPONENTS = 0xc, + UNUSED = 0x10, +} + +SHADER_INPUT_TYPE :: enum i32 { + CBUFFER = 0, + TBUFFER = 1, + TEXTURE = 2, + SAMPLER = 3, + UAV_RWTYPED = 4, + STRUCTURED = 5, + UAV_RWSTRUCTURED = 6, + BYTEADDRESS = 7, + UAV_RWBYTEADDRESS = 8, + UAV_APPEND_STRUCTURED = 9, + UAV_CONSUME_STRUCTURED = 10, + UAV_RWSTRUCTURED_WITH_COUNTER = 11, + RTACCELERATIONSTRUCTURE = 12, + UAV_FEEDBACKTEXTURE = 13, +} + +SHADER_CBUFFER_FLAGS :: enum u32 { // TODO: make bit_set + USERPACKED = 0x1, +} + +CBUFFER_TYPE :: enum i32 { + CBUFFER = 0, + TBUFFER = 1, + INTERFACE_POINTERS = 2, + RESOURCE_BIND_INFO = 3, +} + +NAME :: enum i32 { + UNDEFINED = 0, + POSITION = 1, + CLIP_DISTANCE = 2, + CULL_DISTANCE = 3, + RENDER_TARGET_ARRAY_INDEX = 4, + VIEWPORT_ARRAY_INDEX = 5, + VERTEX_ID = 6, + PRIMITIVE_ID = 7, + INSTANCE_ID = 8, + IS_FRONT_FACE = 9, + SAMPLE_INDEX = 10, + FINAL_QUAD_EDGE_TESSFACTOR = 11, + FINAL_QUAD_INSIDE_TESSFACTOR = 12, + FINAL_TRI_EDGE_TESSFACTOR = 13, + FINAL_TRI_INSIDE_TESSFACTOR = 14, + FINAL_LINE_DETAIL_TESSFACTOR = 15, + FINAL_LINE_DENSITY_TESSFACTOR = 16, + BARYCENTRICS = 23, + SHADINGRATE = 24, + CULLPRIMITIVE = 25, + TARGET = 64, + DEPTH = 65, + COVERAGE = 66, + DEPTH_GREATER_EQUAL = 67, + DEPTH_LESS_EQUAL = 68, + STENCIL_REF = 69, + INNER_COVERAGE = 70, +} + +RESOURCE_RETURN_TYPE :: enum i32 { + UNORM = 1, + SNORM = 2, + SINT = 3, + UINT = 4, + FLOAT = 5, + MIXED = 6, + DOUBLE = 7, + CONTINUED = 8, +} + +REGISTER_COMPONENT_TYPE :: enum i32 { + UNKNOWN = 0, + UINT32 = 1, + SINT32 = 2, + FLOAT32 = 3, +} + +TESSELLATOR_DOMAIN :: enum i32 { + UNDEFINED = 0, + ISOLINE = 1, + TRI = 2, + QUAD = 3, +} + +TESSELLATOR_PARTITIONING :: enum i32 { + UNDEFINED = 0, + INTEGER = 1, + POW2 = 2, + FRACTIONAL_ODD = 3, + FRACTIONAL_EVEN = 4, +} + +TESSELLATOR_OUTPUT_PRIMITIVE :: enum i32 { + UNDEFINED = 0, + POINT = 1, + LINE = 2, + TRIANGLE_CW = 3, + TRIANGLE_CCW = 4, +} + +MIN_PRECISION :: enum i32 { + DEFAULT = 0, + FLOAT_16 = 1, + FLOAT_2_8 = 2, + RESERVED = 3, + SINT_16 = 4, + UINT_16 = 5, + ANY_16 = 240, + ANY_10 = 241, +} + +INTERPOLATION_MODE :: enum i32 { + UNDEFINED = 0, + CONSTANT = 1, + LINEAR = 2, + LINEAR_CENTROID = 3, + LINEAR_NOPERSPECTIVE = 4, + LINEAR_NOPERSPECTIVE_CENTROID = 5, + LINEAR_SAMPLE = 6, + LINEAR_NOPERSPECTIVE_SAMPLE = 7, +} + +PARAMETER_FLAGS :: enum u32 { // TODO: make bit_set + NONE = 0x0, + IN = 0x1, + OUT = 0x2, +} + + +GPU_VIRTUAL_ADDRESS :: u64 + +COMMAND_LIST_TYPE :: enum i32 { + DIRECT = 0, + BUNDLE = 1, + COMPUTE = 2, + COPY = 3, + VIDEO_DECODE = 4, + VIDEO_PROCESS = 5, + VIDEO_ENCODE = 6, +} + +COMMAND_QUEUE_FLAGS :: enum u32 { // TODO: make bit_set + NONE = 0x0, + DISABLE_GPU_TIMEOUT = 0x1, +} + +COMMAND_QUEUE_PRIORITY :: enum i32 { + NORMAL = 0, + HIGH = 100, + GLOBAL_REALTIME = 10000, +} + +COMMAND_QUEUE_DESC :: struct { + Type: COMMAND_LIST_TYPE, + Priority: i32, + Flags: COMMAND_QUEUE_FLAGS, + NodeMask: u32, +} + +PRIMITIVE_TOPOLOGY_TYPE :: enum i32 { + UNDEFINED = 0, + POINT = 1, + LINE = 2, + TRIANGLE = 3, + PATCH = 4, +} + +INPUT_CLASSIFICATION :: enum i32 { + PER_VERTEX_DATA = 0, + PER_INSTANCE_DATA = 1, +} + +INPUT_ELEMENT_DESC :: struct { + SemanticName: cstring, + SemanticIndex: u32, + Format: dxgi.FORMAT, + InputSlot: u32, + AlignedByteOffset: u32, + InputSlotClass: INPUT_CLASSIFICATION, + InstanceDataStepRate: u32, +} + +FILL_MODE :: enum i32 { + WIREFRAME = 2, + SOLID = 3, +} + +CULL_MODE :: enum i32 { + NONE = 1, + FRONT = 2, + BACK = 3, +} + +SO_DECLARATION_ENTRY :: struct { + Stream: u32, + SemanticName: cstring, + SemanticIndex: u32, + StartComponent: u8, + ComponentCount: u8, + OutputSlot: u8, +} + +VIEWPORT :: struct { + TopLeftX: f32, + TopLeftY: f32, + Width: f32, + Height: f32, + MinDepth: f32, + MaxDepth: f32, +} + +BOX :: struct { + left: u32, + top: u32, + front: u32, + right: u32, + bottom: u32, + back: u32, +} + +COMPARISON_FUNC :: enum i32 { + NEVER = 1, + LESS = 2, + EQUAL = 3, + LESS_EQUAL = 4, + GREATER = 5, + NOT_EQUAL = 6, + GREATER_EQUAL = 7, + ALWAYS = 8, +} + +DEPTH_WRITE_MASK :: enum i32 { + ZERO = 0, + ALL = 1, +} + +STENCIL_OP :: enum i32 { + KEEP = 1, + ZERO = 2, + REPLACE = 3, + INCR_SAT = 4, + DECR_SAT = 5, + INVERT = 6, + INCR = 7, + DECR = 8, +} + +DEPTH_STENCILOP_DESC :: struct { + StencilFailOp: STENCIL_OP, + StencilDepthFailOp: STENCIL_OP, + StencilPassOp: STENCIL_OP, + StencilFunc: COMPARISON_FUNC, +} + +DEPTH_STENCIL_DESC :: struct { + DepthEnable: BOOL, + DepthWriteMask: DEPTH_WRITE_MASK, + DepthFunc: COMPARISON_FUNC, + StencilEnable: BOOL, + StencilReadMask: u8, + StencilWriteMask: u8, + FrontFace: DEPTH_STENCILOP_DESC, + BackFace: DEPTH_STENCILOP_DESC, +} + +DEPTH_STENCIL_DESC1 :: struct { + DepthEnable: BOOL, + DepthWriteMask: DEPTH_WRITE_MASK, + DepthFunc: COMPARISON_FUNC, + StencilEnable: BOOL, + StencilReadMask: u8, + StencilWriteMask: u8, + FrontFace: DEPTH_STENCILOP_DESC, + BackFace: DEPTH_STENCILOP_DESC, + DepthBoundsTestEnable: BOOL, +} + +BLEND :: enum i32 { + ZERO = 1, + ONE = 2, + SRC_COLOR = 3, + INV_SRC_COLOR = 4, + SRC_ALPHA = 5, + INV_SRC_ALPHA = 6, + DEST_ALPHA = 7, + INV_DEST_ALPHA = 8, + DEST_COLOR = 9, + INV_DEST_COLOR = 10, + SRC_ALPHA_SAT = 11, + BLEND_FACTOR = 14, + INV_BLEND_FACTOR = 15, + SRC1_COLOR = 16, + INV_SRC1_COLOR = 17, + SRC1_ALPHA = 18, + INV_SRC1_ALPHA = 19, +} + +BLEND_OP :: enum i32 { + ADD = 1, + SUBTRACT = 2, + REV_SUBTRACT = 3, + MIN = 4, + MAX = 5, +} + +COLOR_WRITE_ENABLE :: enum i32 { // TODO: make bit_set + RED = 1, + GREEN = 2, + BLUE = 4, + ALPHA = 8, + ALL = 15, +} + +LOGIC_OP :: enum i32 { + CLEAR = 0, + SET = 1, + COPY = 2, + COPY_INVERTED = 3, + NOOP = 4, + INVERT = 5, + AND = 6, + NAND = 7, + OR = 8, + NOR = 9, + XOR = 10, + EQUIV = 11, + AND_REVERSE = 12, + AND_INVERTED = 13, + OR_REVERSE = 14, + OR_INVERTED = 15, +} + +RENDER_TARGET_BLEND_DESC :: struct { + BlendEnable: BOOL, + LogicOpEnable: BOOL, + SrcBlend: BLEND, + DestBlend: BLEND, + BlendOp: BLEND_OP, + SrcBlendAlpha: BLEND, + DestBlendAlpha: BLEND, + BlendOpAlpha: BLEND_OP, + LogicOp: LOGIC_OP, + RenderTargetWriteMask: u8, +} + +BLEND_DESC :: struct { + AlphaToCoverageEnable: BOOL, + IndependentBlendEnable: BOOL, + RenderTarget: [8]RENDER_TARGET_BLEND_DESC, +} + +CONSERVATIVE_RASTERIZATION_MODE :: enum i32 { + OFF = 0, + ON = 1, +} + +RASTERIZER_DESC :: struct { + FillMode: FILL_MODE, + CullMode: CULL_MODE, + FrontCounterClockwise: BOOL, + DepthBias: i32, + DepthBiasClamp: f32, + SlopeScaledDepthBias: f32, + DepthClipEnable: BOOL, + MultisampleEnable: BOOL, + AntialiasedLineEnable: BOOL, + ForcedSampleCount: u32, + ConservativeRaster: CONSERVATIVE_RASTERIZATION_MODE, +} + + +IObject_UUID :: "c4fec28f-7966-4e95-9f94-f431cb56c3b8" +IObject :: struct #raw_union { + #subtype iunknown: IUnknown, + using id3d12object_vtable: ^IObject_VTable, +} +IObject_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + GetPrivateData: proc "stdcall" (this: ^IObject, guid: ^GUID, pDataSize: ^u32, pData: rawptr) -> HRESULT, + SetPrivateData: proc "stdcall" (this: ^IObject, guid: ^GUID, DataSize: u32, pData: rawptr) -> HRESULT, + SetPrivateDataInterface: proc "stdcall" (this: ^IObject, guid: ^GUID, pData: ^IUnknown) -> HRESULT, + SetName: proc "stdcall" (this: ^IObject, Name: [^]u16) -> HRESULT, +} + + +IDeviceChild_UUID :: "905db94b-a00c-4140-9df5-2b64ca9ea357" +IDeviceChild :: struct #raw_union { + #subtype id3d12object: IObject, + using id3d12devicechild_vtable: ^IDeviceChild_VTable, +} +IDeviceChild_VTable :: struct { + using id3d12object_vtable: IObject_VTable, + GetDevice: proc "stdcall" (this: ^IDeviceChild, riid: ^IID, ppvDevice: ^rawptr) -> HRESULT, +} + + +IRootSignature_UUID :: "c54a6b66-72df-4ee8-8be5-a946a1429214" +IRootSignature :: struct { + using id3d12devicechild: IDeviceChild, +} + +SHADER_BYTECODE :: struct { + pShaderBytecode: rawptr, + BytecodeLength: SIZE_T, +} + +STREAM_OUTPUT_DESC :: struct { + pSODeclaration: ^SO_DECLARATION_ENTRY, + NumEntries: u32, + pBufferStrides: ^u32, + NumStrides: u32, + RasterizedStream: u32, +} + +INPUT_LAYOUT_DESC :: struct { + pInputElementDescs: ^INPUT_ELEMENT_DESC, + NumElements: u32, +} + +INDEX_BUFFER_STRIP_CUT_VALUE :: enum i32 { + DISABLED = 0, + _0xFFFF = 1, + _0xFFFFFFFF = 2, +} + +CACHED_PIPELINE_STATE :: struct { + pCachedBlob: rawptr, + CachedBlobSizeInBytes: SIZE_T, +} + +PIPELINE_STATE_FLAGS :: enum u32 { // TODO: make bit_set + NONE = 0x0, + TOOL_DEBUG = 0x1, +} + +GRAPHICS_PIPELINE_STATE_DESC :: struct { + pRootSignature: ^IRootSignature, + VS: SHADER_BYTECODE, + PS: SHADER_BYTECODE, + DS: SHADER_BYTECODE, + HS: SHADER_BYTECODE, + GS: SHADER_BYTECODE, + StreamOutput: STREAM_OUTPUT_DESC, + BlendState: BLEND_DESC, + SampleMask: u32, + RasterizerState: RASTERIZER_DESC, + DepthStencilState: DEPTH_STENCIL_DESC, + InputLayout: INPUT_LAYOUT_DESC, + IBStripCutValue: INDEX_BUFFER_STRIP_CUT_VALUE, + PrimitiveTopologyType: PRIMITIVE_TOPOLOGY_TYPE, + NumRenderTargets: u32, + RTVFormats: [8]dxgi.FORMAT, + DSVFormat: dxgi.FORMAT, + SampleDesc: dxgi.SAMPLE_DESC, + NodeMask: u32, + CachedPSO: CACHED_PIPELINE_STATE, + Flags: PIPELINE_STATE_FLAGS, +} + +COMPUTE_PIPELINE_STATE_DESC :: struct { + pRootSignature: ^IRootSignature, + CS: SHADER_BYTECODE, + NodeMask: u32, + CachedPSO: CACHED_PIPELINE_STATE, + Flags: PIPELINE_STATE_FLAGS, +} + +RT_FORMAT_ARRAY :: struct { + RTFormats: [8]dxgi.FORMAT, + NumRenderTargets: u32, +} + +PIPELINE_STATE_STREAM_DESC :: struct { + SizeInBytes: SIZE_T, + pPipelineStateSubobjectStream: rawptr, +} + +PIPELINE_STATE_SUBOBJECT_TYPE :: enum i32 { + ROOT_SIGNATURE = 0, + VS = 1, + PS = 2, + DS = 3, + HS = 4, + GS = 5, + CS = 6, + STREAM_OUTPUT = 7, + BLEND = 8, + SAMPLE_MASK = 9, + RASTERIZER = 10, + DEPTH_STENCIL = 11, + INPUT_LAYOUT = 12, + IB_STRIP_CUT_VALUE = 13, + PRIMITIVE_TOPOLOGY = 14, + RENDER_TARGET_FORMATS = 15, + DEPTH_STENCIL_FORMAT = 16, + SAMPLE_DESC = 17, + NODE_MASK = 18, + CACHED_PSO = 19, + FLAGS = 20, + DEPTH_STENCIL1 = 21, + VIEW_INSTANCING = 22, + AS = 24, + MS = 25, + MAX_VALID = 26, +} + +FEATURE :: enum i32 { + OPTIONS = 0, + ARCHITECTURE = 1, + FEATURE_LEVELS = 2, + FORMAT_SUPPORT = 3, + MULTISAMPLE_QUALITY_LEVELS = 4, + FORMAT_INFO = 5, + GPU_VIRTUAL_ADDRESS_SUPPORT = 6, + SHADER_MODEL = 7, + OPTIONS1 = 8, + PROTECTED_RESOURCE_SESSION_SUPPORT = 10, + ROOT_SIGNATURE = 12, + ARCHITECTURE1 = 16, + OPTIONS2 = 18, + SHADER_CACHE = 19, + COMMAND_QUEUE_PRIORITY = 20, + OPTIONS3 = 21, + EXISTING_HEAPS = 22, + OPTIONS4 = 23, + SERIALIZATION = 24, + CROSS_NODE = 25, + OPTIONS5 = 27, + OPTIONS6 = 30, + QUERY_META_COMMAND = 31, + OPTIONS7 = 32, + PROTECTED_RESOURCE_SESSION_TYPE_COUNT = 33, + PROTECTED_RESOURCE_SESSION_TYPES = 34, +} + +SHADER_MIN_PRECISION_SUPPORT :: enum i32 { + NONE = 0, + _10_BIT = 1, + _16_BIT = 2, +} + +TILED_RESOURCES_TIER :: enum i32 { + NOT_SUPPORTED = 0, + _1 = 1, + _2 = 2, + _3 = 3, + _4 = 4, +} + +RESOURCE_BINDING_TIER :: enum i32 { + _1 = 1, + _2 = 2, + _3 = 3, +} + +CONSERVATIVE_RASTERIZATION_TIER :: enum i32 { + NOT_SUPPORTED = 0, + _1 = 1, + _2 = 2, + _3 = 3, +} + +FORMAT_SUPPORT1 :: enum i32 { // TODO: make bit_set + NONE = 0, + BUFFER = 1, + IA_VERTEX_BUFFER = 2, + IA_INDEX_BUFFER = 4, + SO_BUFFER = 8, + TEXTURE1D = 16, + TEXTURE2D = 32, + TEXTURE3D = 64, + TEXTURECUBE = 128, + SHADER_LOAD = 256, + SHADER_SAMPLE = 512, + SHADER_SAMPLE_COMPARISON = 1024, + SHADER_SAMPLE_MONO_TEXT = 2048, + MIP = 4096, + RENDER_TARGET = 16384, + BLENDABLE = 32768, + DEPTH_STENCIL = 65536, + MULTISAMPLE_RESOLVE = 262144, + DISPLAY = 524288, + CAST_WITHIN_BIT_LAYOUT = 1048576, + MULTISAMPLE_RENDERTARGET = 2097152, + MULTISAMPLE_LOAD = 4194304, + SHADER_GATHER = 8388608, + BACK_BUFFER_CAST = 16777216, + TYPED_UNORDERED_ACCESS_VIEW = 33554432, + SHADER_GATHER_COMPARISON = 67108864, + DECODER_OUTPUT = 134217728, + VIDEO_PROCESSOR_OUTPUT = 268435456, + VIDEO_PROCESSOR_INPUT = 536870912, + VIDEO_ENCODER = 1073741824, +} + +FORMAT_SUPPORT2 :: enum i32 { // TODO: make bit_set + NONE = 0, + UAV_ATOMIC_ADD = 1, + UAV_ATOMIC_BITWISE_OPS = 2, + UAV_ATOMIC_COMPARE_STORE_OR_COMPARE_EXCHANGE = 4, + UAV_ATOMIC_EXCHANGE = 8, + UAV_ATOMIC_SIGNED_MIN_OR_MAX = 16, + UAV_ATOMIC_UNSIGNED_MIN_OR_MAX = 32, + UAV_TYPED_LOAD = 64, + UAV_TYPED_STORE = 128, + OUTPUT_MERGER_LOGIC_OP = 256, + TILED = 512, + MULTIPLANE_OVERLAY = 16384, + SAMPLER_FEEDBACK = 32768, +} + +MULTISAMPLE_QUALITY_LEVEL_FLAGS :: enum u32 { // TODO: make bit_set + NONE = 0x0, + TILED_RESOURCE = 0x1, +} + +CROSS_NODE_SHARING_TIER :: enum i32 { + NOT_SUPPORTED = 0, + _1_EMULATED = 1, + _1 = 2, + _2 = 3, + _3 = 4, +} + +RESOURCE_HEAP_TIER :: enum i32 { + _1 = 1, + _2 = 2, +} + +PROGRAMMABLE_SAMPLE_POSITIONS_TIER :: enum i32 { + NOT_SUPPORTED = 0, + _1 = 1, + _2 = 2, +} + +VIEW_INSTANCING_TIER :: enum i32 { + NOT_SUPPORTED = 0, + _1 = 1, + _2 = 2, + _3 = 3, +} + +FEATURE_DATA_OPTIONS :: struct { + DoublePrecisionFloatShaderOps: BOOL, + OutputMergerLogicOp: BOOL, + MinPrecisionSupport: SHADER_MIN_PRECISION_SUPPORT, + TiledResourcesTier: TILED_RESOURCES_TIER, + ResourceBindingTier: RESOURCE_BINDING_TIER, + PSSpecifiedStencilRefSupported: BOOL, + TypedUAVLoadAdditionalFormats: BOOL, + ROVsSupported: BOOL, + ConservativeRasterizationTier: CONSERVATIVE_RASTERIZATION_TIER, + MaxGPUVirtualAddressBitsPerResource: u32, + StandardSwizzle64KBSupported: BOOL, + CrossNodeSharingTier: CROSS_NODE_SHARING_TIER, + CrossAdapterRowMajorTextureSupported: BOOL, + VPAndRTArrayIndexFromAnyShaderFeedingRasterizerSupportedWithoutGSEmulation: BOOL, + ResourceHeapTier: RESOURCE_HEAP_TIER, +} + +FEATURE_DATA_OPTIONS1 :: struct { + WaveOps: BOOL, + WaveLaneCountMin: u32, + WaveLaneCountMax: u32, + TotalLaneCount: u32, + ExpandedComputeResourceStates: BOOL, + Int64ShaderOps: BOOL, +} + +FEATURE_DATA_OPTIONS2 :: struct { + DepthBoundsTestSupported: BOOL, + ProgrammableSamplePositionsTier: PROGRAMMABLE_SAMPLE_POSITIONS_TIER, +} + +ROOT_SIGNATURE_VERSION :: enum i32 { + _1 = 1, + _1_0 = 1, + _1_1 = 2, +} + +FEATURE_DATA_ROOT_SIGNATURE :: struct { + HighestVersion: ROOT_SIGNATURE_VERSION, +} + +FEATURE_DATA_ARCHITECTURE :: struct { + NodeIndex: u32, + TileBasedRenderer: BOOL, + UMA: BOOL, + CacheCoherentUMA: BOOL, +} + +FEATURE_DATA_ARCHITECTURE1 :: struct { + NodeIndex: u32, + TileBasedRenderer: BOOL, + UMA: BOOL, + CacheCoherentUMA: BOOL, + IsolatedMMU: BOOL, +} + +FEATURE_DATA_FEATURE_LEVELS :: struct { + NumFeatureLevels: u32, + pFeatureLevelsRequested: ^FEATURE_LEVEL, + MaxSupportedFeatureLevel: FEATURE_LEVEL, +} + +SHADER_MODEL :: enum i32 { + _5_1 = 81, + _6_0 = 96, + _6_1 = 97, + _6_2 = 98, + _6_3 = 99, + _6_4 = 100, + _6_5 = 101, + _6_6 = 102, +} + +FEATURE_DATA_SHADER_MODEL :: struct { + HighestShaderModel: SHADER_MODEL, +} + +FEATURE_DATA_FORMAT_SUPPORT :: struct { + Format: dxgi.FORMAT, + Support1: FORMAT_SUPPORT1, + Support2: FORMAT_SUPPORT2, +} + +FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS :: struct { + Format: dxgi.FORMAT, + SampleCount: u32, + Flags: MULTISAMPLE_QUALITY_LEVEL_FLAGS, + NumQualityLevels: u32, +} + +FEATURE_DATA_FORMAT_INFO :: struct { + Format: dxgi.FORMAT, + PlaneCount: u8, +} + +FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT :: struct { + MaxGPUVirtualAddressBitsPerResource: u32, + MaxGPUVirtualAddressBitsPerProcess: u32, +} + +SHADER_CACHE_SUPPORT_FLAGS :: enum u32 { // TODO: make bit_set + NONE = 0x0, + SINGLE_PSO = 0x1, + LIBRARY = 0x2, + AUTOMATIC_INPROC_CACHE = 0x4, + AUTOMATIC_DISK_CACHE = 0x8, +} + +FEATURE_DATA_SHADER_CACHE :: struct { + SupportFlags: SHADER_CACHE_SUPPORT_FLAGS, +} + +FEATURE_DATA_COMMAND_QUEUE_PRIORITY :: struct { + CommandListType: COMMAND_LIST_TYPE, + Priority: u32, + PriorityForTypeIsSupported: BOOL, +} + +COMMAND_LIST_SUPPORT_FLAGS :: enum u32 { // TODO: make bit_set + NONE = 0x0, + DIRECT = 0x1, + BUNDLE = 0x2, + COMPUTE = 0x4, + COPY = 0x8, + VIDEO_DECODE = 0x10, + VIDEO_PROCESS = 0x20, + VIDEO_ENCODE = 0x40, +} + +FEATURE_DATA_OPTIONS3 :: struct { + CopyQueueTimestampQueriesSupported: BOOL, + CastingFullyTypedFormatSupported: BOOL, + WriteBufferImmediateSupportFlags: COMMAND_LIST_SUPPORT_FLAGS, + ViewInstancingTier: VIEW_INSTANCING_TIER, + BarycentricsSupported: BOOL, +} + +FEATURE_DATA_EXISTING_HEAPS :: struct { + Supported: BOOL, +} + +SHARED_RESOURCE_COMPATIBILITY_TIER :: enum i32 { + _0 = 0, + _1 = 1, + _2 = 2, +} + +FEATURE_DATA_OPTIONS4 :: struct { + MSAA64KBAlignedTextureSupported: BOOL, + SharedResourceCompatibilityTier: SHARED_RESOURCE_COMPATIBILITY_TIER, + Native16BitShaderOpsSupported: BOOL, +} + +HEAP_SERIALIZATION_TIER :: enum i32 { + _0 = 0, + _10 = 10, +} + +FEATURE_DATA_SERIALIZATION :: struct { + NodeIndex: u32, + HeapSerializationTier: HEAP_SERIALIZATION_TIER, +} + +FEATURE_DATA_CROSS_NODE :: struct { + SharingTier: CROSS_NODE_SHARING_TIER, + AtomicShaderInstructions: BOOL, +} + +RENDER_PASS_TIER :: enum i32 { + _0 = 0, + _1 = 1, + _2 = 2, +} + +RAYTRACING_TIER :: enum i32 { + NOT_SUPPORTED = 0, + _1_0 = 10, + _1_1 = 11, +} + +FEATURE_DATA_OPTIONS5 :: struct { + SRVOnlyTiledResourceTier3: BOOL, + RenderPassesTier: RENDER_PASS_TIER, + RaytracingTier: RAYTRACING_TIER, +} + +VARIABLE_SHADING_RATE_TIER :: enum i32 { + NOT_SUPPORTED = 0, + _1 = 1, + _2 = 2, +} + +FEATURE_DATA_OPTIONS6 :: struct { + AdditionalShadingRatesSupported: BOOL, + PerPrimitiveShadingRateSupportedWithViewportIndexing: BOOL, + VariableShadingRateTier: VARIABLE_SHADING_RATE_TIER, + ShadingRateImageTileSize: u32, + BackgroundProcessingSupported: BOOL, +} + +MESH_SHADER_TIER :: enum i32 { + NOT_SUPPORTED = 0, + _1 = 10, +} + +SAMPLER_FEEDBACK_TIER :: enum i32 { + NOT_SUPPORTED = 0, + _0_9 = 90, + _1_0 = 100, +} + +FEATURE_DATA_OPTIONS7 :: struct { + MeshShaderTier: MESH_SHADER_TIER, + SamplerFeedbackTier: SAMPLER_FEEDBACK_TIER, +} + +FEATURE_DATA_QUERY_META_COMMAND :: struct { + CommandId: GUID, + NodeMask: u32, + pQueryInputData: rawptr, + QueryInputDataSizeInBytes: SIZE_T, + pQueryOutputData: rawptr, + QueryOutputDataSizeInBytes: SIZE_T, +} + +RESOURCE_ALLOCATION_INFO :: struct { + SizeInBytes: u64, + Alignment: u64, +} + +RESOURCE_ALLOCATION_INFO1 :: struct { + Offset: u64, + Alignment: u64, + SizeInBytes: u64, +} + +HEAP_TYPE :: enum i32 { + DEFAULT = 1, + UPLOAD = 2, + READBACK = 3, + CUSTOM = 4, +} + +CPU_PAGE_PROPERTY :: enum i32 { + UNKNOWN = 0, + NOT_AVAILABLE = 1, + WRITE_COMBINE = 2, + WRITE_BACK = 3, +} + +MEMORY_POOL :: enum i32 { + UNKNOWN = 0, + L0 = 1, + L1 = 2, +} + +HEAP_PROPERTIES :: struct { + Type: HEAP_TYPE, + CPUPageProperty: CPU_PAGE_PROPERTY, + MemoryPoolPreference: MEMORY_POOL, + CreationNodeMask: u32, + VisibleNodeMask: u32, +} + +HEAP_FLAGS :: enum u32 { // TODO: make bit_set ??? + NONE = 0x0, + SHARED = 0x1, + DENY_BUFFERS = 0x4, + ALLOW_DISPLAY = 0x8, + SHARED_CROSS_ADAPTER = 0x20, + DENY_RT_DS_TEXTURES = 0x40, + DENY_NON_RT_DS_TEXTURES = 0x80, + HARDWARE_PROTECTED = 0x100, + ALLOW_WRITE_WATCH = 0x200, + ALLOW_SHADER_ATOMICS = 0x400, + CREATE_NOT_RESIDENT = 0x800, + CREATE_NOT_ZEROED = 0x1000, + ALLOW_ALL_BUFFERS_AND_TEXTURES = 0x0, + ALLOW_ONLY_BUFFERS = 0xc0, + ALLOW_ONLY_NON_RT_DS_TEXTURES = 0x44, + ALLOW_ONLY_RT_DS_TEXTURES = 0x84, +} + +HEAP_DESC :: struct { + SizeInBytes: u64, + Properties: HEAP_PROPERTIES, + Alignment: u64, + Flags: HEAP_FLAGS, +} + +RESOURCE_DIMENSION :: enum i32 { + UNKNOWN = 0, + BUFFER = 1, + TEXTURE1D = 2, + TEXTURE2D = 3, + TEXTURE3D = 4, +} + +TEXTURE_LAYOUT :: enum i32 { + UNKNOWN = 0, + ROW_MAJOR = 1, + _64KB_UNDEFINED_SWIZZLE = 2, + _64KB_STANDARD_SWIZZLE = 3, +} + +RESOURCE_FLAGS :: enum u32 { // TODO: make bit_set + NONE = 0x0, + ALLOW_RENDER_TARGET = 0x1, + ALLOW_DEPTH_STENCIL = 0x2, + ALLOW_UNORDERED_ACCESS = 0x4, + DENY_SHADER_RESOURCE = 0x8, + ALLOW_CROSS_ADAPTER = 0x10, + ALLOW_SIMULTANEOUS_ACCESS = 0x20, + VIDEO_DECODE_REFERENCE_ONLY = 0x40, +} + +MIP_REGION :: struct { + Width: u32, + Height: u32, + Depth: u32, +} + +RESOURCE_DESC :: struct { + Dimension: RESOURCE_DIMENSION, + Alignment: u64, + Width: u64, + Height: u32, + DepthOrArraySize: u16, + MipLevels: u16, + Format: dxgi.FORMAT, + SampleDesc: dxgi.SAMPLE_DESC, + Layout: TEXTURE_LAYOUT, + Flags: RESOURCE_FLAGS, +} + +RESOURCE_DESC1 :: struct { + Dimension: RESOURCE_DIMENSION, + Alignment: u64, + Width: u64, + Height: u32, + DepthOrArraySize: u16, + MipLevels: u16, + Format: dxgi.FORMAT, + SampleDesc: dxgi.SAMPLE_DESC, + Layout: TEXTURE_LAYOUT, + Flags: RESOURCE_FLAGS, + SamplerFeedbackMipRegion: MIP_REGION, +} + +DEPTH_STENCIL_VALUE :: struct { + Depth: f32, + Stencil: u8, +} + +CLEAR_VALUE :: struct { + Format: dxgi.FORMAT, + using _: struct #raw_union { + Color: [4]f32, + DepthStencil: DEPTH_STENCIL_VALUE, + }, +} + +RANGE :: struct { + Begin: SIZE_T, + End: SIZE_T, +} + +RANGE_UINT64 :: struct { + Begin: u64, + End: u64, +} + +SUBRESOURCE_RANGE_UINT64 :: struct { + Subresource: u32, + Range: RANGE_UINT64, +} + +SUBRESOURCE_INFO :: struct { + Offset: u64, + RowPitch: u32, + DepthPitch: u32, +} + +TILED_RESOURCE_COORDINATE :: struct { + X: u32, + Y: u32, + Z: u32, + Subresource: u32, +} + +TILE_REGION_SIZE :: struct { + NumTiles: u32, + UseBox: BOOL, + Width: u32, + Height: u16, + Depth: u16, +} + +TILE_RANGE_FLAGS :: enum u32 { // TODO: make bit_set + NONE = 0x0, + NULL = 0x1, + SKIP = 0x2, + REUSE_SINGLE_TILE = 0x4, +} + +SUBRESOURCE_TILING :: struct { + WidthInTiles: u32, + HeightInTiles: u16, + DepthInTiles: u16, + StartTileIndexInOverallResource: u32, +} + +TILE_SHAPE :: struct { + WidthInTexels: u32, + HeightInTexels: u32, + DepthInTexels: u32, +} + +PACKED_MIP_INFO :: struct { + NumStandardMips: u8, + NumPackedMips: u8, + NumTilesForPackedMips: u32, + StartTileIndexInOverallResource: u32, +} + +TILE_MAPPING_FLAGS :: enum u32 { // TODO: make bit_set + NONE = 0x0, + NO_HAZARD = 0x1, +} + +TILE_COPY_FLAGS :: enum u32 { // TODO: make bit_set + NONE = 0x0, + NO_HAZARD = 0x1, + LINEAR_BUFFER_TO_SWIZZLED_TILED_RESOURCE = 0x2, + SWIZZLED_TILED_RESOURCE_TO_LINEAR_BUFFER = 0x4, +} + +RESOURCE_STATES :: enum i32 { // TODO: make bit_set + COMMON = 0, + VERTEX_AND_CONSTANT_BUFFER = 1, + INDEX_BUFFER = 2, + RENDER_TARGET = 4, + UNORDERED_ACCESS = 8, + DEPTH_WRITE = 16, + DEPTH_READ = 32, + NON_PIXEL_SHADER_RESOURCE = 64, + PIXEL_SHADER_RESOURCE = 128, + STREAM_OUT = 256, + INDIRECT_ARGUMENT = 512, + COPY_DEST = 1024, + COPY_SOURCE = 2048, + RESOLVE_DEST = 4096, + RESOLVE_SOURCE = 8192, + RAYTRACING_ACCELERATION_STRUCTURE = 4194304, + SHADING_RATE_SOURCE = 16777216, + GENERIC_READ = 2755, + PRESENT = 0, + PREDICATION = 512, + VIDEO_DECODE_READ = 65536, + VIDEO_DECODE_WRITE = 131072, + VIDEO_PROCESS_READ = 262144, + VIDEO_PROCESS_WRITE = 524288, + VIDEO_ENCODE_READ = 2097152, + VIDEO_ENCODE_WRITE = 8388608, +} + +RESOURCE_BARRIER_TYPE :: enum i32 { + TRANSITION = 0, + ALIASING = 1, + UAV = 2, +} + +RESOURCE_TRANSITION_BARRIER :: struct { + pResource: ^IResource, + Subresource: u32, + StateBefore: RESOURCE_STATES, + StateAfter: RESOURCE_STATES, +} + +RESOURCE_ALIASING_BARRIER :: struct { + pResourceBefore: ^IResource, + pResourceAfter: ^IResource, +} + +RESOURCE_UAV_BARRIER :: struct { + pResource: ^IResource, +} + +RESOURCE_BARRIER_FLAGS :: enum u32 { // TODO: make bit_set + NONE = 0x0, + BEGIN_ONLY = 0x1, + END_ONLY = 0x2, +} + +RESOURCE_BARRIER :: struct { + Type: RESOURCE_BARRIER_TYPE, + Flags: RESOURCE_BARRIER_FLAGS, + using _: struct #raw_union { + Transition: RESOURCE_TRANSITION_BARRIER, + Aliasing: RESOURCE_ALIASING_BARRIER, + UAV: RESOURCE_UAV_BARRIER, + }, +} + +SUBRESOURCE_FOOTPRINT :: struct { + Format: dxgi.FORMAT, + Width: u32, + Height: u32, + Depth: u32, + RowPitch: u32, +} + +PLACED_SUBRESOURCE_FOOTPRINT :: struct { + Offset: u64, + Footprint: SUBRESOURCE_FOOTPRINT, +} + +TEXTURE_COPY_TYPE :: enum i32 { + SUBRESOURCE_INDEX = 0, + PLACED_FOOTPRINT = 1, +} + +TEXTURE_COPY_LOCATION :: struct { + pResource: ^IResource, + Type: TEXTURE_COPY_TYPE, +} + +RESOLVE_MODE :: enum i32 { + DECOMPRESS = 0, + MIN = 1, + MAX = 2, + AVERAGE = 3, + ENCODE_SAMPLER_FEEDBACK = 4, + DECODE_SAMPLER_FEEDBACK = 5, +} + +SAMPLE_POSITION :: struct { + X: i8, + Y: i8, +} + +VIEW_INSTANCE_LOCATION :: struct { + ViewportArrayIndex: u32, + RenderTargetArrayIndex: u32, +} + +VIEW_INSTANCING_FLAGS :: enum u32 { // TODO: make bit_set + NONE = 0x0, + ENABLE_VIEW_INSTANCE_MASKING = 0x1, +} + +VIEW_INSTANCING_DESC :: struct { + ViewInstanceCount: u32, + pViewInstanceLocations: ^VIEW_INSTANCE_LOCATION, + Flags: VIEW_INSTANCING_FLAGS, +} + +SHADER_COMPONENT_MAPPING :: enum i32 { + FROM_MEMORY_COMPONENT_0 = 0, + FROM_MEMORY_COMPONENT_1 = 1, + FROM_MEMORY_COMPONENT_2 = 2, + FROM_MEMORY_COMPONENT_3 = 3, + FORCE_VALUE_0 = 4, + FORCE_VALUE_1 = 5, +} + +BUFFER_SRV_FLAGS :: enum u32 { // TODO: make bit_set + NONE = 0x0, + RAW = 0x1, +} + +BUFFER_SRV :: struct { + FirstElement: u64, + NumElements: u32, + StructureByteStride: u32, + Flags: BUFFER_SRV_FLAGS, +} + +TEX1D_SRV :: struct { + MostDetailedMip: u32, + MipLevels: u32, + ResourceMinLODClamp: f32, +} + +TEX1D_ARRAY_SRV :: struct { + MostDetailedMip: u32, + MipLevels: u32, + FirstArraySlice: u32, + ArraySize: u32, + ResourceMinLODClamp: f32, +} + +TEX2D_SRV :: struct { + MostDetailedMip: u32, + MipLevels: u32, + PlaneSlice: u32, + ResourceMinLODClamp: f32, +} + +TEX2D_ARRAY_SRV :: struct { + MostDetailedMip: u32, + MipLevels: u32, + FirstArraySlice: u32, + ArraySize: u32, + PlaneSlice: u32, + ResourceMinLODClamp: f32, +} + +TEX3D_SRV :: struct { + MostDetailedMip: u32, + MipLevels: u32, + ResourceMinLODClamp: f32, +} + +TEXCUBE_SRV :: struct { + MostDetailedMip: u32, + MipLevels: u32, + ResourceMinLODClamp: f32, +} + +TEXCUBE_ARRAY_SRV :: struct { + MostDetailedMip: u32, + MipLevels: u32, + First2DArrayFace: u32, + NumCubes: u32, + ResourceMinLODClamp: f32, +} + +TEX2DMS_SRV :: struct { + UnusedField_NothingToDefine: u32, +} + +TEX2DMS_ARRAY_SRV :: struct { + FirstArraySlice: u32, + ArraySize: u32, +} + +RAYTRACING_ACCELERATION_STRUCTURE_SRV :: struct { + Location: GPU_VIRTUAL_ADDRESS, +} + +SHADER_RESOURCE_VIEW_DESC :: struct { + Format: dxgi.FORMAT, + ViewDimension: SRV_DIMENSION, + Shader4ComponentMapping: u32, + using _: struct #raw_union { + Buffer: BUFFER_SRV, + Texture1D: TEX1D_SRV, + Texture1DArray: TEX1D_ARRAY_SRV, + Texture2D: TEX2D_SRV, + Texture2DArray: TEX2D_ARRAY_SRV, + Texture2DMS: TEX2DMS_SRV, + Texture2DMSArray: TEX2DMS_ARRAY_SRV, + Texture3D: TEX3D_SRV, + TextureCube: TEXCUBE_SRV, + TextureCubeArray: TEXCUBE_ARRAY_SRV, + RaytracingAccelerationStructure: RAYTRACING_ACCELERATION_STRUCTURE_SRV, + }, +} + +CONSTANT_BUFFER_VIEW_DESC :: struct { + BufferLocation: GPU_VIRTUAL_ADDRESS, + SizeInBytes: u32, +} + +FILTER :: enum i32 { + MIN_MAG_MIP_POINT = 0, + MIN_MAG_POINT_MIP_LINEAR = 1, + MIN_POINT_MAG_LINEAR_MIP_POINT = 4, + MIN_POINT_MAG_MIP_LINEAR = 5, + MIN_LINEAR_MAG_MIP_POINT = 16, + MIN_LINEAR_MAG_POINT_MIP_LINEAR = 17, + MIN_MAG_LINEAR_MIP_POINT = 20, + MIN_MAG_MIP_LINEAR = 21, + ANISOTROPIC = 85, + COMPARISON_MIN_MAG_MIP_POINT = 128, + COMPARISON_MIN_MAG_POINT_MIP_LINEAR = 129, + COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT = 132, + COMPARISON_MIN_POINT_MAG_MIP_LINEAR = 133, + COMPARISON_MIN_LINEAR_MAG_MIP_POINT = 144, + COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 145, + COMPARISON_MIN_MAG_LINEAR_MIP_POINT = 148, + COMPARISON_MIN_MAG_MIP_LINEAR = 149, + COMPARISON_ANISOTROPIC = 213, + MINIMUM_MIN_MAG_MIP_POINT = 256, + MINIMUM_MIN_MAG_POINT_MIP_LINEAR = 257, + MINIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT = 260, + MINIMUM_MIN_POINT_MAG_MIP_LINEAR = 261, + MINIMUM_MIN_LINEAR_MAG_MIP_POINT = 272, + MINIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 273, + MINIMUM_MIN_MAG_LINEAR_MIP_POINT = 276, + MINIMUM_MIN_MAG_MIP_LINEAR = 277, + MINIMUM_ANISOTROPIC = 341, + MAXIMUM_MIN_MAG_MIP_POINT = 384, + MAXIMUM_MIN_MAG_POINT_MIP_LINEAR = 385, + MAXIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT = 388, + MAXIMUM_MIN_POINT_MAG_MIP_LINEAR = 389, + MAXIMUM_MIN_LINEAR_MAG_MIP_POINT = 400, + MAXIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 401, + MAXIMUM_MIN_MAG_LINEAR_MIP_POINT = 404, + MAXIMUM_MIN_MAG_MIP_LINEAR = 405, + MAXIMUM_ANISOTROPIC = 469, +} + +FILTER_TYPE :: enum i32 { + POINT = 0, + LINEAR = 1, +} + +FILTER_REDUCTION_TYPE :: enum i32 { + STANDARD = 0, + COMPARISON = 1, + MINIMUM = 2, + MAXIMUM = 3, +} + +TEXTURE_ADDRESS_MODE :: enum i32 { + WRAP = 1, + MIRROR = 2, + CLAMP = 3, + BORDER = 4, + MIRROR_ONCE = 5, +} + +SAMPLER_DESC :: struct { + Filter: FILTER, + AddressU: TEXTURE_ADDRESS_MODE, + AddressV: TEXTURE_ADDRESS_MODE, + AddressW: TEXTURE_ADDRESS_MODE, + MipLODBias: f32, + MaxAnisotropy: u32, + ComparisonFunc: COMPARISON_FUNC, + BorderColor: [4]f32, + MinLOD: f32, + MaxLOD: f32, +} + +BUFFER_UAV_FLAGS :: enum u32 { // TODO: make bit_set + NONE = 0x0, + RAW = 0x1, +} + +BUFFER_UAV :: struct { + FirstElement: u64, + NumElements: u32, + StructureByteStride: u32, + CounterOffsetInBytes: u64, + Flags: BUFFER_UAV_FLAGS, +} + +TEX1D_UAV :: struct { + MipSlice: u32, +} + +TEX1D_ARRAY_UAV :: struct { + MipSlice: u32, + FirstArraySlice: u32, + ArraySize: u32, +} + +TEX2D_UAV :: struct { + MipSlice: u32, + PlaneSlice: u32, +} + +TEX2D_ARRAY_UAV :: struct { + MipSlice: u32, + FirstArraySlice: u32, + ArraySize: u32, + PlaneSlice: u32, +} + +TEX3D_UAV :: struct { + MipSlice: u32, + FirstWSlice: u32, + WSize: u32, +} + +UAV_DIMENSION :: enum i32 { + UNKNOWN = 0, + BUFFER = 1, + TEXTURE1D = 2, + TEXTURE1DARRAY = 3, + TEXTURE2D = 4, + TEXTURE2DARRAY = 5, + TEXTURE3D = 8, +} + +UNORDERED_ACCESS_VIEW_DESC :: struct { + Format: dxgi.FORMAT, + ViewDimension: UAV_DIMENSION, + using _: struct #raw_union { + Buffer: BUFFER_UAV, + Texture1D: TEX1D_UAV, + Texture1DArray: TEX1D_ARRAY_UAV, + Texture2D: TEX2D_UAV, + Texture2DArray: TEX2D_ARRAY_UAV, + Texture3D: TEX3D_UAV, + }, +} + +BUFFER_RTV :: struct { + FirstElement: u64, + NumElements: u32, +} + +TEX1D_RTV :: struct { + MipSlice: u32, +} + +TEX1D_ARRAY_RTV :: struct { + MipSlice: u32, + FirstArraySlice: u32, + ArraySize: u32, +} + +TEX2D_RTV :: struct { + MipSlice: u32, + PlaneSlice: u32, +} + +TEX2DMS_RTV :: struct { + UnusedField_NothingToDefine: u32, +} + +TEX2D_ARRAY_RTV :: struct { + MipSlice: u32, + FirstArraySlice: u32, + ArraySize: u32, + PlaneSlice: u32, +} + +TEX2DMS_ARRAY_RTV :: struct { + FirstArraySlice: u32, + ArraySize: u32, +} + +TEX3D_RTV :: struct { + MipSlice: u32, + FirstWSlice: u32, + WSize: u32, +} + +RTV_DIMENSION :: enum i32 { + UNKNOWN = 0, + BUFFER = 1, + TEXTURE1D = 2, + TEXTURE1DARRAY = 3, + TEXTURE2D = 4, + TEXTURE2DARRAY = 5, + TEXTURE2DMS = 6, + TEXTURE2DMSARRAY = 7, + TEXTURE3D = 8, +} + +RENDER_TARGET_VIEW_DESC :: struct { + Format: dxgi.FORMAT, + ViewDimension: RTV_DIMENSION, + using _: struct #raw_union { + Buffer: BUFFER_RTV, + Texture1D: TEX1D_RTV, + Texture1DArray: TEX1D_ARRAY_RTV, + Texture2D: TEX2D_RTV, + Texture2DArray: TEX2D_ARRAY_RTV, + Texture2DMS: TEX2DMS_RTV, + Texture2DMSArray: TEX2DMS_ARRAY_RTV, + Texture3D: TEX3D_RTV, + }, +} + +TEX1D_DSV :: struct { + MipSlice: u32, +} + +TEX1D_ARRAY_DSV :: struct { + MipSlice: u32, + FirstArraySlice: u32, + ArraySize: u32, +} + +TEX2D_DSV :: struct { + MipSlice: u32, +} + +TEX2D_ARRAY_DSV :: struct { + MipSlice: u32, + FirstArraySlice: u32, + ArraySize: u32, +} + +TEX2DMS_DSV :: struct { + UnusedField_NothingToDefine: u32, +} + +TEX2DMS_ARRAY_DSV :: struct { + FirstArraySlice: u32, + ArraySize: u32, +} + +DSV_FLAGS :: enum u32 { // TODO: make bit_set + NONE = 0x0, + READ_ONLY_DEPTH = 0x1, + READ_ONLY_STENCIL = 0x2, +} + +DSV_DIMENSION :: enum i32 { + UNKNOWN = 0, + TEXTURE1D = 1, + TEXTURE1DARRAY = 2, + TEXTURE2D = 3, + TEXTURE2DARRAY = 4, + TEXTURE2DMS = 5, + TEXTURE2DMSARRAY = 6, +} + +DEPTH_STENCIL_VIEW_DESC :: struct { + Format: dxgi.FORMAT, + ViewDimension: DSV_DIMENSION, + Flags: DSV_FLAGS, + using _: struct #raw_union { + Texture1D: TEX1D_DSV, + Texture1DArray: TEX1D_ARRAY_DSV, + Texture2D: TEX2D_DSV, + Texture2DArray: TEX2D_ARRAY_DSV, + Texture2DMS: TEX2DMS_DSV, + Texture2DMSArray: TEX2DMS_ARRAY_DSV, + }, +} + +CLEAR_FLAGS :: enum u32 { // TODO: make bit_set + DEPTH = 0x1, + STENCIL = 0x2, +} + +FENCE_FLAGS :: enum u32 { // TODO: make bit_set + NONE = 0x0, + SHARED = 0x1, + SHARED_CROSS_ADAPTER = 0x2, + NON_MONITORED = 0x4, +} + +DESCRIPTOR_HEAP_TYPE :: enum i32 { + CBV_SRV_UAV = 0, + SAMPLER = 1, + RTV = 2, + DSV = 3, + NUM_TYPES = 4, +} + +DESCRIPTOR_HEAP_FLAGS :: enum u32 { // TODO: make bit_set + NONE = 0x0, + SHADER_VISIBLE = 0x1, +} + +DESCRIPTOR_HEAP_DESC :: struct { + Type: DESCRIPTOR_HEAP_TYPE, + NumDescriptors: u32, + Flags: DESCRIPTOR_HEAP_FLAGS, + NodeMask: u32, +} + +DESCRIPTOR_RANGE_TYPE :: enum i32 { + SRV = 0, + UAV = 1, + CBV = 2, + SAMPLER = 3, +} + +DESCRIPTOR_RANGE :: struct { + RangeType: DESCRIPTOR_RANGE_TYPE, + NumDescriptors: u32, + BaseShaderRegister: u32, + RegisterSpace: u32, + OffsetInDescriptorsFromTableStart: u32, +} + +ROOT_DESCRIPTOR_TABLE :: struct { + NumDescriptorRanges: u32, + pDescriptorRanges: ^DESCRIPTOR_RANGE, +} + +ROOT_CONSTANTS :: struct { + ShaderRegister: u32, + RegisterSpace: u32, + Num32BitValues: u32, +} + +ROOT_DESCRIPTOR :: struct { + ShaderRegister: u32, + RegisterSpace: u32, +} + +SHADER_VISIBILITY :: enum i32 { + ALL = 0, + VERTEX = 1, + HULL = 2, + DOMAIN = 3, + GEOMETRY = 4, + PIXEL = 5, + AMPLIFICATION = 6, + MESH = 7, +} + +ROOT_PARAMETER_TYPE :: enum i32 { + DESCRIPTOR_TABLE = 0, + _32BIT_CONSTANTS = 1, + CBV = 2, + SRV = 3, + UAV = 4, +} + +ROOT_PARAMETER :: struct { + ParameterType: ROOT_PARAMETER_TYPE, + using _: struct #raw_union { + DescriptorTable: ROOT_DESCRIPTOR_TABLE, + Constants: ROOT_CONSTANTS, + Descriptor: ROOT_DESCRIPTOR, + }, + ShaderVisibility: SHADER_VISIBILITY, +} + +ROOT_SIGNATURE_FLAGS :: enum u32 { // TODO: make bit_set + NONE = 0x0, + ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT = 0x1, + DENY_VERTEX_SHADER_ROOT_ACCESS = 0x2, + DENY_HULL_SHADER_ROOT_ACCESS = 0x4, + DENY_DOMAIN_SHADER_ROOT_ACCESS = 0x8, + DENY_GEOMETRY_SHADER_ROOT_ACCESS = 0x10, + DENY_PIXEL_SHADER_ROOT_ACCESS = 0x20, + ALLOW_STREAM_OUTPUT = 0x40, + LOCAL_ROOT_SIGNATURE = 0x80, + DENY_AMPLIFICATION_SHADER_ROOT_ACCESS = 0x100, + DENY_MESH_SHADER_ROOT_ACCESS = 0x200, +} + +STATIC_BORDER_COLOR :: enum i32 { + TRANSPARENT_BLACK = 0, + OPAQUE_BLACK = 1, + OPAQUE_WHITE = 2, +} + +STATIC_SAMPLER_DESC :: struct { + Filter: FILTER, + AddressU: TEXTURE_ADDRESS_MODE, + AddressV: TEXTURE_ADDRESS_MODE, + AddressW: TEXTURE_ADDRESS_MODE, + MipLODBias: f32, + MaxAnisotropy: u32, + ComparisonFunc: COMPARISON_FUNC, + BorderColor: STATIC_BORDER_COLOR, + MinLOD: f32, + MaxLOD: f32, + ShaderRegister: u32, + RegisterSpace: u32, + ShaderVisibility: SHADER_VISIBILITY, +} + +ROOT_SIGNATURE_DESC :: struct { + NumParameters: u32, + pParameters: ^ROOT_PARAMETER, + NumStaticSamplers: u32, + pStaticSamplers: ^STATIC_SAMPLER_DESC, + Flags: ROOT_SIGNATURE_FLAGS, +} + +DESCRIPTOR_RANGE_FLAGS :: enum u32 { // TODO: make bit_set + NONE = 0x0, + DESCRIPTORS_VOLATILE = 0x1, + DATA_VOLATILE = 0x2, + DATA_STATIC_WHILE_SET_AT_EXECUTE = 0x4, + DATA_STATIC = 0x8, + DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS = 0x10000, +} + +DESCRIPTOR_RANGE1 :: struct { + RangeType: DESCRIPTOR_RANGE_TYPE, + NumDescriptors: u32, + BaseShaderRegister: u32, + RegisterSpace: u32, + Flags: DESCRIPTOR_RANGE_FLAGS, + OffsetInDescriptorsFromTableStart: u32, +} + +ROOT_DESCRIPTOR_TABLE1 :: struct { + NumDescriptorRanges: u32, + pDescriptorRanges: ^DESCRIPTOR_RANGE1, +} + +ROOT_DESCRIPTOR_FLAGS :: enum u32 { // TODO: make bit_set + NONE = 0x0, + DATA_VOLATILE = 0x2, + DATA_STATIC_WHILE_SET_AT_EXECUTE = 0x4, + DATA_STATIC = 0x8, +} + +ROOT_DESCRIPTOR1 :: struct { + ShaderRegister: u32, + RegisterSpace: u32, + Flags: ROOT_DESCRIPTOR_FLAGS, +} + +ROOT_PARAMETER1 :: struct { + ParameterType: ROOT_PARAMETER_TYPE, + using _: struct #raw_union { + DescriptorTable: ROOT_DESCRIPTOR_TABLE1, + Constants: ROOT_CONSTANTS, + Descriptor: ROOT_DESCRIPTOR1, + }, + ShaderVisibility: SHADER_VISIBILITY, +} + +ROOT_SIGNATURE_DESC1 :: struct { + NumParameters: u32, + pParameters: ^ROOT_PARAMETER1, + NumStaticSamplers: u32, + pStaticSamplers: ^STATIC_SAMPLER_DESC, + Flags: ROOT_SIGNATURE_FLAGS, +} + +VERSIONED_ROOT_SIGNATURE_DESC :: struct { + Version: ROOT_SIGNATURE_VERSION, + using _: struct #raw_union { + Desc_1_0: ROOT_SIGNATURE_DESC, + Desc_1_1: ROOT_SIGNATURE_DESC1, + }, +} + + +IRootSignatureDeserializer_UUID :: "34AB647B-3CC8-46AC-841B-C0965645C046" +IRootSignatureDeserializer :: struct #raw_union { + #subtype iunknown: IUnknown, + using id3d12rootsignaturedeserializer_vtable: ^IRootSignatureDeserializer_VTable, +} +IRootSignatureDeserializer_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + GetRootSignatureDesc: proc "stdcall" (this: ^IRootSignatureDeserializer) -> ^ROOT_SIGNATURE_DESC, +} + + +IVersionedRootSignatureDeserializer_UUID :: "7F91CE67-090C-4BB7-B78E-ED8FF2E31DA0" +IVersionedRootSignatureDeserializer :: struct #raw_union { + #subtype iunknown: IUnknown, + using id3d12versionedrootsignaturedeserializer_vtable: ^IVersionedRootSignatureDeserializer_VTable, +} +IVersionedRootSignatureDeserializer_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + GetRootSignatureDescAtVersion: proc "stdcall" (this: ^IVersionedRootSignatureDeserializer, convertToVersion: ROOT_SIGNATURE_VERSION, ppDesc: ^^VERSIONED_ROOT_SIGNATURE_DESC) -> HRESULT, + GetUnconvertedRootSignatureDesc: proc "stdcall" (this: ^IVersionedRootSignatureDeserializer) -> ^VERSIONED_ROOT_SIGNATURE_DESC, +} + +PFN_SERIALIZE_ROOT_SIGNATURE :: #type proc "c" (a0: ^ROOT_SIGNATURE_DESC, a1: ROOT_SIGNATURE_VERSION, a2: ^^IBlob, a3: ^^IBlob) -> HRESULT +PFN_CREATE_ROOT_SIGNATURE_DESERIALIZER :: #type proc "c" (a0: rawptr, a1: SIZE_T, a2: ^IID, a3: ^rawptr) -> HRESULT +PFN_SERIALIZE_VERSIONED_ROOT_SIGNATURE :: #type proc "c" (a0: ^VERSIONED_ROOT_SIGNATURE_DESC, a1: ^^IBlob, a2: ^^IBlob) -> HRESULT +PFN_CREATE_VERSIONED_ROOT_SIGNATURE_DESERIALIZER :: #type proc "c" (a0: rawptr, a1: SIZE_T, a2: ^IID, a3: ^rawptr) -> HRESULT + + +CPU_DESCRIPTOR_HANDLE :: struct { + ptr: SIZE_T, +} + +GPU_DESCRIPTOR_HANDLE :: struct { + ptr: u64, +} + +DISCARD_REGION :: struct { + NumRects: u32, + pRects: ^RECT, + FirstSubresource: u32, + NumSubresources: u32, +} + +QUERY_HEAP_TYPE :: enum i32 { + OCCLUSION = 0, + TIMESTAMP = 1, + PIPELINE_STATISTICS = 2, + SO_STATISTICS = 3, + VIDEO_DECODE_STATISTICS = 4, + COPY_QUEUE_TIMESTAMP = 5, +} + +QUERY_HEAP_DESC :: struct { + Type: QUERY_HEAP_TYPE, + Count: u32, + NodeMask: u32, +} + +QUERY_TYPE :: enum i32 { + OCCLUSION = 0, + BINARY_OCCLUSION = 1, + TIMESTAMP = 2, + PIPELINE_STATISTICS = 3, + SO_STATISTICS_STREAM0 = 4, + SO_STATISTICS_STREAM1 = 5, + SO_STATISTICS_STREAM2 = 6, + SO_STATISTICS_STREAM3 = 7, + VIDEO_DECODE_STATISTICS = 8, +} + +PREDICATION_OP :: enum i32 { + EQUAL_ZERO = 0, + NOT_EQUAL_ZERO = 1, +} + +QUERY_DATA_PIPELINE_STATISTICS :: struct { + IAVertices: u64, + IAPrimitives: u64, + VSInvocations: u64, + GSInvocations: u64, + GSPrimitives: u64, + CInvocations: u64, + CPrimitives: u64, + PSInvocations: u64, + HSInvocations: u64, + DSInvocations: u64, + CSInvocations: u64, +} + +QUERY_DATA_SO_STATISTICS :: struct { + NumPrimitivesWritten: u64, + PrimitivesStorageNeeded: u64, +} + +STREAM_OUTPUT_BUFFER_VIEW :: struct { + BufferLocation: GPU_VIRTUAL_ADDRESS, + SizeInBytes: u64, + BufferFilledSizeLocation: GPU_VIRTUAL_ADDRESS, +} + +DRAW_ARGUMENTS :: struct { + VertexCountPerInstance: u32, + InstanceCount: u32, + StartVertexLocation: u32, + StartInstanceLocation: u32, +} + +DRAW_INDEXED_ARGUMENTS :: struct { + IndexCountPerInstance: u32, + InstanceCount: u32, + StartIndexLocation: u32, + BaseVertexLocation: i32, + StartInstanceLocation: u32, +} + +DISPATCH_ARGUMENTS :: struct { + ThreadGroupCountX: u32, + ThreadGroupCountY: u32, + ThreadGroupCountZ: u32, +} + +VERTEX_BUFFER_VIEW :: struct { + BufferLocation: GPU_VIRTUAL_ADDRESS, + SizeInBytes: u32, + StrideInBytes: u32, +} + +INDEX_BUFFER_VIEW :: struct { + BufferLocation: GPU_VIRTUAL_ADDRESS, + SizeInBytes: u32, + Format: dxgi.FORMAT, +} + +INDIRECT_ARGUMENT_TYPE :: enum i32 { + DRAW = 0, + DRAW_INDEXED = 1, + DISPATCH = 2, + VERTEX_BUFFER_VIEW = 3, + INDEX_BUFFER_VIEW = 4, + CONSTANT = 5, + CONSTANT_BUFFER_VIEW = 6, + SHADER_RESOURCE_VIEW = 7, + UNORDERED_ACCESS_VIEW = 8, + DISPATCH_RAYS = 9, + DISPATCH_MESH = 10, +} + +INDIRECT_ARGUMENT_DESC :: struct { + Type: INDIRECT_ARGUMENT_TYPE, + using _: struct #raw_union { + VertexBuffer: struct { + Slot: u32, + }, + Constant: struct { + RootParameterIndex: u32, + DestOffsetIn32BitValues: u32, + Num32BitValuesToSet: u32, + }, + ConstantBufferView: struct { + RootParameterIndex: u32, + }, + ShaderResourceView: struct { + RootParameterIndex: u32, + }, + UnorderedAccessView: struct { + RootParameterIndex: u32, + }, + }, +} + +COMMAND_SIGNATURE_DESC :: struct { + ByteStride: u32, + NumArgumentDescs: u32, + pArgumentDescs: ^INDIRECT_ARGUMENT_DESC, + NodeMask: u32, +} + + +IPageable_UUID :: "63ee58fb-1268-4835-86da-f008ce62f0d6" +IPageable :: struct { + using id3d12devicechild: IDeviceChild, +} + + +IHeap_UUID :: "6b3b2502-6e51-45b3-90ee-9884265e8df3" +IHeap :: struct #raw_union { + #subtype id3d12pageable: IPageable, + using id3d12heap_vtable: ^IHeap_VTable, +} +IHeap_VTable :: struct { + using id3d12devicechild_vtable: IDeviceChild_VTable, + GetDesc: proc "stdcall" (this: ^IHeap) -> HEAP_DESC, +} + + +IResource_UUID :: "696442be-a72e-4059-bc79-5b5c98040fad" +IResource :: struct #raw_union { + #subtype id3d12pageable: IPageable, + using id3d12resource_vtable: ^IResource_VTable, +} +IResource_VTable :: struct { + using id3d12devicechild_vtable: IDeviceChild_VTable, + Map: proc "stdcall" (this: ^IResource, Subresource: u32, pReadRange: ^RANGE, ppData: ^rawptr) -> HRESULT, + Unmap: proc "stdcall" (this: ^IResource, Subresource: u32, pWrittenRange: ^RANGE), + GetDesc: proc "stdcall" (this: ^IResource) -> RESOURCE_DESC, + GetGPUVirtualAddress: proc "stdcall" (this: ^IResource) -> GPU_VIRTUAL_ADDRESS, + WriteToSubresource: proc "stdcall" (this: ^IResource, DstSubresource: u32, pDstBox: ^BOX, pSrcData: rawptr, SrcRowPitch: u32, SrcDepthPitch: u32) -> HRESULT, + ReadFromSubresource: proc "stdcall" (this: ^IResource, pDstData: rawptr, DstRowPitch: u32, DstDepthPitch: u32, SrcSubresource: u32, pSrcBox: ^BOX) -> HRESULT, + GetHeapProperties: proc "stdcall" (this: ^IResource, pHeapProperties: ^HEAP_PROPERTIES, pHeapFlags: ^HEAP_FLAGS) -> HRESULT, +} + + +ICommandAllocator_UUID :: "6102dee4-af59-4b09-b999-b44d73f09b24" +ICommandAllocator :: struct #raw_union { + #subtype id3d12pageable: IPageable, + using id3d12commandallocator_vtable: ^ICommandAllocator_VTable, +} +ICommandAllocator_VTable :: struct { + using id3d12devicechild_vtable: IDeviceChild_VTable, + Reset: proc "stdcall" (this: ^ICommandAllocator) -> HRESULT, +} + + +IFence_UUID :: "0a753dcf-c4d8-4b91-adf6-be5a60d95a76" +IFence :: struct #raw_union { + #subtype id3d12pageable: IPageable, + using id3d12fence_vtable: ^IFence_VTable, +} +IFence_VTable :: struct { + using id3d12devicechild_vtable: IDeviceChild_VTable, + GetCompletedValue: proc "stdcall" (this: ^IFence) -> u64, + SetEventOnCompletion: proc "stdcall" (this: ^IFence, Value: u64, hEvent: HANDLE) -> HRESULT, + Signal: proc "stdcall" (this: ^IFence, Value: u64) -> HRESULT, +} + + +IFence1_UUID :: "433685fe-e22b-4ca0-a8db-b5b4f4dd0e4a" +IFence1 :: struct #raw_union { + #subtype id3d12fence: IFence, + using id3d12fence1_vtable: ^IFence1_VTable, +} +IFence1_VTable :: struct { + #subtype id3d12fence_vtable: IFence_VTable, + GetCreationFlags: proc "stdcall" (this: ^IFence1) -> FENCE_FLAGS, +} + + +IPipelineState_UUID :: "765a30f3-f624-4c6f-a828-ace948622445" +IPipelineState :: struct #raw_union { + #subtype id3d12pageable: IPageable, + using id3d12pipelinestate_vtable: ^IPipelineState_VTable, +} +IPipelineState_VTable :: struct { + using id3d12devicechild_vtable: IDeviceChild_VTable, + GetCachedBlob: proc "stdcall" (this: ^IPipelineState, ppBlob: ^^IBlob) -> HRESULT, +} + + +IDescriptorHeap_UUID :: "8efb471d-616c-4f49-90f7-127bb763fa51" +IDescriptorHeap :: struct #raw_union { + #subtype id3d12pageable: IPageable, + using id3d12descriptorheap_vtable: ^IDescriptorHeap_VTable, +} +IDescriptorHeap_VTable :: struct { + using id3d12devicechild_vtable: IDeviceChild_VTable, + GetDesc: proc "stdcall" (this: ^IDescriptorHeap) -> DESCRIPTOR_HEAP_DESC, + GetCPUDescriptorHandleForHeapStart: proc "stdcall" (this: ^IDescriptorHeap) -> CPU_DESCRIPTOR_HANDLE, + GetGPUDescriptorHandleForHeapStart: proc "stdcall" (this: ^IDescriptorHeap) -> GPU_DESCRIPTOR_HANDLE, +} + + +IQueryHeap_UUID :: "0d9658ae-ed45-469e-a61d-970ec583cab4" +IQueryHeap :: struct { + #subtype id3d12pageable: IPageable, +} + + +ICommandSignature_UUID :: "c36a797c-ec80-4f0a-8985-a7b2475082d1" +ICommandSignature :: struct { + #subtype id3d12pageable: IPageable, +} + + +ICommandList_UUID :: "7116d91c-e7e4-47ce-b8c6-ec8168f437e5" +ICommandList :: struct #raw_union { + #subtype id3d12devicechild: IDeviceChild, + using id3d12commandlist_vtable: ^ICommandList_VTable, +} +ICommandList_VTable :: struct { + using id3d12devicechild_vtable: IDeviceChild_VTable, + GetType: proc "stdcall" (this: ^ICommandList) -> COMMAND_LIST_TYPE, +} + + +IGraphicsCommandList_UUID :: "5b160d0f-ac1b-4185-8ba8-b3ae42a5a455" +IGraphicsCommandList :: struct #raw_union { + #subtype id3d12commandlist: ICommandList, + using id3d12graphicscommandlist_vtable: ^IGraphicsCommandList_VTable, +} +IGraphicsCommandList_VTable :: struct { + using id3d12commandlist_vtable: ICommandList_VTable, + Close: proc "stdcall" (this: ^IGraphicsCommandList) -> HRESULT, + Reset: proc "stdcall" (this: ^IGraphicsCommandList, pAllocator: ^ICommandAllocator, pInitialState: ^IPipelineState) -> HRESULT, + ClearState: proc "stdcall" (this: ^IGraphicsCommandList, pPipelineState: ^IPipelineState), + DrawInstanced: proc "stdcall" (this: ^IGraphicsCommandList, VertexCountPerInstance: u32, InstanceCount: u32, StartVertexLocation: u32, StartInstanceLocation: u32), + DrawIndexedInstanced: proc "stdcall" (this: ^IGraphicsCommandList, IndexCountPerInstance: u32, InstanceCount: u32, StartIndexLocation: u32, BaseVertexLocation: i32, StartInstanceLocation: u32), + Dispatch: proc "stdcall" (this: ^IGraphicsCommandList, ThreadGroupCountX: u32, ThreadGroupCountY: u32, ThreadGroupCountZ: u32), + CopyBufferRegion: proc "stdcall" (this: ^IGraphicsCommandList, pDstBuffer: ^IResource, DstOffset: u64, pSrcBuffer: ^IResource, SrcOffset: u64, NumBytes: u64), + CopyTextureRegion: proc "stdcall" (this: ^IGraphicsCommandList, pDst: ^TEXTURE_COPY_LOCATION, DstX: u32, DstY: u32, DstZ: u32, pSrc: ^TEXTURE_COPY_LOCATION, pSrcBox: ^BOX), + CopyResource: proc "stdcall" (this: ^IGraphicsCommandList, pDstResource: ^IResource, pSrcResource: ^IResource), + CopyTiles: proc "stdcall" (this: ^IGraphicsCommandList, pTiledResource: ^IResource, pTileRegionStartCoordinate: ^TILED_RESOURCE_COORDINATE, pTileRegionSize: ^TILE_REGION_SIZE, pBuffer: ^IResource, BufferStartOffsetInBytes: u64, Flags: TILE_COPY_FLAGS), + ResolveSubresource: proc "stdcall" (this: ^IGraphicsCommandList, pDstResource: ^IResource, DstSubresource: u32, pSrcResource: ^IResource, SrcSubresource: u32, Format: dxgi.FORMAT), + IASetPrimitiveTopology: proc "stdcall" (this: ^IGraphicsCommandList, PrimitiveTopology: PRIMITIVE_TOPOLOGY), + RSSetViewports: proc "stdcall" (this: ^IGraphicsCommandList, NumViewports: u32, pViewports: ^VIEWPORT), + RSSetScissorRects: proc "stdcall" (this: ^IGraphicsCommandList, NumRects: u32, pRects: ^RECT), + OMSetBlendFactor: proc "stdcall" (this: ^IGraphicsCommandList, BlendFactor: ^[4]f32), + OMSetStencilRef: proc "stdcall" (this: ^IGraphicsCommandList, StencilRef: u32), + SetPipelineState: proc "stdcall" (this: ^IGraphicsCommandList, pPipelineState: ^IPipelineState), + ResourceBarrier: proc "stdcall" (this: ^IGraphicsCommandList, NumBarriers: u32, pBarriers: ^RESOURCE_BARRIER), + ExecuteBundle: proc "stdcall" (this: ^IGraphicsCommandList, pCommandList: ^IGraphicsCommandList), + SetDescriptorHeaps: proc "stdcall" (this: ^IGraphicsCommandList, NumDescriptorHeaps: u32, ppDescriptorHeaps: ^^IDescriptorHeap), + SetComputeRootSignature: proc "stdcall" (this: ^IGraphicsCommandList, pRootSignature: ^IRootSignature), + SetGraphicsRootSignature: proc "stdcall" (this: ^IGraphicsCommandList, pRootSignature: ^IRootSignature), + SetComputeRootDescriptorTable: proc "stdcall" (this: ^IGraphicsCommandList, RootParameterIndex: u32, BaseDescriptor: GPU_DESCRIPTOR_HANDLE), + SetGraphicsRootDescriptorTable: proc "stdcall" (this: ^IGraphicsCommandList, RootParameterIndex: u32, BaseDescriptor: GPU_DESCRIPTOR_HANDLE), + SetComputeRoot32BitConstant: proc "stdcall" (this: ^IGraphicsCommandList, RootParameterIndex: u32, SrcData: u32, DestOffsetIn32BitValues: u32), + SetGraphicsRoot32BitConstant: proc "stdcall" (this: ^IGraphicsCommandList, RootParameterIndex: u32, SrcData: u32, DestOffsetIn32BitValues: u32), + SetComputeRoot32BitConstants: proc "stdcall" (this: ^IGraphicsCommandList, RootParameterIndex: u32, Num32BitValuesToSet: u32, pSrcData: rawptr, DestOffsetIn32BitValues: u32), + SetGraphicsRoot32BitConstants: proc "stdcall" (this: ^IGraphicsCommandList, RootParameterIndex: u32, Num32BitValuesToSet: u32, pSrcData: rawptr, DestOffsetIn32BitValues: u32), + SetComputeRootConstantBufferView: proc "stdcall" (this: ^IGraphicsCommandList, RootParameterIndex: u32, BufferLocation: GPU_VIRTUAL_ADDRESS), + SetGraphicsRootConstantBufferView: proc "stdcall" (this: ^IGraphicsCommandList, RootParameterIndex: u32, BufferLocation: GPU_VIRTUAL_ADDRESS), + SetComputeRootShaderResourceView: proc "stdcall" (this: ^IGraphicsCommandList, RootParameterIndex: u32, BufferLocation: GPU_VIRTUAL_ADDRESS), + SetGraphicsRootShaderResourceView: proc "stdcall" (this: ^IGraphicsCommandList, RootParameterIndex: u32, BufferLocation: GPU_VIRTUAL_ADDRESS), + SetComputeRootUnorderedAccessView: proc "stdcall" (this: ^IGraphicsCommandList, RootParameterIndex: u32, BufferLocation: GPU_VIRTUAL_ADDRESS), + SetGraphicsRootUnorderedAccessView: proc "stdcall" (this: ^IGraphicsCommandList, RootParameterIndex: u32, BufferLocation: GPU_VIRTUAL_ADDRESS), + IASetIndexBuffer: proc "stdcall" (this: ^IGraphicsCommandList, pView: ^INDEX_BUFFER_VIEW), + IASetVertexBuffers: proc "stdcall" (this: ^IGraphicsCommandList, StartSlot: u32, NumViews: u32, pViews: ^VERTEX_BUFFER_VIEW), + SOSetTargets: proc "stdcall" (this: ^IGraphicsCommandList, StartSlot: u32, NumViews: u32, pViews: ^STREAM_OUTPUT_BUFFER_VIEW), + OMSetRenderTargets: proc "stdcall" (this: ^IGraphicsCommandList, NumRenderTargetDescriptors: u32, pRenderTargetDescriptors: ^CPU_DESCRIPTOR_HANDLE, RTsSingleHandleToDescriptorRange: BOOL, pDepthStencilDescriptor: ^CPU_DESCRIPTOR_HANDLE), + ClearDepthStencilView: proc "stdcall" (this: ^IGraphicsCommandList, DepthStencilView: CPU_DESCRIPTOR_HANDLE, ClearFlags: CLEAR_FLAGS, Depth: f32, Stencil: u8, NumRects: u32, pRects: ^RECT), + ClearRenderTargetView: proc "stdcall" (this: ^IGraphicsCommandList, RenderTargetView: CPU_DESCRIPTOR_HANDLE, ColorRGBA: ^[4]f32, NumRects: u32, pRects: ^RECT), + ClearUnorderedAccessViewUint: proc "stdcall" (this: ^IGraphicsCommandList, ViewGPUHandleInCurrentHeap: GPU_DESCRIPTOR_HANDLE, ViewCPUHandle: CPU_DESCRIPTOR_HANDLE, pResource: ^IResource, Values: ^[4]u32, NumRects: u32, pRects: ^RECT), + ClearUnorderedAccessViewFloat: proc "stdcall" (this: ^IGraphicsCommandList, ViewGPUHandleInCurrentHeap: GPU_DESCRIPTOR_HANDLE, ViewCPUHandle: CPU_DESCRIPTOR_HANDLE, pResource: ^IResource, Values: ^[4]f32, NumRects: u32, pRects: ^RECT), + DiscardResource: proc "stdcall" (this: ^IGraphicsCommandList, pResource: ^IResource, pRegion: ^DISCARD_REGION), + BeginQuery: proc "stdcall" (this: ^IGraphicsCommandList, pQueryHeap: ^IQueryHeap, Type: QUERY_TYPE, Index: u32), + EndQuery: proc "stdcall" (this: ^IGraphicsCommandList, pQueryHeap: ^IQueryHeap, Type: QUERY_TYPE, Index: u32), + ResolveQueryData: proc "stdcall" (this: ^IGraphicsCommandList, pQueryHeap: ^IQueryHeap, Type: QUERY_TYPE, StartIndex: u32, NumQueries: u32, pDestinationBuffer: ^IResource, AlignedDestinationBufferOffset: u64), + SetPredication: proc "stdcall" (this: ^IGraphicsCommandList, pBuffer: ^IResource, AlignedBufferOffset: u64, Operation: PREDICATION_OP), + SetMarker: proc "stdcall" (this: ^IGraphicsCommandList, Metadata: u32, pData: rawptr, Size: u32), + BeginEvent: proc "stdcall" (this: ^IGraphicsCommandList, Metadata: u32, pData: rawptr, Size: u32), + EndEvent: proc "stdcall" (this: ^IGraphicsCommandList), + ExecuteIndirect: proc "stdcall" (this: ^IGraphicsCommandList, pCommandSignature: ^ICommandSignature, MaxCommandCount: u32, pArgumentBuffer: ^IResource, ArgumentBufferOffset: u64, pCountBuffer: ^IResource, CountBufferOffset: u64), +} + + +IGraphicsCommandList1_UUID :: "553103fb-1fe7-4557-bb38-946d7d0e7ca7" +IGraphicsCommandList1 :: struct #raw_union { + #subtype id3d12graphicscommandlist: IGraphicsCommandList, + using id3d12graphicscommandlist1_vtable: ^IGraphicsCommandList1_VTable, +} +IGraphicsCommandList1_VTable :: struct { + using id3d12graphicscommandlist_vtable: IGraphicsCommandList_VTable, + AtomicCopyBufferUINT: proc "stdcall" (this: ^IGraphicsCommandList1, pDstBuffer: ^IResource, DstOffset: u64, pSrcBuffer: ^IResource, SrcOffset: u64, Dependencies: u32, ppDependentResources: ^^IResource, pDependentSubresourceRanges: ^SUBRESOURCE_RANGE_UINT64), + AtomicCopyBufferUINT64: proc "stdcall" (this: ^IGraphicsCommandList1, pDstBuffer: ^IResource, DstOffset: u64, pSrcBuffer: ^IResource, SrcOffset: u64, Dependencies: u32, ppDependentResources: ^^IResource, pDependentSubresourceRanges: ^SUBRESOURCE_RANGE_UINT64), + OMSetDepthBounds: proc "stdcall" (this: ^IGraphicsCommandList1, Min: f32, Max: f32), + SetSamplePositions: proc "stdcall" (this: ^IGraphicsCommandList1, NumSamplesPerPixel: u32, NumPixels: u32, pSamplePositions: ^SAMPLE_POSITION), + ResolveSubresourceRegion: proc "stdcall" (this: ^IGraphicsCommandList1, pDstResource: ^IResource, DstSubresource: u32, DstX: u32, DstY: u32, pSrcResource: ^IResource, SrcSubresource: u32, pSrcRect: ^RECT, Format: dxgi.FORMAT, ResolveMode: RESOLVE_MODE), + SetViewInstanceMask: proc "stdcall" (this: ^IGraphicsCommandList1, Mask: u32), +} + +WRITEBUFFERIMMEDIATE_PARAMETER :: struct { + Dest: GPU_VIRTUAL_ADDRESS, + Value: u32, +} + +WRITEBUFFERIMMEDIATE_MODE :: enum i32 { + DEFAULT = 0, + MARKER_IN = 1, + MARKER_OUT = 2, +} + + +IGraphicsCommandList2_UUID :: "38C3E585-FF17-412C-9150-4FC6F9D72A28" +IGraphicsCommandList2 :: struct #raw_union { + #subtype id3d12graphicscommandlist1: IGraphicsCommandList1, + using id3d12graphicscommandlist2_vtable: ^IGraphicsCommandList2_VTable, +} +IGraphicsCommandList2_VTable :: struct { + using id3d12graphicscommandlist1_vtable: IGraphicsCommandList1_VTable, + WriteBufferImmediate: proc "stdcall" (this: ^IGraphicsCommandList2, Count: u32, pParams: ^WRITEBUFFERIMMEDIATE_PARAMETER, pModes: ^WRITEBUFFERIMMEDIATE_MODE), +} + + +ICommandQueue_UUID :: "0ec870a6-5d7e-4c22-8cfc-5baae07616ed" +ICommandQueue :: struct #raw_union { + #subtype id3d12pageable: IPageable, + using id3d12commandqueue_vtable: ^ICommandQueue_VTable, +} +ICommandQueue_VTable :: struct { + using id3d12devicechild_vtable: IDeviceChild_VTable, + UpdateTileMappings: proc "stdcall" (this: ^ICommandQueue, pResource: ^IResource, NumResourceRegions: u32, pResourceRegionStartCoordinates: ^TILED_RESOURCE_COORDINATE, pResourceRegionSizes: ^TILE_REGION_SIZE, pHeap: ^IHeap, NumRanges: u32, pRangeFlags: ^TILE_RANGE_FLAGS, pHeapRangeStartOffsets: ^u32, pRangeTileCounts: ^u32, Flags: TILE_MAPPING_FLAGS), + CopyTileMappings: proc "stdcall" (this: ^ICommandQueue, pDstResource: ^IResource, pDstRegionStartCoordinate: ^TILED_RESOURCE_COORDINATE, pSrcResource: ^IResource, pSrcRegionStartCoordinate: ^TILED_RESOURCE_COORDINATE, pRegionSize: ^TILE_REGION_SIZE, Flags: TILE_MAPPING_FLAGS), + ExecuteCommandLists: proc "stdcall" (this: ^ICommandQueue, NumCommandLists: u32, ppCommandLists: ^^ICommandList), + SetMarker: proc "stdcall" (this: ^ICommandQueue, Metadata: u32, pData: rawptr, Size: u32), + BeginEvent: proc "stdcall" (this: ^ICommandQueue, Metadata: u32, pData: rawptr, Size: u32), + EndEvent: proc "stdcall" (this: ^ICommandQueue), + Signal: proc "stdcall" (this: ^ICommandQueue, pFence: ^IFence, Value: u64) -> HRESULT, + Wait: proc "stdcall" (this: ^ICommandQueue, pFence: ^IFence, Value: u64) -> HRESULT, + GetTimestampFrequency: proc "stdcall" (this: ^ICommandQueue, pFrequency: ^u64) -> HRESULT, + GetClockCalibration: proc "stdcall" (this: ^ICommandQueue, pGpuTimestamp: ^u64, pCpuTimestamp: ^u64) -> HRESULT, + GetDesc: proc "stdcall" (this: ^ICommandQueue) -> COMMAND_QUEUE_DESC, +} + + +IDevice_UUID :: "189819f1-1db6-4b57-be54-1821339b85f7" +IDevice :: struct #raw_union { + #subtype id3d12object: IObject, + using id3d12device_vtable: ^IDevice_VTable, +} +IDevice_VTable :: struct { + using id3d12object_vtable: IObject_VTable, + GetNodeCount: proc "stdcall" (this: ^IDevice) -> u32, + CreateCommandQueue: proc "stdcall" (this: ^IDevice, pDesc: ^COMMAND_QUEUE_DESC, riid: ^IID, ppCommandQueue: ^rawptr) -> HRESULT, + CreateCommandAllocator: proc "stdcall" (this: ^IDevice, type: COMMAND_LIST_TYPE, riid: ^IID, ppCommandAllocator: ^rawptr) -> HRESULT, + CreateGraphicsPipelineState: proc "stdcall" (this: ^IDevice, pDesc: ^GRAPHICS_PIPELINE_STATE_DESC, riid: ^IID, ppPipelineState: ^rawptr) -> HRESULT, + CreateComputePipelineState: proc "stdcall" (this: ^IDevice, pDesc: ^COMPUTE_PIPELINE_STATE_DESC, riid: ^IID, ppPipelineState: ^rawptr) -> HRESULT, + CreateCommandList: proc "stdcall" (this: ^IDevice, nodeMask: u32, type: COMMAND_LIST_TYPE, pCommandAllocator: ^ICommandAllocator, pInitialState: ^IPipelineState, riid: ^IID, ppCommandList: ^rawptr) -> HRESULT, + CheckFeatureSupport: proc "stdcall" (this: ^IDevice, Feature: FEATURE, pFeatureSupportData: rawptr, FeatureSupportDataSize: u32) -> HRESULT, + CreateDescriptorHeap: proc "stdcall" (this: ^IDevice, pDescriptorHeapDesc: ^DESCRIPTOR_HEAP_DESC, riid: ^IID, ppvHeap: ^rawptr) -> HRESULT, + GetDescriptorHandleIncrementSize: proc "stdcall" (this: ^IDevice, DescriptorHeapType: DESCRIPTOR_HEAP_TYPE) -> u32, + CreateRootSignature: proc "stdcall" (this: ^IDevice, nodeMask: u32, pBlobWithRootSignature: rawptr, blobLengthInBytes: SIZE_T, riid: ^IID, ppvRootSignature: ^rawptr) -> HRESULT, + CreateConstantBufferView: proc "stdcall" (this: ^IDevice, pDesc: ^CONSTANT_BUFFER_VIEW_DESC, DestDescriptor: CPU_DESCRIPTOR_HANDLE), + CreateShaderResourceView: proc "stdcall" (this: ^IDevice, pResource: ^IResource, pDesc: ^SHADER_RESOURCE_VIEW_DESC, DestDescriptor: CPU_DESCRIPTOR_HANDLE), + CreateUnorderedAccessView: proc "stdcall" (this: ^IDevice, pResource: ^IResource, pCounterResource: ^IResource, pDesc: ^UNORDERED_ACCESS_VIEW_DESC, DestDescriptor: CPU_DESCRIPTOR_HANDLE), + CreateRenderTargetView: proc "stdcall" (this: ^IDevice, pResource: ^IResource, pDesc: ^RENDER_TARGET_VIEW_DESC, DestDescriptor: CPU_DESCRIPTOR_HANDLE), + CreateDepthStencilView: proc "stdcall" (this: ^IDevice, pResource: ^IResource, pDesc: ^DEPTH_STENCIL_VIEW_DESC, DestDescriptor: CPU_DESCRIPTOR_HANDLE), + CreateSampler: proc "stdcall" (this: ^IDevice, pDesc: ^SAMPLER_DESC, DestDescriptor: CPU_DESCRIPTOR_HANDLE), + CopyDescriptors: proc "stdcall" (this: ^IDevice, NumDestDescriptorRanges: u32, pDestDescriptorRangeStarts: ^CPU_DESCRIPTOR_HANDLE, pDestDescriptorRangeSizes: ^u32, NumSrcDescriptorRanges: u32, pSrcDescriptorRangeStarts: ^CPU_DESCRIPTOR_HANDLE, pSrcDescriptorRangeSizes: ^u32, DescriptorHeapsType: DESCRIPTOR_HEAP_TYPE), + CopyDescriptorsSimple: proc "stdcall" (this: ^IDevice, NumDescriptors: u32, DestDescriptorRangeStart: CPU_DESCRIPTOR_HANDLE, SrcDescriptorRangeStart: CPU_DESCRIPTOR_HANDLE, DescriptorHeapsType: DESCRIPTOR_HEAP_TYPE), + GetResourceAllocationInfo: proc "stdcall" (this: ^IDevice, visibleMask: u32, numResourceDescs: u32, pResourceDescs: ^RESOURCE_DESC) -> RESOURCE_ALLOCATION_INFO, + GetCustomHeapProperties: proc "stdcall" (this: ^IDevice, nodeMask: u32, heapType: HEAP_TYPE) -> HEAP_PROPERTIES, + CreateCommittedResource: proc "stdcall" (this: ^IDevice, pHeapProperties: ^HEAP_PROPERTIES, HeapFlags: HEAP_FLAGS, pDesc: ^RESOURCE_DESC, InitialResourceState: RESOURCE_STATES, pOptimizedClearValue: ^CLEAR_VALUE, riidResource: ^IID, ppvResource: ^rawptr) -> HRESULT, + CreateHeap: proc "stdcall" (this: ^IDevice, pDesc: ^HEAP_DESC, riid: ^IID, ppvHeap: ^rawptr) -> HRESULT, + CreatePlacedResource: proc "stdcall" (this: ^IDevice, pHeap: ^IHeap, HeapOffset: u64, pDesc: ^RESOURCE_DESC, InitialState: RESOURCE_STATES, pOptimizedClearValue: ^CLEAR_VALUE, riid: ^IID, ppvResource: ^rawptr) -> HRESULT, + CreateReservedResource: proc "stdcall" (this: ^IDevice, pDesc: ^RESOURCE_DESC, InitialState: RESOURCE_STATES, pOptimizedClearValue: ^CLEAR_VALUE, riid: ^IID, ppvResource: ^rawptr) -> HRESULT, + CreateSharedHandle: proc "stdcall" (this: ^IDevice, pObject: ^IDeviceChild, pAttributes: ^win32.SECURITY_ATTRIBUTES, Access: u32, Name: [^]u16, pHandle: ^HANDLE) -> HRESULT, + OpenSharedHandle: proc "stdcall" (this: ^IDevice, NTHandle: HANDLE, riid: ^IID, ppvObj: ^rawptr) -> HRESULT, + OpenSharedHandleByName: proc "stdcall" (this: ^IDevice, Name: [^]u16, Access: u32, pNTHandle: ^HANDLE) -> HRESULT, + MakeResident: proc "stdcall" (this: ^IDevice, NumObjects: u32, ppObjects: ^^IPageable) -> HRESULT, + Evict: proc "stdcall" (this: ^IDevice, NumObjects: u32, ppObjects: ^^IPageable) -> HRESULT, + CreateFence: proc "stdcall" (this: ^IDevice, InitialValue: u64, Flags: FENCE_FLAGS, riid: ^IID, ppFence: ^rawptr) -> HRESULT, + GetDeviceRemovedReason: proc "stdcall" (this: ^IDevice) -> HRESULT, + GetCopyableFootprints: proc "stdcall" (this: ^IDevice, pResourceDesc: ^RESOURCE_DESC, FirstSubresource: u32, NumSubresources: u32, BaseOffset: u64, pLayouts: ^PLACED_SUBRESOURCE_FOOTPRINT, pNumRows: ^u32, pRowSizeInBytes: ^u64, pTotalBytes: ^u64), + CreateQueryHeap: proc "stdcall" (this: ^IDevice, pDesc: ^QUERY_HEAP_DESC, riid: ^IID, ppvHeap: ^rawptr) -> HRESULT, + SetStablePowerState: proc "stdcall" (this: ^IDevice, Enable: BOOL) -> HRESULT, + CreateCommandSignature: proc "stdcall" (this: ^IDevice, pDesc: ^COMMAND_SIGNATURE_DESC, pRootSignature: ^IRootSignature, riid: ^IID, ppvCommandSignature: ^rawptr) -> HRESULT, + GetResourceTiling: proc "stdcall" (this: ^IDevice, pTiledResource: ^IResource, pNumTilesForEntireResource: ^u32, pPackedMipDesc: ^PACKED_MIP_INFO, pStandardTileShapeForNonPackedMips: ^TILE_SHAPE, pNumSubresourceTilings: ^u32, FirstSubresourceTilingToGet: u32, pSubresourceTilingsForNonPackedMips: ^SUBRESOURCE_TILING), + GetAdapterLuid: proc "stdcall" (this: ^IDevice) -> LUID, +} + + +IPipelineLibrary_UUID :: "c64226a8-9201-46af-b4cc-53fb9ff7414f" +IPipelineLibrary :: struct #raw_union { + #subtype id3d12devicechild: IDeviceChild, + using id3d12pipelinelibrary_vtable: ^IPipelineLibrary_VTable, +} +IPipelineLibrary_VTable :: struct { + using id3d12devicechild_vtable: IDeviceChild_VTable, + StorePipeline: proc "stdcall" (this: ^IPipelineLibrary, pName: [^]u16, pPipeline: ^IPipelineState) -> HRESULT, + LoadGraphicsPipeline: proc "stdcall" (this: ^IPipelineLibrary, pName: [^]u16, pDesc: ^GRAPHICS_PIPELINE_STATE_DESC, riid: ^IID, ppPipelineState: ^rawptr) -> HRESULT, + LoadComputePipeline: proc "stdcall" (this: ^IPipelineLibrary, pName: [^]u16, pDesc: ^COMPUTE_PIPELINE_STATE_DESC, riid: ^IID, ppPipelineState: ^rawptr) -> HRESULT, + GetSerializedSize: proc "stdcall" (this: ^IPipelineLibrary) -> SIZE_T, + Serialize: proc "stdcall" (this: ^IPipelineLibrary, pData: rawptr, DataSizeInBytes: SIZE_T) -> HRESULT, +} + + +IPipelineLibrary1_UUID :: "80eabf42-2568-4e5e-bd82-c37f86961dc3" +IPipelineLibrary1 :: struct #raw_union { + #subtype id3d12pipelinelibrary: IPipelineLibrary, + using id3d12pipelinelibrary1_vtable: ^IPipelineLibrary1_VTable, +} +IPipelineLibrary1_VTable :: struct { + using id3d12pipelinelibrary_vtable: IPipelineLibrary_VTable, + LoadPipeline: proc "stdcall" (this: ^IPipelineLibrary1, pName: [^]u16, pDesc: ^PIPELINE_STATE_STREAM_DESC, riid: ^IID, ppPipelineState: ^rawptr) -> HRESULT, +} + +MULTIPLE_FENCE_WAIT_FLAGS :: enum u32 { // TODO: make bit_set + NONE = 0x0, + ANY = 0x1, + ALL = 0x0, +} + +RESIDENCY_PRIORITY :: enum i32 { + MINIMUM = 671088640, + LOW = 1342177280, + NORMAL = 2013265920, + HIGH = -1610547200, + MAXIMUM = -939524096, +} + + +IDevice1_UUID :: "77acce80-638e-4e65-8895-c1f23386863e" +IDevice1 :: struct #raw_union { + #subtype id3d12device: IDevice, + using id3d12device1_vtable: ^IDevice1_VTable, +} +IDevice1_VTable :: struct { + using id3d12device_vtable: IDevice_VTable, + CreatePipelineLibrary: proc "stdcall" (this: ^IDevice1, pLibraryBlob: rawptr, BlobLength: SIZE_T, riid: ^IID, ppPipelineLibrary: ^rawptr) -> HRESULT, + SetEventOnMultipleFenceCompletion: proc "stdcall" (this: ^IDevice1, ppFences: ^^IFence, pFenceValues: ^u64, NumFences: u32, Flags: MULTIPLE_FENCE_WAIT_FLAGS, hEvent: HANDLE) -> HRESULT, + SetResidencyPriority: proc "stdcall" (this: ^IDevice1, NumObjects: u32, ppObjects: ^^IPageable, pPriorities: ^RESIDENCY_PRIORITY) -> HRESULT, +} + + +IDevice2_UUID :: "30baa41e-b15b-475c-a0bb-1af5c5b64328" +IDevice2 :: struct #raw_union { + #subtype id3d12device1: IDevice1, + using id3d12device2_vtable: ^IDevice2_VTable, +} +IDevice2_VTable :: struct { + using id3d12device1_vtable: IDevice1_VTable, + CreatePipelineState: proc "stdcall" (this: ^IDevice2, pDesc: ^PIPELINE_STATE_STREAM_DESC, riid: ^IID, ppPipelineState: ^rawptr) -> HRESULT, +} + +RESIDENCY_FLAGS :: enum u32 { // TODO: make bit_set + NONE = 0x0, + DENY_OVERBUDGET = 0x1, +} + + +IDevice3_UUID :: "81dadc15-2bad-4392-93c5-101345c4aa98" +IDevice3 :: struct #raw_union { + #subtype id3d12device2: IDevice2, + using id3d12device3_vtable: ^IDevice3_VTable, +} +IDevice3_VTable :: struct { + using id3d12device2_vtable: IDevice2_VTable, + OpenExistingHeapFromAddress: proc "stdcall" (this: ^IDevice3, pAddress: rawptr, riid: ^IID, ppvHeap: ^rawptr) -> HRESULT, + OpenExistingHeapFromFileMapping: proc "stdcall" (this: ^IDevice3, hFileMapping: HANDLE, riid: ^IID, ppvHeap: ^rawptr) -> HRESULT, + EnqueueMakeResident: proc "stdcall" (this: ^IDevice3, Flags: RESIDENCY_FLAGS, NumObjects: u32, ppObjects: ^^IPageable, pFenceToSignal: ^IFence, FenceValueToSignal: u64) -> HRESULT, +} + +COMMAND_LIST_FLAGS :: enum u32 { // TODO: make bit_set + COMMAND_LIST_FLAG_NONE = 0x0, +} + +COMMAND_POOL_FLAGS :: enum u32 { // TODO: make bit_set + COMMAND_POOL_FLAG_NONE = 0x0, +} + +COMMAND_RECORDER_FLAGS :: enum u32 { // TODO: make bit_set + COMMAND_RECORDER_FLAG_NONE = 0x0, +} + +PROTECTED_SESSION_STATUS :: enum i32 { + OK = 0, + INVALID = 1, +} + + +IProtectedSession_UUID :: "A1533D18-0AC1-4084-85B9-89A96116806B" +IProtectedSession :: struct #raw_union { + #subtype id3d12devicechild: IDeviceChild, + using id3d12protectedsession_vtable: ^IProtectedSession_VTable, +} +IProtectedSession_VTable :: struct { + using id3d12devicechild_vtable: IDeviceChild_VTable, + GetStatusFence: proc "stdcall" (this: ^IProtectedSession, riid: ^IID, ppFence: ^rawptr) -> HRESULT, + GetSessionStatus: proc "stdcall" (this: ^IProtectedSession) -> PROTECTED_SESSION_STATUS, +} + +PROTECTED_RESOURCE_SESSION_SUPPORT_FLAGS :: enum u32 { // TODO: make bit_set + NONE = 0x0, + SUPPORTED = 0x1, +} + +FEATURE_DATA_PROTECTED_RESOURCE_SESSION_SUPPORT :: struct { + NodeIndex: u32, + Support: PROTECTED_RESOURCE_SESSION_SUPPORT_FLAGS, +} + +PROTECTED_RESOURCE_SESSION_FLAGS :: enum u32 { // TODO: make bit_set + PROTECTED_RESOURCE_SESSION_FLAG_NONE = 0x0, +} + +PROTECTED_RESOURCE_SESSION_DESC :: struct { + NodeMask: u32, + Flags: PROTECTED_RESOURCE_SESSION_FLAGS, +} + + +IProtectedResourceSession_UUID :: "6CD696F4-F289-40CC-8091-5A6C0A099C3D" +IProtectedResourceSession :: struct #raw_union { + #subtype id3d12protectedsession: IProtectedSession, + using id3d12protectedresourcesession_vtable: ^IProtectedResourceSession_VTable, +} +IProtectedResourceSession_VTable :: struct { + using id3d12protectedsession_vtable: IProtectedSession_VTable, + GetDesc: proc "stdcall" (this: ^IProtectedResourceSession) -> PROTECTED_RESOURCE_SESSION_DESC, +} + + +IDevice4_UUID :: "e865df17-a9ee-46f9-a463-3098315aa2e5" +IDevice4 :: struct #raw_union { + #subtype id3d12device3: IDevice3, + using id3d12device4_vtable: ^IDevice4_VTable, +} +IDevice4_VTable :: struct { + using id3d12device3_vtable: IDevice3_VTable, + CreateCommandList1: proc "stdcall" (this: ^IDevice4, nodeMask: u32, type: COMMAND_LIST_TYPE, flags: COMMAND_LIST_FLAGS, riid: ^IID, ppCommandList: ^rawptr) -> HRESULT, + CreateProtectedResourceSession: proc "stdcall" (this: ^IDevice4, pDesc: ^PROTECTED_RESOURCE_SESSION_DESC, riid: ^IID, ppSession: ^rawptr) -> HRESULT, + CreateCommittedResource1: proc "stdcall" (this: ^IDevice4, pHeapProperties: ^HEAP_PROPERTIES, HeapFlags: HEAP_FLAGS, pDesc: ^RESOURCE_DESC, InitialResourceState: RESOURCE_STATES, pOptimizedClearValue: ^CLEAR_VALUE, pProtectedSession: ^IProtectedResourceSession, riidResource: ^IID, ppvResource: ^rawptr) -> HRESULT, + CreateHeap1: proc "stdcall" (this: ^IDevice4, pDesc: ^HEAP_DESC, pProtectedSession: ^IProtectedResourceSession, riid: ^IID, ppvHeap: ^rawptr) -> HRESULT, + CreateReservedResource1: proc "stdcall" (this: ^IDevice4, pDesc: ^RESOURCE_DESC, InitialState: RESOURCE_STATES, pOptimizedClearValue: ^CLEAR_VALUE, pProtectedSession: ^IProtectedResourceSession, riid: ^IID, ppvResource: ^rawptr) -> HRESULT, + GetResourceAllocationInfo1: proc "stdcall" (this: ^IDevice4, visibleMask: u32, numResourceDescs: u32, pResourceDescs: ^RESOURCE_DESC, pResourceAllocationInfo1: ^RESOURCE_ALLOCATION_INFO1) -> RESOURCE_ALLOCATION_INFO, +} + +LIFETIME_STATE :: enum i32 { + IN_USE = 0, + NOT_IN_USE = 1, +} + + +ILifetimeOwner_UUID :: "e667af9f-cd56-4f46-83ce-032e595d70a8" +ILifetimeOwner :: struct #raw_union { + #subtype iunknown: IUnknown, + using id3d12lifetimeowner_vtable: ^ILifetimeOwner_VTable, +} +ILifetimeOwner_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + LifetimeStateUpdated: proc "stdcall" (this: ^ILifetimeOwner, NewState: LIFETIME_STATE), +} + + +ISwapChainAssistant_UUID :: "f1df64b6-57fd-49cd-8807-c0eb88b45c8f" +ISwapChainAssistant :: struct #raw_union { + #subtype iunknown: IUnknown, + using id3d12swapchainassistant_vtable: ^ISwapChainAssistant_VTable, +} +ISwapChainAssistant_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + GetLUID: proc "stdcall" (this: ^ISwapChainAssistant) -> LUID, + GetSwapChainObject: proc "stdcall" (this: ^ISwapChainAssistant, riid: ^IID, ppv: ^rawptr) -> HRESULT, + GetCurrentResourceAndCommandQueue: proc "stdcall" (this: ^ISwapChainAssistant, riidResource: ^IID, ppvResource: ^rawptr, riidQueue: ^IID, ppvQueue: ^rawptr) -> HRESULT, + InsertImplicitSync: proc "stdcall" (this: ^ISwapChainAssistant) -> HRESULT, +} + + +ILifetimeTracker_UUID :: "3fd03d36-4eb1-424a-a582-494ecb8ba813" +ILifetimeTracker :: struct #raw_union { + #subtype id3d12devicechild: IDeviceChild, + using id3d12lifetimetracker_vtable: ^ILifetimeTracker_VTable, +} +ILifetimeTracker_VTable :: struct { + using id3d12devicechild_vtable: IDeviceChild_VTable, + DestroyOwnedObject: proc "stdcall" (this: ^ILifetimeTracker, pObject: ^IDeviceChild) -> HRESULT, +} + +META_COMMAND_PARAMETER_TYPE :: enum i32 { + FLOAT = 0, + UINT64 = 1, + GPU_VIRTUAL_ADDRESS = 2, + CPU_DESCRIPTOR_HANDLE_HEAP_TYPE_CBV_SRV_UAV = 3, + GPU_DESCRIPTOR_HANDLE_HEAP_TYPE_CBV_SRV_UAV = 4, +} + +META_COMMAND_PARAMETER_FLAGS :: enum u32 { // TODO: make bit_set + INPUT = 0x1, + OUTPUT = 0x2, +} + +META_COMMAND_PARAMETER_STAGE :: enum i32 { + CREATION = 0, + INITIALIZATION = 1, + EXECUTION = 2, +} + +META_COMMAND_PARAMETER_DESC :: struct { + Name: [^]u16, + Type: META_COMMAND_PARAMETER_TYPE, + Flags: META_COMMAND_PARAMETER_FLAGS, + RequiredResourceState: RESOURCE_STATES, + StructureOffset: u32, +} + +GRAPHICS_STATES :: enum i32 { + NONE = 0, + IA_VERTEX_BUFFERS = 1, + IA_INDEX_BUFFER = 2, + IA_PRIMITIVE_TOPOLOGY = 4, + DESCRIPTOR_HEAP = 8, + GRAPHICS_ROOT_SIGNATURE = 16, + COMPUTE_ROOT_SIGNATURE = 32, + RS_VIEWPORTS = 64, + RS_SCISSOR_RECTS = 128, + PREDICATION = 256, + OM_RENDER_TARGETS = 512, + OM_STENCIL_REF = 1024, + OM_BLEND_FACTOR = 2048, + PIPELINE_STATE = 4096, + SO_TARGETS = 8192, + OM_DEPTH_BOUNDS = 16384, + SAMPLE_POSITIONS = 32768, + VIEW_INSTANCE_MASK = 65536, +} + +META_COMMAND_DESC :: struct { + Id: GUID, + Name: [^]u16, + InitializationDirtyState: GRAPHICS_STATES, + ExecutionDirtyState: GRAPHICS_STATES, +} + + +IStateObject_UUID :: "47016943-fca8-4594-93ea-af258b55346d" +IStateObject :: struct #raw_union { + #subtype id3d12pageable: IPageable, +} + + +IStateObjectProperties_UUID :: "de5fa827-9bf9-4f26-89ff-d7f56fde3860" +IStateObjectProperties :: struct #raw_union { + #subtype iunknown: IUnknown, + using id3d12stateobjectproperties_vtable: ^IStateObjectProperties_VTable, +} +IStateObjectProperties_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + GetShaderIdentifier: proc "stdcall" (this: ^IStateObjectProperties, pExportName: [^]u16) -> rawptr, + GetShaderStackSize: proc "stdcall" (this: ^IStateObjectProperties, pExportName: [^]u16) -> u64, + GetPipelineStackSize: proc "stdcall" (this: ^IStateObjectProperties) -> u64, + SetPipelineStackSize: proc "stdcall" (this: ^IStateObjectProperties, PipelineStackSizeInBytes: u64), +} + +STATE_SUBOBJECT_TYPE :: enum i32 { + STATE_OBJECT_CONFIG = 0, + GLOBAL_ROOT_SIGNATURE = 1, + LOCAL_ROOT_SIGNATURE = 2, + NODE_MASK = 3, + DXIL_LIBRARY = 5, + EXISTING_COLLECTION = 6, + SUBOBJECT_TO_EXPORTS_ASSOCIATION = 7, + DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION = 8, + RAYTRACING_SHADER_CONFIG = 9, + RAYTRACING_PIPELINE_CONFIG = 10, + HIT_GROUP = 11, + RAYTRACING_PIPELINE_CONFIG1 = 12, + MAX_VALID = 13, +} + +STATE_SUBOBJECT :: struct { + Type: STATE_SUBOBJECT_TYPE, + pDesc: rawptr, +} + +STATE_OBJECT_FLAGS :: enum u32 { // TODO: make bit_set + NONE = 0x0, + ALLOW_LOCAL_DEPENDENCIES_ON_EXTERNAL_DEFINITIONS = 0x1, + ALLOW_EXTERNAL_DEPENDENCIES_ON_LOCAL_DEFINITIONS = 0x2, + ALLOW_STATE_OBJECT_ADDITIONS = 0x4, +} + +STATE_OBJECT_CONFIG :: struct { + Flags: STATE_OBJECT_FLAGS, +} + +GLOBAL_ROOT_SIGNATURE :: struct { + pGlobalRootSignature: ^IRootSignature, +} + +LOCAL_ROOT_SIGNATURE :: struct { + pLocalRootSignature: ^IRootSignature, +} + +NODE_MASK :: struct { + NodeMask: u32, +} + +EXPORT_FLAGS :: enum u32 { // TODO: make bit_set + EXPORT_FLAG_NONE = 0x0, +} + +EXPORT_DESC :: struct { + Name: [^]u16, + ExportToRename: [^]u16, + Flags: EXPORT_FLAGS, +} + +DXIL_LIBRARY_DESC :: struct { + DXILLibrary: SHADER_BYTECODE, + NumExports: u32, + pExports: ^EXPORT_DESC, +} + +EXISTING_COLLECTION_DESC :: struct { + pExistingCollection: ^IStateObject, + NumExports: u32, + pExports: ^EXPORT_DESC, +} + +SUBOBJECT_TO_EXPORTS_ASSOCIATION :: struct { + pSubobjectToAssociate: ^STATE_SUBOBJECT, + NumExports: u32, + pExports: [^]^i16, +} + +DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION :: struct { + SubobjectToAssociate: ^i16, + NumExports: u32, + pExports: [^]^i16, +} + +HIT_GROUP_TYPE :: enum i32 { + TRIANGLES = 0, + PROCEDURAL_PRIMITIVE = 1, +} + +HIT_GROUP_DESC :: struct { + HitGroupExport: ^i16, + Type: HIT_GROUP_TYPE, + AnyHitShaderImport: ^i16, + ClosestHitShaderImport: ^i16, + IntersectionShaderImport: ^i16, +} + +RAYTRACING_SHADER_CONFIG :: struct { + MaxPayloadSizeInBytes: u32, + MaxAttributeSizeInBytes: u32, +} + +RAYTRACING_PIPELINE_CONFIG :: struct { + MaxTraceRecursionDepth: u32, +} + +RAYTRACING_PIPELINE_FLAGS :: enum u32 { // TODO: make bit_set + NONE = 0x0, + SKIP_TRIANGLES = 0x100, + SKIP_PROCEDURAL_PRIMITIVES = 0x200, +} + +RAYTRACING_PIPELINE_CONFIG1 :: struct { + MaxTraceRecursionDepth: u32, + Flags: RAYTRACING_PIPELINE_FLAGS, +} + +STATE_OBJECT_TYPE :: enum i32 { + COLLECTION = 0, + RAYTRACING_PIPELINE = 3, +} + +STATE_OBJECT_DESC :: struct { + Type: STATE_OBJECT_TYPE, + NumSubobjects: u32, + pSubobjects: ^STATE_SUBOBJECT, +} + +RAYTRACING_GEOMETRY_FLAGS :: enum u32 { // TODO: make bit_set + NONE = 0x0, + OPAQUE = 0x1, + NO_DUPLICATE_ANYHIT_INVOCATION = 0x2, +} + +RAYTRACING_GEOMETRY_TYPE :: enum i32 { + TRIANGLES = 0, + PROCEDURAL_PRIMITIVE_AABBS = 1, +} + +RAYTRACING_INSTANCE_FLAGS :: enum u32 { // TODO: make bit_set + NONE = 0x0, + TRIANGLE_CULL_DISABLE = 0x1, + TRIANGLE_FRONT_COUNTERCLOCKWISE = 0x2, + FORCE_OPAQUE = 0x4, + FORCE_NON_OPAQUE = 0x8, +} + +GPU_VIRTUAL_ADDRESS_AND_STRIDE :: struct { + StartAddress: GPU_VIRTUAL_ADDRESS, + StrideInBytes: u64, +} + +GPU_VIRTUAL_ADDRESS_RANGE :: struct { + StartAddress: GPU_VIRTUAL_ADDRESS, + SizeInBytes: u64, +} + +GPU_VIRTUAL_ADDRESS_RANGE_AND_STRIDE :: struct { + StartAddress: GPU_VIRTUAL_ADDRESS, + SizeInBytes: u64, + StrideInBytes: u64, +} + +RAYTRACING_GEOMETRY_TRIANGLES_DESC :: struct { + Transform3x4: GPU_VIRTUAL_ADDRESS, + IndexFormat: dxgi.FORMAT, + VertexFormat: dxgi.FORMAT, + IndexCount: u32, + VertexCount: u32, + IndexBuffer: GPU_VIRTUAL_ADDRESS, + VertexBuffer: GPU_VIRTUAL_ADDRESS_AND_STRIDE, +} + +RAYTRACING_AABB :: struct { + MinX: f32, + MinY: f32, + MinZ: f32, + MaxX: f32, + MaxY: f32, + MaxZ: f32, +} + +RAYTRACING_GEOMETRY_AABBS_DESC :: struct { + AABBCount: u64, + AABBs: GPU_VIRTUAL_ADDRESS_AND_STRIDE, +} + +RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS :: enum u32 { // TODO: make bit_set + NONE = 0x0, + ALLOW_UPDATE = 0x1, + ALLOW_COMPACTION = 0x2, + PREFER_FAST_TRACE = 0x4, + PREFER_FAST_BUILD = 0x8, + MINIMIZE_MEMORY = 0x10, + PERFORM_UPDATE = 0x20, +} + +RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE :: enum i32 { + CLONE = 0, + COMPACT = 1, + VISUALIZATION_DECODE_FOR_TOOLS = 2, + SERIALIZE = 3, + DESERIALIZE = 4, +} + +RAYTRACING_ACCELERATION_STRUCTURE_TYPE :: enum i32 { + TOP_LEVEL = 0, + BOTTOM_LEVEL = 1, +} + +ELEMENTS_LAYOUT :: enum i32 { + ARRAY = 0, + ARRAY_OF_POINTERS = 1, +} + +RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_TYPE :: enum i32 { + COMPACTED_SIZE = 0, + TOOLS_VISUALIZATION = 1, + SERIALIZATION = 2, + CURRENT_SIZE = 3, +} + +RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC :: struct { + DestBuffer: GPU_VIRTUAL_ADDRESS, + InfoType: RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_TYPE, +} + +RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_COMPACTED_SIZE_DESC :: struct { + CompactedSizeInBytes: u64, +} + +RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC :: struct { + DecodedSizeInBytes: u64, +} + +BUILD_RAYTRACING_ACCELERATION_STRUCTURE_TOOLS_VISUALIZATION_HEADER :: struct { + Type: RAYTRACING_ACCELERATION_STRUCTURE_TYPE, + NumDescs: u32, +} + +RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC :: struct { + SerializedSizeInBytes: u64, + NumBottomLevelAccelerationStructurePointers: u64, +} + +SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER :: struct { + DriverOpaqueGUID: GUID, + DriverOpaqueVersioningData: [16]u8, +} + +SERIALIZED_DATA_TYPE :: enum i32 { + SERIALIZED_DATA_RAYTRACING_ACCELERATION_STRUCTURE = 0, +} + +DRIVER_MATCHING_IDENTIFIER_STATUS :: enum i32 { + COMPATIBLE_WITH_DEVICE = 0, + UNSUPPORTED_TYPE = 1, + UNRECOGNIZED = 2, + INCOMPATIBLE_VERSION = 3, + INCOMPATIBLE_TYPE = 4, +} + +SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER :: struct { + DriverMatchingIdentifier: SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER, + SerializedSizeInBytesIncludingHeader: u64, + DeserializedSizeInBytes: u64, + NumBottomLevelAccelerationStructurePointersAfterHeader: u64, +} + +RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_CURRENT_SIZE_DESC :: struct { + CurrentSizeInBytes: u64, +} + +RAYTRACING_INSTANCE_DESC :: struct { + Transform: [3][4]f32, + InstanceID: u32, + InstanceContributionToHitGroupIndex: u32, + AccelerationStructure: GPU_VIRTUAL_ADDRESS, +} + +RAYTRACING_GEOMETRY_DESC :: struct { + Type: RAYTRACING_GEOMETRY_TYPE, + Flags: RAYTRACING_GEOMETRY_FLAGS, + using _: struct #raw_union { + Triangles: RAYTRACING_GEOMETRY_TRIANGLES_DESC, + AABBs: RAYTRACING_GEOMETRY_AABBS_DESC, + }, +} + +BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS :: struct { + Type: RAYTRACING_ACCELERATION_STRUCTURE_TYPE, + Flags: RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS, + NumDescs: u32, + DescsLayout: ELEMENTS_LAYOUT, + using _: struct #raw_union { + InstanceDescs: GPU_VIRTUAL_ADDRESS, + pGeometryDescs: ^RAYTRACING_GEOMETRY_DESC, + ppGeometryDescs: ^^RAYTRACING_GEOMETRY_DESC, + }, +} + +BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC :: struct { + DestAccelerationStructureData: GPU_VIRTUAL_ADDRESS, + Inputs: BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS, + SourceAccelerationStructureData: GPU_VIRTUAL_ADDRESS, + ScratchAccelerationStructureData: GPU_VIRTUAL_ADDRESS, +} + +RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO :: struct { + ResultDataMaxSizeInBytes: u64, + ScratchDataSizeInBytes: u64, + UpdateScratchDataSizeInBytes: u64, +} + +RAY_FLAGS :: enum u32 { // TODO: make bit_set + NONE = 0x0, + FORCE_OPAQUE = 0x1, + FORCE_NON_OPAQUE = 0x2, + ACCEPT_FIRST_HIT_AND_END_SEARCH = 0x4, + SKIP_CLOSEST_HIT_SHADER = 0x8, + CULL_BACK_FACING_TRIANGLES = 0x10, + CULL_FRONT_FACING_TRIANGLES = 0x20, + CULL_OPAQUE = 0x40, + CULL_NON_OPAQUE = 0x80, + SKIP_TRIANGLES = 0x100, + SKIP_PROCEDURAL_PRIMITIVES = 0x200, +} + +HIT_KIND :: enum i32 { + TRIANGLE_FRONT_FACE = 254, + TRIANGLE_BACK_FACE = 255, +} + + +IDevice5_UUID :: "8b4f173b-2fea-4b80-8f58-4307191ab95d" +IDevice5 :: struct #raw_union { + #subtype id3d12device4: IDevice4, + using id3d12device5_vtable: ^IDevice5_VTable, +} +IDevice5_VTable :: struct { + using id3d12device4_vtable: IDevice4_VTable, + CreateLifetimeTracker: proc "stdcall" (this: ^IDevice5, pOwner: ^ILifetimeOwner, riid: ^IID, ppvTracker: ^rawptr) -> HRESULT, + RemoveDevice: proc "stdcall" (this: ^IDevice5), + EnumerateMetaCommands: proc "stdcall" (this: ^IDevice5, pNumMetaCommands: ^u32, pDescs: ^META_COMMAND_DESC) -> HRESULT, + EnumerateMetaCommandParameters: proc "stdcall" (this: ^IDevice5, CommandId: ^GUID, Stage: META_COMMAND_PARAMETER_STAGE, pTotalStructureSizeInBytes: ^u32, pParameterCount: ^u32, pParameterDescs: ^META_COMMAND_PARAMETER_DESC) -> HRESULT, + CreateMetaCommand: proc "stdcall" (this: ^IDevice5, CommandId: ^GUID, NodeMask: u32, pCreationParametersData: rawptr, CreationParametersDataSizeInBytes: SIZE_T, riid: ^IID, ppMetaCommand: ^rawptr) -> HRESULT, + CreateStateObject: proc "stdcall" (this: ^IDevice5, pDesc: ^STATE_OBJECT_DESC, riid: ^IID, ppStateObject: ^rawptr) -> HRESULT, + GetRaytracingAccelerationStructurePrebuildInfo: proc "stdcall" (this: ^IDevice5, pDesc: ^BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS, pInfo: ^RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO), + CheckDriverMatchingIdentifier: proc "stdcall" (this: ^IDevice5, SerializedDataType: SERIALIZED_DATA_TYPE, pIdentifierToCheck: ^SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER) -> DRIVER_MATCHING_IDENTIFIER_STATUS, +} + +AUTO_BREADCRUMB_OP :: enum i32 { + SETMARKER = 0, + BEGINEVENT = 1, + ENDEVENT = 2, + DRAWINSTANCED = 3, + DRAWINDEXEDINSTANCED = 4, + EXECUTEINDIRECT = 5, + DISPATCH = 6, + COPYBUFFERREGION = 7, + COPYTEXTUREREGION = 8, + COPYRESOURCE = 9, + COPYTILES = 10, + RESOLVESUBRESOURCE = 11, + CLEARRENDERTARGETVIEW = 12, + CLEARUNORDEREDACCESSVIEW = 13, + CLEARDEPTHSTENCILVIEW = 14, + RESOURCEBARRIER = 15, + EXECUTEBUNDLE = 16, + PRESENT = 17, + RESOLVEQUERYDATA = 18, + BEGINSUBMISSION = 19, + ENDSUBMISSION = 20, + DECODEFRAME = 21, + PROCESSFRAMES = 22, + ATOMICCOPYBUFFERUINT = 23, + ATOMICCOPYBUFFERUINT64 = 24, + RESOLVESUBRESOURCEREGION = 25, + WRITEBUFFERIMMEDIATE = 26, + DECODEFRAME1 = 27, + SETPROTECTEDRESOURCESESSION = 28, + DECODEFRAME2 = 29, + PROCESSFRAMES1 = 30, + BUILDRAYTRACINGACCELERATIONSTRUCTURE = 31, + EMITRAYTRACINGACCELERATIONSTRUCTUREPOSTBUILDINFO = 32, + COPYRAYTRACINGACCELERATIONSTRUCTURE = 33, + DISPATCHRAYS = 34, + INITIALIZEMETACOMMAND = 35, + EXECUTEMETACOMMAND = 36, + ESTIMATEMOTION = 37, + RESOLVEMOTIONVECTORHEAP = 38, + SETPIPELINESTATE1 = 39, + INITIALIZEEXTENSIONCOMMAND = 40, + EXECUTEEXTENSIONCOMMAND = 41, + DISPATCHMESH = 42, +} + +AUTO_BREADCRUMB_NODE :: struct { + pCommandListDebugNameA: cstring, + pCommandListDebugNameW: [^]u16, + pCommandQueueDebugNameA: cstring, + pCommandQueueDebugNameW: [^]u16, + pCommandList: ^IGraphicsCommandList, + pCommandQueue: ^ICommandQueue, + BreadcrumbCount: u32, + pLastBreadcrumbValue: ^u32, + pCommandHistory: ^AUTO_BREADCRUMB_OP, + pNext: ^AUTO_BREADCRUMB_NODE, +} + +DRED_BREADCRUMB_CONTEXT :: struct { + BreadcrumbIndex: u32, + pContextString: [^]u16, +} + +AUTO_BREADCRUMB_NODE1 :: struct { + pCommandListDebugNameA: cstring, + pCommandListDebugNameW: [^]u16, + pCommandQueueDebugNameA: cstring, + pCommandQueueDebugNameW: [^]u16, + pCommandList: ^IGraphicsCommandList, + pCommandQueue: ^ICommandQueue, + BreadcrumbCount: u32, + pLastBreadcrumbValue: ^u32, + pCommandHistory: ^AUTO_BREADCRUMB_OP, + pNext: ^AUTO_BREADCRUMB_NODE1, + BreadcrumbContextsCount: u32, + pBreadcrumbContexts: ^DRED_BREADCRUMB_CONTEXT, +} + +DRED_VERSION :: enum i32 { + _1_0 = 1, + _1_1 = 2, + _1_2 = 3, +} + +DRED_FLAGS :: enum u32 { // TODO: make bit_set + NONE = 0x0, + FORCE_ENABLE = 0x1, + DISABLE_AUTOBREADCRUMBS = 0x2, +} + +DRED_ENABLEMENT :: enum i32 { + SYSTEM_CONTROLLED = 0, + FORCED_OFF = 1, + FORCED_ON = 2, +} + +DEVICE_REMOVED_EXTENDED_DATA :: struct { + Flags: DRED_FLAGS, + pHeadAutoBreadcrumbNode: ^AUTO_BREADCRUMB_NODE, +} + +DRED_ALLOCATION_TYPE :: enum i32 { + COMMAND_QUEUE = 19, + COMMAND_ALLOCATOR = 20, + PIPELINE_STATE = 21, + COMMAND_LIST = 22, + FENCE = 23, + DESCRIPTOR_HEAP = 24, + HEAP = 25, + QUERY_HEAP = 27, + COMMAND_SIGNATURE = 28, + PIPELINE_LIBRARY = 29, + VIDEO_DECODER = 30, + VIDEO_PROCESSOR = 32, + RESOURCE = 34, + PASS = 35, + CRYPTOSESSION = 36, + CRYPTOSESSIONPOLICY = 37, + PROTECTEDRESOURCESESSION = 38, + VIDEO_DECODER_HEAP = 39, + COMMAND_POOL = 40, + COMMAND_RECORDER = 41, + STATE_OBJECT = 42, + METACOMMAND = 43, + SCHEDULINGGROUP = 44, + VIDEO_MOTION_ESTIMATOR = 45, + VIDEO_MOTION_VECTOR_HEAP = 46, + VIDEO_EXTENSION_COMMAND = 47, + INVALID = -1, +} + +DRED_ALLOCATION_NODE :: struct { + ObjectNameA: cstring, + ObjectNameW: ^i16, + AllocationType: DRED_ALLOCATION_TYPE, + pNext: ^DRED_ALLOCATION_NODE, +} + +DRED_ALLOCATION_NODE1 :: struct { + ObjectNameA: cstring, + ObjectNameW: ^i16, + AllocationType: DRED_ALLOCATION_TYPE, + pNext: ^DRED_ALLOCATION_NODE1, + pObject: ^IUnknown, +} + +DRED_AUTO_BREADCRUMBS_OUTPUT :: struct { + pHeadAutoBreadcrumbNode: ^AUTO_BREADCRUMB_NODE, +} + +DRED_AUTO_BREADCRUMBS_OUTPUT1 :: struct { + pHeadAutoBreadcrumbNode: ^AUTO_BREADCRUMB_NODE1, +} + +DRED_PAGE_FAULT_OUTPUT :: struct { + PageFaultVA: GPU_VIRTUAL_ADDRESS, + pHeadExistingAllocationNode: ^DRED_ALLOCATION_NODE, + pHeadRecentFreedAllocationNode: ^DRED_ALLOCATION_NODE, +} + +DRED_PAGE_FAULT_OUTPUT1 :: struct { + PageFaultVA: GPU_VIRTUAL_ADDRESS, + pHeadExistingAllocationNode: ^DRED_ALLOCATION_NODE1, + pHeadRecentFreedAllocationNode: ^DRED_ALLOCATION_NODE1, +} + +DEVICE_REMOVED_EXTENDED_DATA1 :: struct { + DeviceRemovedReason: HRESULT, + AutoBreadcrumbsOutput: DRED_AUTO_BREADCRUMBS_OUTPUT, + PageFaultOutput: DRED_PAGE_FAULT_OUTPUT, +} + +DEVICE_REMOVED_EXTENDED_DATA2 :: struct { + DeviceRemovedReason: HRESULT, + AutoBreadcrumbsOutput: DRED_AUTO_BREADCRUMBS_OUTPUT1, + PageFaultOutput: DRED_PAGE_FAULT_OUTPUT1, +} + +VERSIONED_DEVICE_REMOVED_EXTENDED_DATA :: struct { + Version: DRED_VERSION, + using _: struct #raw_union { + Dred_1_0: DEVICE_REMOVED_EXTENDED_DATA, + Dred_1_1: DEVICE_REMOVED_EXTENDED_DATA1, + Dred_1_2: DEVICE_REMOVED_EXTENDED_DATA2, + }, +} + + +IDeviceRemovedExtendedDataSettings_UUID :: "82BC481C-6B9B-4030-AEDB-7EE3D1DF1E63" +IDeviceRemovedExtendedDataSettings :: struct #raw_union { + #subtype iunknown: IUnknown, + using id3d12deviceremovedextendeddatasettings_vtable: ^IDeviceRemovedExtendedDataSettings_VTable, +} +IDeviceRemovedExtendedDataSettings_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + SetAutoBreadcrumbsEnablement: proc "stdcall" (this: ^IDeviceRemovedExtendedDataSettings, Enablement: DRED_ENABLEMENT), + SetPageFaultEnablement: proc "stdcall" (this: ^IDeviceRemovedExtendedDataSettings, Enablement: DRED_ENABLEMENT), + SetWatsonDumpEnablement: proc "stdcall" (this: ^IDeviceRemovedExtendedDataSettings, Enablement: DRED_ENABLEMENT), +} + + +IDeviceRemovedExtendedDataSettings1_UUID :: "DBD5AE51-3317-4F0A-ADF9-1D7CEDCAAE0B" +IDeviceRemovedExtendedDataSettings1 :: struct #raw_union { + #subtype id3d12deviceremovedextendeddatasettings: IDeviceRemovedExtendedDataSettings, + using id3d12deviceremovedextendeddatasettings1_vtable: ^IDeviceRemovedExtendedDataSettings1_VTable, +} +IDeviceRemovedExtendedDataSettings1_VTable :: struct { + using id3d12deviceremovedextendeddatasettings_vtable: IDeviceRemovedExtendedDataSettings_VTable, + SetBreadcrumbContextEnablement: proc "stdcall" (this: ^IDeviceRemovedExtendedDataSettings1, Enablement: DRED_ENABLEMENT), +} + + +IDeviceRemovedExtendedData_UUID :: "98931D33-5AE8-4791-AA3C-1A73A2934E71" +IDeviceRemovedExtendedData :: struct #raw_union { + #subtype iunknown: IUnknown, + using id3d12deviceremovedextendeddata_vtable: ^IDeviceRemovedExtendedData_VTable, +} +IDeviceRemovedExtendedData_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + GetAutoBreadcrumbsOutput: proc "stdcall" (this: ^IDeviceRemovedExtendedData, pOutput: ^DRED_AUTO_BREADCRUMBS_OUTPUT) -> HRESULT, + GetPageFaultAllocationOutput: proc "stdcall" (this: ^IDeviceRemovedExtendedData, pOutput: ^DRED_PAGE_FAULT_OUTPUT) -> HRESULT, +} + + +IDeviceRemovedExtendedData1_UUID :: "9727A022-CF1D-4DDA-9EBA-EFFA653FC506" +IDeviceRemovedExtendedData1 :: struct #raw_union { + #subtype id3d12deviceremovedextendeddata: IDeviceRemovedExtendedData, + using id3d12deviceremovedextendeddata1_vtable: ^IDeviceRemovedExtendedData1_VTable, +} +IDeviceRemovedExtendedData1_VTable :: struct { + using id3d12deviceremovedextendeddata_vtable: IDeviceRemovedExtendedData_VTable, + GetAutoBreadcrumbsOutput1: proc "stdcall" (this: ^IDeviceRemovedExtendedData1, pOutput: ^DRED_AUTO_BREADCRUMBS_OUTPUT1) -> HRESULT, + GetPageFaultAllocationOutput1: proc "stdcall" (this: ^IDeviceRemovedExtendedData1, pOutput: ^DRED_PAGE_FAULT_OUTPUT1) -> HRESULT, +} + +BACKGROUND_PROCESSING_MODE :: enum i32 { + ALLOWED = 0, + ALLOW_INTRUSIVE_MEASUREMENTS = 1, + DISABLE_BACKGROUND_WORK = 2, + DISABLE_PROFILING_BY_SYSTEM = 3, +} + +MEASUREMENTS_ACTION :: enum i32 { + KEEP_ALL = 0, + COMMIT_RESULTS = 1, + COMMIT_RESULTS_HIGH_PRIORITY = 2, + DISCARD_PREVIOUS = 3, +} + + +IDevice6_UUID :: "c70b221b-40e4-4a17-89af-025a0727a6dc" +IDevice6 :: struct #raw_union { + #subtype id3d12device5: IDevice5, + using id3d12device6_vtable: ^IDevice6_VTable, +} +IDevice6_VTable :: struct { + using id3d12device5_vtable: IDevice5_VTable, + SetBackgroundProcessingMode: proc "stdcall" (this: ^IDevice6, Mode: BACKGROUND_PROCESSING_MODE, MeasurementsAction: MEASUREMENTS_ACTION, hEventToSignalUponCompletion: HANDLE, pbFurtherMeasurementsDesired: ^BOOL) -> HRESULT, +} + +FEATURE_DATA_PROTECTED_RESOURCE_SESSION_TYPE_COUNT :: struct { + NodeIndex: u32, + Count: u32, +} + +FEATURE_DATA_PROTECTED_RESOURCE_SESSION_TYPES :: struct { + NodeIndex: u32, + Count: u32, + pTypes: ^GUID, +} + +PROTECTED_RESOURCE_SESSION_DESC1 :: struct { + NodeMask: u32, + Flags: PROTECTED_RESOURCE_SESSION_FLAGS, + ProtectionType: GUID, +} + + +IProtectedResourceSession1_UUID :: "D6F12DD6-76FB-406E-8961-4296EEFC0409" +IProtectedResourceSession1 :: struct #raw_union { + #subtype id3d12protectedresourcesession: IProtectedResourceSession, + using id3d12protectedresourcesession1_vtable: ^IProtectedResourceSession1_VTable, +} +IProtectedResourceSession1_VTable :: struct { + using id3d12protectedresourcesession_vtable: IProtectedResourceSession_VTable, + GetDesc1: proc "stdcall" (this: ^IProtectedResourceSession1) -> PROTECTED_RESOURCE_SESSION_DESC1, +} + + +IDevice7_UUID :: "5c014b53-68a1-4b9b-8bd1-dd6046b9358b" +IDevice7 :: struct #raw_union { + #subtype id3d12device6: IDevice6, + using id3d12device7_vtable: ^IDevice7_VTable, +} +IDevice7_VTable :: struct { + using id3d12device6_vtable: IDevice6_VTable, + AddToStateObject: proc "stdcall" (this: ^IDevice7, pAddition: ^STATE_OBJECT_DESC, pStateObjectToGrowFrom: ^IStateObject, riid: ^IID, ppNewStateObject: ^rawptr) -> HRESULT, + CreateProtectedResourceSession1: proc "stdcall" (this: ^IDevice7, pDesc: ^PROTECTED_RESOURCE_SESSION_DESC1, riid: ^IID, ppSession: ^rawptr) -> HRESULT, +} + + +IDevice8_UUID :: "9218E6BB-F944-4F7E-A75C-B1B2C7B701F3" +IDevice8 :: struct #raw_union { + #subtype id3d12device7: IDevice7, + using id3d12device8_vtable: ^IDevice8_VTable, +} +IDevice8_VTable :: struct { + using id3d12device7_vtable: IDevice7_VTable, + GetResourceAllocationInfo2: proc "stdcall" (this: ^IDevice8, visibleMask: u32, numResourceDescs: u32, pResourceDescs: ^RESOURCE_DESC1, pResourceAllocationInfo1: ^RESOURCE_ALLOCATION_INFO1) -> RESOURCE_ALLOCATION_INFO, + CreateCommittedResource2: proc "stdcall" (this: ^IDevice8, pHeapProperties: ^HEAP_PROPERTIES, HeapFlags: HEAP_FLAGS, pDesc: ^RESOURCE_DESC1, InitialResourceState: RESOURCE_STATES, pOptimizedClearValue: ^CLEAR_VALUE, pProtectedSession: ^IProtectedResourceSession, riidResource: ^IID, ppvResource: ^rawptr) -> HRESULT, + CreatePlacedResource1: proc "stdcall" (this: ^IDevice8, pHeap: ^IHeap, HeapOffset: u64, pDesc: ^RESOURCE_DESC1, InitialState: RESOURCE_STATES, pOptimizedClearValue: ^CLEAR_VALUE, riid: ^IID, ppvResource: ^rawptr) -> HRESULT, + CreateSamplerFeedbackUnorderedAccessView: proc "stdcall" (this: ^IDevice8, pTargetedResource: ^IResource, pFeedbackResource: ^IResource, DestDescriptor: CPU_DESCRIPTOR_HANDLE), + GetCopyableFootprints1: proc "stdcall" (this: ^IDevice8, pResourceDesc: ^RESOURCE_DESC1, FirstSubresource: u32, NumSubresources: u32, BaseOffset: u64, pLayouts: ^PLACED_SUBRESOURCE_FOOTPRINT, pNumRows: ^u32, pRowSizeInBytes: ^u64, pTotalBytes: ^u64), +} + + +IResource1_UUID :: "9D5E227A-4430-4161-88B3-3ECA6BB16E19" +IResource1 :: struct #raw_union { + #subtype id3d12resource: IResource, + using id3d12resource1_vtable: ^IResource1_VTable, +} +IResource1_VTable :: struct { + using id3d12resource_vtable: IResource_VTable, + GetProtectedResourceSession: proc "stdcall" (this: ^IResource1, riid: ^IID, ppProtectedSession: ^rawptr) -> HRESULT, +} + + +IResource2_UUID :: "BE36EC3B-EA85-4AEB-A45A-E9D76404A495" +IResource2 :: struct #raw_union { + #subtype id3d12resource1: IResource1, + using id3d12resource2_vtable: ^IResource2_VTable, +} +IResource2_VTable :: struct { + using id3d12resource1_vtable: IResource1_VTable, + GetDesc1: proc "stdcall" (this: ^IResource2) -> RESOURCE_DESC1, +} + + +IHeap1_UUID :: "572F7389-2168-49E3-9693-D6DF5871BF6D" +IHeap1 :: struct #raw_union { + #subtype id3d12heap: IHeap, + using id3d12heap1_vtable: ^IHeap1_VTable, +} +IHeap1_VTable :: struct { + using id3d12heap_vtable: IHeap_VTable, + GetProtectedResourceSession: proc "stdcall" (this: ^IHeap1, riid: ^IID, ppProtectedSession: ^rawptr) -> HRESULT, +} + + +IGraphicsCommandList3_UUID :: "6FDA83A7-B84C-4E38-9AC8-C7BD22016B3D" +IGraphicsCommandList3 :: struct #raw_union { + #subtype id3d12graphicscommandlist2: IGraphicsCommandList2, + using id3d12graphicscommandlist3_vtable: ^IGraphicsCommandList3_VTable, +} +IGraphicsCommandList3_VTable :: struct { + using id3d12graphicscommandlist2_vtable: IGraphicsCommandList2_VTable, + SetProtectedResourceSession: proc "stdcall" (this: ^IGraphicsCommandList3, pProtectedResourceSession: ^IProtectedResourceSession), +} + +RENDER_PASS_BEGINNING_ACCESS_TYPE :: enum i32 { + DISCARD = 0, + PRESERVE = 1, + CLEAR = 2, + NO_ACCESS = 3, +} + +RENDER_PASS_BEGINNING_ACCESS_CLEAR_PARAMETERS :: struct { + ClearValue: CLEAR_VALUE, +} + +RENDER_PASS_BEGINNING_ACCESS :: struct { + Type: RENDER_PASS_BEGINNING_ACCESS_TYPE, + using _: struct #raw_union { + Clear: RENDER_PASS_BEGINNING_ACCESS_CLEAR_PARAMETERS, + }, +} + +RENDER_PASS_ENDING_ACCESS_TYPE :: enum i32 { + DISCARD = 0, + PRESERVE = 1, + RESOLVE = 2, + NO_ACCESS = 3, +} + +RENDER_PASS_ENDING_ACCESS_RESOLVE_SUBRESOURCE_PARAMETERS :: struct { + SrcSubresource: u32, + DstSubresource: u32, + DstX: u32, + DstY: u32, + SrcRect: RECT, +} + +RENDER_PASS_ENDING_ACCESS_RESOLVE_PARAMETERS :: struct { + pSrcResource: ^IResource, + pDstResource: ^IResource, + SubresourceCount: u32, + pSubresourceParameters: ^RENDER_PASS_ENDING_ACCESS_RESOLVE_SUBRESOURCE_PARAMETERS, + Format: dxgi.FORMAT, + ResolveMode: RESOLVE_MODE, + PreserveResolveSource: BOOL, +} + +RENDER_PASS_ENDING_ACCESS :: struct { + Type: RENDER_PASS_ENDING_ACCESS_TYPE, + using _: struct #raw_union { + Resolve: RENDER_PASS_ENDING_ACCESS_RESOLVE_PARAMETERS, + }, +} + +RENDER_PASS_RENDER_TARGET_DESC :: struct { + cpuDescriptor: CPU_DESCRIPTOR_HANDLE, + BeginningAccess: RENDER_PASS_BEGINNING_ACCESS, + EndingAccess: RENDER_PASS_ENDING_ACCESS, +} + +RENDER_PASS_DEPTH_STENCIL_DESC :: struct { + cpuDescriptor: CPU_DESCRIPTOR_HANDLE, + DepthBeginningAccess: RENDER_PASS_BEGINNING_ACCESS, + StencilBeginningAccess: RENDER_PASS_BEGINNING_ACCESS, + DepthEndingAccess: RENDER_PASS_ENDING_ACCESS, + StencilEndingAccess: RENDER_PASS_ENDING_ACCESS, +} + +RENDER_PASS_FLAGS :: enum u32 { // TODO: make bit_set + NONE = 0x0, + ALLOW_UAV_WRITES = 0x1, + SUSPENDING_PASS = 0x2, + RESUMING_PASS = 0x4, +} + + +IMetaCommand_UUID :: "DBB84C27-36CE-4FC9-B801-F048C46AC570" +IMetaCommand :: struct #raw_union { + #subtype id3d12pageable: IPageable, + using id3d12metacommand_vtable: ^IMetaCommand_VTable, +} +IMetaCommand_VTable :: struct { + using id3d12devicechild_vtable: IDeviceChild_VTable, + GetRequiredParameterResourceSize: proc "stdcall" (this: ^IMetaCommand, Stage: META_COMMAND_PARAMETER_STAGE, ParameterIndex: u32) -> u64, +} + +DISPATCH_RAYS_DESC :: struct { + RayGenerationShaderRecord: GPU_VIRTUAL_ADDRESS_RANGE, + MissShaderTable: GPU_VIRTUAL_ADDRESS_RANGE_AND_STRIDE, + HitGroupTable: GPU_VIRTUAL_ADDRESS_RANGE_AND_STRIDE, + CallableShaderTable: GPU_VIRTUAL_ADDRESS_RANGE_AND_STRIDE, + Width: u32, + Height: u32, + Depth: u32, +} + + +IGraphicsCommandList4_UUID :: "8754318e-d3a9-4541-98cf-645b50dc4874" +IGraphicsCommandList4 :: struct #raw_union { + #subtype id3d12graphicscommandlist3: IGraphicsCommandList3, + using id3d12graphicscommandlist4_vtable: ^IGraphicsCommandList4_VTable, +} +IGraphicsCommandList4_VTable :: struct { + using id3d12graphicscommandlist3_vtable: IGraphicsCommandList3_VTable, + BeginRenderPass: proc "stdcall" (this: ^IGraphicsCommandList4, NumRenderTargets: u32, pRenderTargets: ^RENDER_PASS_RENDER_TARGET_DESC, pDepthStencil: ^RENDER_PASS_DEPTH_STENCIL_DESC, Flags: RENDER_PASS_FLAGS), + EndRenderPass: proc "stdcall" (this: ^IGraphicsCommandList4), + InitializeMetaCommand: proc "stdcall" (this: ^IGraphicsCommandList4, pMetaCommand: ^IMetaCommand, pInitializationParametersData: rawptr, InitializationParametersDataSizeInBytes: SIZE_T), + ExecuteMetaCommand: proc "stdcall" (this: ^IGraphicsCommandList4, pMetaCommand: ^IMetaCommand, pExecutionParametersData: rawptr, ExecutionParametersDataSizeInBytes: SIZE_T), + BuildRaytracingAccelerationStructure: proc "stdcall" (this: ^IGraphicsCommandList4, pDesc: ^BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC, NumPostbuildInfoDescs: u32, pPostbuildInfoDescs: ^RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC), + EmitRaytracingAccelerationStructurePostbuildInfo: proc "stdcall" (this: ^IGraphicsCommandList4, pDesc: ^RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC, NumSourceAccelerationStructures: u32, pSourceAccelerationStructureData: ^GPU_VIRTUAL_ADDRESS), + CopyRaytracingAccelerationStructure: proc "stdcall" (this: ^IGraphicsCommandList4, DestAccelerationStructureData: GPU_VIRTUAL_ADDRESS, SourceAccelerationStructureData: GPU_VIRTUAL_ADDRESS, Mode: RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE), + SetPipelineState1: proc "stdcall" (this: ^IGraphicsCommandList4, pStateObject: ^IStateObject), + DispatchRays: proc "stdcall" (this: ^IGraphicsCommandList4, pDesc: ^DISPATCH_RAYS_DESC), +} + + +ITools_UUID :: "7071e1f0-e84b-4b33-974f-12fa49de65c5" +ITools :: struct #raw_union { + #subtype iunknown: IUnknown, + using id3d12tools_vtable: ^ITools_VTable, +} +ITools_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + EnableShaderInstrumentation: proc "stdcall" (this: ^ITools, bEnable: BOOL), + ShaderInstrumentationEnabled: proc "stdcall" (this: ^ITools) -> BOOL, +} + +SUBRESOURCE_DATA :: struct { + pData: rawptr, + RowPitch: i64, + SlicePitch: i64, +} + +MEMCPY_DEST :: struct { + pData: rawptr, + RowPitch: SIZE_T, + SlicePitch: SIZE_T, +} + + +IDebug_UUID :: "344488b7-6846-474b-b989-f027448245e0" +IDebug :: struct #raw_union { + #subtype iunknown: IUnknown, + using id3d12debug_vtable: ^IDebug_VTable, +} +IDebug_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + EnableDebugLayer: proc "stdcall" (this: ^IDebug), +} + +GPU_BASED_VALIDATION_FLAGS :: enum u32 { // TODO: make bit_set + NONE = 0x0, + DISABLE_STATE_TRACKING = 0x1, +} + + +IDebug1_UUID :: "affaa4ca-63fe-4d8e-b8ad-159000af4304" +IDebug1 :: struct #raw_union { + #subtype iunknown: IUnknown, + using id3d12debug1_vtable: ^IDebug1_VTable, +} +IDebug1_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + EnableDebugLayer: proc "stdcall" (this: ^IDebug1), + SetEnableGPUBasedValidation: proc "stdcall" (this: ^IDebug1, Enable: BOOL), + SetEnableSynchronizedCommandQueueValidation: proc "stdcall" (this: ^IDebug1, Enable: BOOL), +} + + +IDebug2_UUID :: "93a665c4-a3b2-4e5d-b692-a26ae14e3374" +IDebug2 :: struct #raw_union { + #subtype iunknown: IUnknown, + using id3d12debug2_vtable: ^IDebug2_VTable, +} +IDebug2_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + SetGPUBasedValidationFlags: proc "stdcall" (this: ^IDebug2, Flags: GPU_BASED_VALIDATION_FLAGS), +} + + +IDebug3_UUID :: "5cf4e58f-f671-4ff1-a542-3686e3d153d1" +IDebug3 :: struct #raw_union { + #subtype id3d12debug: IDebug, + using id3d12debug3_vtable: ^IDebug3_VTable, +} +IDebug3_VTable :: struct { + using id3d12debug_vtable: IDebug_VTable, + SetEnableGPUBasedValidation: proc "stdcall" (this: ^IDebug3, Enable: BOOL), + SetEnableSynchronizedCommandQueueValidation: proc "stdcall" (this: ^IDebug3, Enable: BOOL), + SetGPUBasedValidationFlags: proc "stdcall" (this: ^IDebug3, Flags: GPU_BASED_VALIDATION_FLAGS), +} + +RLDO_FLAGS :: enum u32 { // TODO: make bit_set + NONE = 0x0, + SUMMARY = 0x1, + DETAIL = 0x2, + IGNORE_INTERNAL = 0x4, +} + +DEBUG_DEVICE_PARAMETER_TYPE :: enum i32 { + FEATURE_FLAGS = 0, + GPU_BASED_VALIDATION_SETTINGS = 1, + GPU_SLOWDOWN_PERFORMANCE_FACTOR = 2, +} + +DEBUG_FEATURE :: enum i32 { // TODO: make bit_set + NONE = 0, + ALLOW_BEHAVIOR_CHANGING_DEBUG_AIDS = 1, + CONSERVATIVE_RESOURCE_STATE_TRACKING = 2, + DISABLE_VIRTUALIZED_BUNDLES_VALIDATION = 4, + EMULATE_WINDOWS7 = 8, +} + +GPU_BASED_VALIDATION_SHADER_PATCH_MODE :: enum i32 { + NONE = 0, + STATE_TRACKING_ONLY = 1, + UNGUARDED_VALIDATION = 2, + GUARDED_VALIDATION = 3, + NUM_GPU_BASED_VALIDATION_SHADER_PATCH_MODES = 4, +} + +GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAGS :: enum u32 { // TODO: make bit_set + GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAG_NONE = 0x0, + GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAG_FRONT_LOAD_CREATE_TRACKING_ONLY_SHADERS = 0x1, + GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAG_FRONT_LOAD_CREATE_UNGUARDED_VALIDATION_SHADERS = 0x2, + GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAG_FRONT_LOAD_CREATE_GUARDED_VALIDATION_SHADERS = 0x4, + VALID_MASK = 0x7, +} + +DEBUG_DEVICE_GPU_BASED_VALIDATION_SETTINGS :: struct { + MaxMessagesPerCommandList: u32, + DefaultShaderPatchMode: GPU_BASED_VALIDATION_SHADER_PATCH_MODE, + PipelineStateCreateFlags: GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAGS, +} + +DEBUG_DEVICE_GPU_SLOWDOWN_PERFORMANCE_FACTOR :: struct { + SlowdownFactor: f32, +} + + +IDebugDevice1_UUID :: "a9b71770-d099-4a65-a698-3dee10020f88" +IDebugDevice1 :: struct #raw_union { + #subtype iunknown: IUnknown, + using id3d12debugdevice1_vtable: ^IDebugDevice1_VTable, +} +IDebugDevice1_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + SetDebugParameter: proc "stdcall" (this: ^IDebugDevice1, Type: DEBUG_DEVICE_PARAMETER_TYPE, pData: rawptr, DataSize: u32) -> HRESULT, + GetDebugParameter: proc "stdcall" (this: ^IDebugDevice1, Type: DEBUG_DEVICE_PARAMETER_TYPE, pData: rawptr, DataSize: u32) -> HRESULT, + ReportLiveDeviceObjects: proc "stdcall" (this: ^IDebugDevice1, Flags: RLDO_FLAGS) -> HRESULT, +} + + +IDebugDevice_UUID :: "3febd6dd-4973-4787-8194-e45f9e28923e" +IDebugDevice :: struct #raw_union { + #subtype iunknown: IUnknown, + using id3d12debugdevice_vtable: ^IDebugDevice_VTable, +} +IDebugDevice_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + SetFeatureMask: proc "stdcall" (this: ^IDebugDevice, Mask: DEBUG_FEATURE) -> HRESULT, + GetFeatureMask: proc "stdcall" (this: ^IDebugDevice) -> DEBUG_FEATURE, + ReportLiveDeviceObjects: proc "stdcall" (this: ^IDebugDevice, Flags: RLDO_FLAGS) -> HRESULT, +} + + +IDebugDevice2_UUID :: "60eccbc1-378d-4df1-894c-f8ac5ce4d7dd" +IDebugDevice2 :: struct #raw_union { + #subtype id3d12debugdevice: IDebugDevice, + using id3d12debugdevice2_vtable: ^IDebugDevice2_VTable, +} +IDebugDevice2_VTable :: struct { + using id3d12debugdevice_vtable: IDebugDevice_VTable, + SetDebugParameter: proc "stdcall" (this: ^IDebugDevice2, Type: DEBUG_DEVICE_PARAMETER_TYPE, pData: rawptr, DataSize: u32) -> HRESULT, + GetDebugParameter: proc "stdcall" (this: ^IDebugDevice2, Type: DEBUG_DEVICE_PARAMETER_TYPE, pData: rawptr, DataSize: u32) -> HRESULT, +} + + + +IDebugCommandQueue_UUID :: "09e0bf36-54ac-484f-8847-4baeeab6053a" +IDebugCommandQueue :: struct #raw_union { + #subtype iunknown: IUnknown, + using id3d12debugcommandqueue_vtable: ^IDebugCommandQueue_VTable, +} +IDebugCommandQueue_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + AssertResourceState: proc "stdcall" (this: ^IDebugCommandQueue, pResource: ^IResource, Subresource: u32, State: u32) -> BOOL, +} + +DEBUG_COMMAND_LIST_PARAMETER_TYPE :: enum i32 { + DEBUG_COMMAND_LIST_PARAMETER_GPU_BASED_VALIDATION_SETTINGS = 0, +} + +DEBUG_COMMAND_LIST_GPU_BASED_VALIDATION_SETTINGS :: struct { + ShaderPatchMode: GPU_BASED_VALIDATION_SHADER_PATCH_MODE, +} + + +IDebugCommandList1_UUID :: "102ca951-311b-4b01-b11f-ecb83e061b37" +IDebugCommandList1 :: struct #raw_union { + #subtype iunknown: IUnknown, + using id3d12debugcommandlist1_vtable: ^IDebugCommandList1_VTable, +} +IDebugCommandList1_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + AssertResourceState: proc "stdcall" (this: ^IDebugCommandList1, pResource: ^IResource, Subresource: u32, State: u32) -> BOOL, + SetDebugParameter: proc "stdcall" (this: ^IDebugCommandList1, Type: DEBUG_COMMAND_LIST_PARAMETER_TYPE, pData: rawptr, DataSize: u32) -> HRESULT, + GetDebugParameter: proc "stdcall" (this: ^IDebugCommandList1, Type: DEBUG_COMMAND_LIST_PARAMETER_TYPE, pData: rawptr, DataSize: u32) -> HRESULT, +} + + +IDebugCommandList_UUID :: "09e0bf36-54ac-484f-8847-4baeeab6053f" +IDebugCommandList :: struct #raw_union { + #subtype iunknown: IUnknown, + using id3d12debugcommandlist_vtable: ^IDebugCommandList_VTable, +} +IDebugCommandList_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + AssertResourceState: proc "stdcall" (this: ^IDebugCommandList, pResource: ^IResource, Subresource: u32, State: u32) -> BOOL, + SetFeatureMask: proc "stdcall" (this: ^IDebugCommandList, Mask: DEBUG_FEATURE) -> HRESULT, + GetFeatureMask: proc "stdcall" (this: ^IDebugCommandList) -> DEBUG_FEATURE, +} + + +IDebugCommandList2_UUID :: "aeb575cf-4e06-48be-ba3b-c450fc96652e" +IDebugCommandList2 :: struct #raw_union { + #subtype id3d12debugcommandlist: IDebugCommandList, + using id3d12debugcommandlist2_vtable: ^IDebugCommandList2_VTable, +} +IDebugCommandList2_VTable :: struct { + using id3d12debugcommandlist_vtable: IDebugCommandList_VTable, + SetDebugParameter: proc "stdcall" (this: ^IDebugCommandList2, Type: DEBUG_COMMAND_LIST_PARAMETER_TYPE, pData: rawptr, DataSize: u32) -> HRESULT, + GetDebugParameter: proc "stdcall" (this: ^IDebugCommandList2, Type: DEBUG_COMMAND_LIST_PARAMETER_TYPE, pData: rawptr, DataSize: u32) -> HRESULT, +} + + +ISharingContract_UUID :: "0adf7d52-929c-4e61-addb-ffed30de66ef" +ISharingContract :: struct #raw_union { + #subtype iunknown: IUnknown, + using id3d12sharingcontract_vtable: ^ISharingContract_VTable, +} +ISharingContract_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + Present: proc "stdcall" (this: ^ISharingContract, pResource: ^IResource, Subresource: u32, window: HWND), + SharedFenceSignal: proc "stdcall" (this: ^ISharingContract, pFence: ^IFence, FenceValue: u64), + BeginCapturableWork: proc "stdcall" (this: ^ISharingContract, guid: ^GUID), + EndCapturableWork: proc "stdcall" (this: ^ISharingContract, guid: ^GUID), +} + +MESSAGE_CATEGORY :: enum i32 { + APPLICATION_DEFINED = 0, + MISCELLANEOUS = 1, + INITIALIZATION = 2, + CLEANUP = 3, + COMPILATION = 4, + STATE_CREATION = 5, + STATE_SETTING = 6, + STATE_GETTING = 7, + RESOURCE_MANIPULATION = 8, + EXECUTION = 9, + SHADER = 10, +} + +MESSAGE_SEVERITY :: enum i32 { + CORRUPTION = 0, + ERROR = 1, + WARNING = 2, + INFO = 3, + MESSAGE = 4, +} + +MESSAGE_ID :: enum i32 { + UNKNOWN = 0, + STRING_FROM_APPLICATION = 1, + CORRUPTED_THIS = 2, + CORRUPTED_PARAMETER1 = 3, + CORRUPTED_PARAMETER2 = 4, + CORRUPTED_PARAMETER3 = 5, + CORRUPTED_PARAMETER4 = 6, + CORRUPTED_PARAMETER5 = 7, + CORRUPTED_PARAMETER6 = 8, + CORRUPTED_PARAMETER7 = 9, + CORRUPTED_PARAMETER8 = 10, + CORRUPTED_PARAMETER9 = 11, + CORRUPTED_PARAMETER10 = 12, + CORRUPTED_PARAMETER11 = 13, + CORRUPTED_PARAMETER12 = 14, + CORRUPTED_PARAMETER13 = 15, + CORRUPTED_PARAMETER14 = 16, + CORRUPTED_PARAMETER15 = 17, + CORRUPTED_MULTITHREADING = 18, + MESSAGE_REPORTING_OUTOFMEMORY = 19, + GETPRIVATEDATA_MOREDATA = 20, + SETPRIVATEDATA_INVALIDFREEDATA = 21, + SETPRIVATEDATA_CHANGINGPARAMS = 24, + SETPRIVATEDATA_OUTOFMEMORY = 25, + CREATESHADERRESOURCEVIEW_UNRECOGNIZEDFORMAT = 26, + CREATESHADERRESOURCEVIEW_INVALIDDESC = 27, + CREATESHADERRESOURCEVIEW_INVALIDFORMAT = 28, + CREATESHADERRESOURCEVIEW_INVALIDVIDEOPLANESLICE = 29, + CREATESHADERRESOURCEVIEW_INVALIDPLANESLICE = 30, + CREATESHADERRESOURCEVIEW_INVALIDDIMENSIONS = 31, + CREATESHADERRESOURCEVIEW_INVALIDRESOURCE = 32, + CREATERENDERTARGETVIEW_UNRECOGNIZEDFORMAT = 35, + CREATERENDERTARGETVIEW_UNSUPPORTEDFORMAT = 36, + CREATERENDERTARGETVIEW_INVALIDDESC = 37, + CREATERENDERTARGETVIEW_INVALIDFORMAT = 38, + CREATERENDERTARGETVIEW_INVALIDVIDEOPLANESLICE = 39, + CREATERENDERTARGETVIEW_INVALIDPLANESLICE = 40, + CREATERENDERTARGETVIEW_INVALIDDIMENSIONS = 41, + CREATERENDERTARGETVIEW_INVALIDRESOURCE = 42, + CREATEDEPTHSTENCILVIEW_UNRECOGNIZEDFORMAT = 45, + CREATEDEPTHSTENCILVIEW_INVALIDDESC = 46, + CREATEDEPTHSTENCILVIEW_INVALIDFORMAT = 47, + CREATEDEPTHSTENCILVIEW_INVALIDDIMENSIONS = 48, + CREATEDEPTHSTENCILVIEW_INVALIDRESOURCE = 49, + CREATEINPUTLAYOUT_OUTOFMEMORY = 52, + CREATEINPUTLAYOUT_TOOMANYELEMENTS = 53, + CREATEINPUTLAYOUT_INVALIDFORMAT = 54, + CREATEINPUTLAYOUT_INCOMPATIBLEFORMAT = 55, + CREATEINPUTLAYOUT_INVALIDSLOT = 56, + CREATEINPUTLAYOUT_INVALIDINPUTSLOTCLASS = 57, + CREATEINPUTLAYOUT_STEPRATESLOTCLASSMISMATCH = 58, + CREATEINPUTLAYOUT_INVALIDSLOTCLASSCHANGE = 59, + CREATEINPUTLAYOUT_INVALIDSTEPRATECHANGE = 60, + CREATEINPUTLAYOUT_INVALIDALIGNMENT = 61, + CREATEINPUTLAYOUT_DUPLICATESEMANTIC = 62, + CREATEINPUTLAYOUT_UNPARSEABLEINPUTSIGNATURE = 63, + CREATEINPUTLAYOUT_NULLSEMANTIC = 64, + CREATEINPUTLAYOUT_MISSINGELEMENT = 65, + CREATEVERTEXSHADER_OUTOFMEMORY = 66, + CREATEVERTEXSHADER_INVALIDSHADERBYTECODE = 67, + CREATEVERTEXSHADER_INVALIDSHADERTYPE = 68, + CREATEGEOMETRYSHADER_OUTOFMEMORY = 69, + CREATEGEOMETRYSHADER_INVALIDSHADERBYTECODE = 70, + CREATEGEOMETRYSHADER_INVALIDSHADERTYPE = 71, + CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTOFMEMORY = 72, + CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERBYTECODE = 73, + CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERTYPE = 74, + CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMENTRIES = 75, + CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSTREAMSTRIDEUNUSED = 76, + CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSLOT0EXPECTED = 79, + CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSLOT = 80, + CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_ONLYONEELEMENTPERSLOT = 81, + CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCOMPONENTCOUNT = 82, + CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTARTCOMPONENTANDCOMPONENTCOUNT = 83, + CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDGAPDEFINITION = 84, + CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_REPEATEDOUTPUT = 85, + CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSTREAMSTRIDE = 86, + CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGSEMANTIC = 87, + CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MASKMISMATCH = 88, + CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_CANTHAVEONLYGAPS = 89, + CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DECLTOOCOMPLEX = 90, + CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGOUTPUTSIGNATURE = 91, + CREATEPIXELSHADER_OUTOFMEMORY = 92, + CREATEPIXELSHADER_INVALIDSHADERBYTECODE = 93, + CREATEPIXELSHADER_INVALIDSHADERTYPE = 94, + CREATERASTERIZERSTATE_INVALIDFILLMODE = 95, + CREATERASTERIZERSTATE_INVALIDCULLMODE = 96, + CREATERASTERIZERSTATE_INVALIDDEPTHBIASCLAMP = 97, + CREATERASTERIZERSTATE_INVALIDSLOPESCALEDDEPTHBIAS = 98, + CREATEDEPTHSTENCILSTATE_INVALIDDEPTHWRITEMASK = 100, + CREATEDEPTHSTENCILSTATE_INVALIDDEPTHFUNC = 101, + CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFAILOP = 102, + CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILZFAILOP = 103, + CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILPASSOP = 104, + CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFUNC = 105, + CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFAILOP = 106, + CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILZFAILOP = 107, + CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILPASSOP = 108, + CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFUNC = 109, + CREATEBLENDSTATE_INVALIDSRCBLEND = 111, + CREATEBLENDSTATE_INVALIDDESTBLEND = 112, + CREATEBLENDSTATE_INVALIDBLENDOP = 113, + CREATEBLENDSTATE_INVALIDSRCBLENDALPHA = 114, + CREATEBLENDSTATE_INVALIDDESTBLENDALPHA = 115, + CREATEBLENDSTATE_INVALIDBLENDOPALPHA = 116, + CREATEBLENDSTATE_INVALIDRENDERTARGETWRITEMASK = 117, + CLEARDEPTHSTENCILVIEW_INVALID = 135, + COMMAND_LIST_DRAW_ROOT_SIGNATURE_NOT_SET = 200, + COMMAND_LIST_DRAW_ROOT_SIGNATURE_MISMATCH = 201, + COMMAND_LIST_DRAW_VERTEX_BUFFER_NOT_SET = 202, + COMMAND_LIST_DRAW_VERTEX_BUFFER_STRIDE_TOO_SMALL = 209, + COMMAND_LIST_DRAW_VERTEX_BUFFER_TOO_SMALL = 210, + COMMAND_LIST_DRAW_INDEX_BUFFER_NOT_SET = 211, + COMMAND_LIST_DRAW_INDEX_BUFFER_FORMAT_INVALID = 212, + COMMAND_LIST_DRAW_INDEX_BUFFER_TOO_SMALL = 213, + COMMAND_LIST_DRAW_INVALID_PRIMITIVETOPOLOGY = 219, + COMMAND_LIST_DRAW_VERTEX_STRIDE_UNALIGNED = 221, + COMMAND_LIST_DRAW_INDEX_OFFSET_UNALIGNED = 222, + DEVICE_REMOVAL_PROCESS_AT_FAULT = 232, + DEVICE_REMOVAL_PROCESS_POSSIBLY_AT_FAULT = 233, + DEVICE_REMOVAL_PROCESS_NOT_AT_FAULT = 234, + CREATEINPUTLAYOUT_TRAILING_DIGIT_IN_SEMANTIC = 239, + CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_TRAILING_DIGIT_IN_SEMANTIC = 240, + CREATEINPUTLAYOUT_TYPE_MISMATCH = 245, + CREATEINPUTLAYOUT_EMPTY_LAYOUT = 253, + LIVE_OBJECT_SUMMARY = 255, + LIVE_DEVICE = 274, + LIVE_SWAPCHAIN = 275, + CREATEDEPTHSTENCILVIEW_INVALIDFLAGS = 276, + CREATEVERTEXSHADER_INVALIDCLASSLINKAGE = 277, + CREATEGEOMETRYSHADER_INVALIDCLASSLINKAGE = 278, + CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTREAMTORASTERIZER = 280, + CREATEPIXELSHADER_INVALIDCLASSLINKAGE = 283, + CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTREAM = 284, + CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDENTRIES = 285, + CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDSTRIDES = 286, + CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMSTRIDES = 287, + CREATEHULLSHADER_OUTOFMEMORY = 289, + CREATEHULLSHADER_INVALIDSHADERBYTECODE = 290, + CREATEHULLSHADER_INVALIDSHADERTYPE = 291, + CREATEHULLSHADER_INVALIDCLASSLINKAGE = 292, + CREATEDOMAINSHADER_OUTOFMEMORY = 294, + CREATEDOMAINSHADER_INVALIDSHADERBYTECODE = 295, + CREATEDOMAINSHADER_INVALIDSHADERTYPE = 296, + CREATEDOMAINSHADER_INVALIDCLASSLINKAGE = 297, + RESOURCE_UNMAP_NOTMAPPED = 310, + DEVICE_CHECKFEATURESUPPORT_MISMATCHED_DATA_SIZE = 318, + CREATECOMPUTESHADER_OUTOFMEMORY = 321, + CREATECOMPUTESHADER_INVALIDSHADERBYTECODE = 322, + CREATECOMPUTESHADER_INVALIDCLASSLINKAGE = 323, + DEVICE_CREATEVERTEXSHADER_DOUBLEFLOATOPSNOTSUPPORTED = 331, + DEVICE_CREATEHULLSHADER_DOUBLEFLOATOPSNOTSUPPORTED = 332, + DEVICE_CREATEDOMAINSHADER_DOUBLEFLOATOPSNOTSUPPORTED = 333, + DEVICE_CREATEGEOMETRYSHADER_DOUBLEFLOATOPSNOTSUPPORTED = 334, + DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DOUBLEFLOATOPSNOTSUPPORTED = 335, + DEVICE_CREATEPIXELSHADER_DOUBLEFLOATOPSNOTSUPPORTED = 336, + DEVICE_CREATECOMPUTESHADER_DOUBLEFLOATOPSNOTSUPPORTED = 337, + CREATEUNORDEREDACCESSVIEW_INVALIDRESOURCE = 340, + CREATEUNORDEREDACCESSVIEW_INVALIDDESC = 341, + CREATEUNORDEREDACCESSVIEW_INVALIDFORMAT = 342, + CREATEUNORDEREDACCESSVIEW_INVALIDVIDEOPLANESLICE = 343, + CREATEUNORDEREDACCESSVIEW_INVALIDPLANESLICE = 344, + CREATEUNORDEREDACCESSVIEW_INVALIDDIMENSIONS = 345, + CREATEUNORDEREDACCESSVIEW_UNRECOGNIZEDFORMAT = 346, + CREATEUNORDEREDACCESSVIEW_INVALIDFLAGS = 354, + CREATERASTERIZERSTATE_INVALIDFORCEDSAMPLECOUNT = 401, + CREATEBLENDSTATE_INVALIDLOGICOPS = 403, + DEVICE_CREATEVERTEXSHADER_DOUBLEEXTENSIONSNOTSUPPORTED = 410, + DEVICE_CREATEHULLSHADER_DOUBLEEXTENSIONSNOTSUPPORTED = 412, + DEVICE_CREATEDOMAINSHADER_DOUBLEEXTENSIONSNOTSUPPORTED = 414, + DEVICE_CREATEGEOMETRYSHADER_DOUBLEEXTENSIONSNOTSUPPORTED = 416, + DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DOUBLEEXTENSIONSNOTSUPPORTED = 418, + DEVICE_CREATEPIXELSHADER_DOUBLEEXTENSIONSNOTSUPPORTED = 420, + DEVICE_CREATECOMPUTESHADER_DOUBLEEXTENSIONSNOTSUPPORTED = 422, + DEVICE_CREATEVERTEXSHADER_UAVSNOTSUPPORTED = 425, + DEVICE_CREATEHULLSHADER_UAVSNOTSUPPORTED = 426, + DEVICE_CREATEDOMAINSHADER_UAVSNOTSUPPORTED = 427, + DEVICE_CREATEGEOMETRYSHADER_UAVSNOTSUPPORTED = 428, + DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UAVSNOTSUPPORTED = 429, + DEVICE_CREATEPIXELSHADER_UAVSNOTSUPPORTED = 430, + DEVICE_CREATECOMPUTESHADER_UAVSNOTSUPPORTED = 431, + DEVICE_CLEARVIEW_INVALIDSOURCERECT = 447, + DEVICE_CLEARVIEW_EMPTYRECT = 448, + UPDATETILEMAPPINGS_INVALID_PARAMETER = 493, + COPYTILEMAPPINGS_INVALID_PARAMETER = 494, + CREATEDEVICE_INVALIDARGS = 506, + CREATEDEVICE_WARNING = 507, + RESOURCE_BARRIER_INVALID_TYPE = 519, + RESOURCE_BARRIER_NULL_POINTER = 520, + RESOURCE_BARRIER_INVALID_SUBRESOURCE = 521, + RESOURCE_BARRIER_RESERVED_BITS = 522, + RESOURCE_BARRIER_MISSING_BIND_FLAGS = 523, + RESOURCE_BARRIER_MISMATCHING_MISC_FLAGS = 524, + RESOURCE_BARRIER_MATCHING_STATES = 525, + RESOURCE_BARRIER_INVALID_COMBINATION = 526, + RESOURCE_BARRIER_BEFORE_AFTER_MISMATCH = 527, + RESOURCE_BARRIER_INVALID_RESOURCE = 528, + RESOURCE_BARRIER_SAMPLE_COUNT = 529, + RESOURCE_BARRIER_INVALID_FLAGS = 530, + RESOURCE_BARRIER_INVALID_COMBINED_FLAGS = 531, + RESOURCE_BARRIER_INVALID_FLAGS_FOR_FORMAT = 532, + RESOURCE_BARRIER_INVALID_SPLIT_BARRIER = 533, + RESOURCE_BARRIER_UNMATCHED_END = 534, + RESOURCE_BARRIER_UNMATCHED_BEGIN = 535, + RESOURCE_BARRIER_INVALID_FLAG = 536, + RESOURCE_BARRIER_INVALID_COMMAND_LIST_TYPE = 537, + INVALID_SUBRESOURCE_STATE = 538, + COMMAND_ALLOCATOR_CONTENTION = 540, + COMMAND_ALLOCATOR_RESET = 541, + COMMAND_ALLOCATOR_RESET_BUNDLE = 542, + COMMAND_ALLOCATOR_CANNOT_RESET = 543, + COMMAND_LIST_OPEN = 544, + INVALID_BUNDLE_API = 546, + COMMAND_LIST_CLOSED = 547, + WRONG_COMMAND_ALLOCATOR_TYPE = 549, + COMMAND_ALLOCATOR_SYNC = 552, + COMMAND_LIST_SYNC = 553, + SET_DESCRIPTOR_HEAP_INVALID = 554, + CREATE_COMMANDQUEUE = 557, + CREATE_COMMANDALLOCATOR = 558, + CREATE_PIPELINESTATE = 559, + CREATE_COMMANDLIST12 = 560, + CREATE_RESOURCE = 562, + CREATE_DESCRIPTORHEAP = 563, + CREATE_ROOTSIGNATURE = 564, + CREATE_LIBRARY = 565, + CREATE_HEAP = 566, + CREATE_MONITOREDFENCE = 567, + CREATE_QUERYHEAP = 568, + CREATE_COMMANDSIGNATURE = 569, + LIVE_COMMANDQUEUE = 570, + LIVE_COMMANDALLOCATOR = 571, + LIVE_PIPELINESTATE = 572, + LIVE_COMMANDLIST12 = 573, + LIVE_RESOURCE = 575, + LIVE_DESCRIPTORHEAP = 576, + LIVE_ROOTSIGNATURE = 577, + LIVE_LIBRARY = 578, + LIVE_HEAP = 579, + LIVE_MONITOREDFENCE = 580, + LIVE_QUERYHEAP = 581, + LIVE_COMMANDSIGNATURE = 582, + DESTROY_COMMANDQUEUE = 583, + DESTROY_COMMANDALLOCATOR = 584, + DESTROY_PIPELINESTATE = 585, + DESTROY_COMMANDLIST12 = 586, + DESTROY_RESOURCE = 588, + DESTROY_DESCRIPTORHEAP = 589, + DESTROY_ROOTSIGNATURE = 590, + DESTROY_LIBRARY = 591, + DESTROY_HEAP = 592, + DESTROY_MONITOREDFENCE = 593, + DESTROY_QUERYHEAP = 594, + DESTROY_COMMANDSIGNATURE = 595, + CREATERESOURCE_INVALIDDIMENSIONS = 597, + CREATERESOURCE_INVALIDMISCFLAGS = 599, + CREATERESOURCE_INVALIDARG_RETURN = 602, + CREATERESOURCE_OUTOFMEMORY_RETURN = 603, + CREATERESOURCE_INVALIDDESC = 604, + POSSIBLY_INVALID_SUBRESOURCE_STATE = 607, + INVALID_USE_OF_NON_RESIDENT_RESOURCE = 608, + POSSIBLE_INVALID_USE_OF_NON_RESIDENT_RESOURCE = 609, + BUNDLE_PIPELINE_STATE_MISMATCH = 610, + PRIMITIVE_TOPOLOGY_MISMATCH_PIPELINE_STATE = 611, + RENDER_TARGET_FORMAT_MISMATCH_PIPELINE_STATE = 613, + RENDER_TARGET_SAMPLE_DESC_MISMATCH_PIPELINE_STATE = 614, + DEPTH_STENCIL_FORMAT_MISMATCH_PIPELINE_STATE = 615, + DEPTH_STENCIL_SAMPLE_DESC_MISMATCH_PIPELINE_STATE = 616, + CREATESHADER_INVALIDBYTECODE = 622, + CREATEHEAP_NULLDESC = 623, + CREATEHEAP_INVALIDSIZE = 624, + CREATEHEAP_UNRECOGNIZEDHEAPTYPE = 625, + CREATEHEAP_UNRECOGNIZEDCPUPAGEPROPERTIES = 626, + CREATEHEAP_UNRECOGNIZEDMEMORYPOOL = 627, + CREATEHEAP_INVALIDPROPERTIES = 628, + CREATEHEAP_INVALIDALIGNMENT = 629, + CREATEHEAP_UNRECOGNIZEDMISCFLAGS = 630, + CREATEHEAP_INVALIDMISCFLAGS = 631, + CREATEHEAP_INVALIDARG_RETURN = 632, + CREATEHEAP_OUTOFMEMORY_RETURN = 633, + CREATERESOURCEANDHEAP_NULLHEAPPROPERTIES = 634, + CREATERESOURCEANDHEAP_UNRECOGNIZEDHEAPTYPE = 635, + CREATERESOURCEANDHEAP_UNRECOGNIZEDCPUPAGEPROPERTIES = 636, + CREATERESOURCEANDHEAP_UNRECOGNIZEDMEMORYPOOL = 637, + CREATERESOURCEANDHEAP_INVALIDHEAPPROPERTIES = 638, + CREATERESOURCEANDHEAP_UNRECOGNIZEDHEAPMISCFLAGS = 639, + CREATERESOURCEANDHEAP_INVALIDHEAPMISCFLAGS = 640, + CREATERESOURCEANDHEAP_INVALIDARG_RETURN = 641, + CREATERESOURCEANDHEAP_OUTOFMEMORY_RETURN = 642, + GETCUSTOMHEAPPROPERTIES_UNRECOGNIZEDHEAPTYPE = 643, + GETCUSTOMHEAPPROPERTIES_INVALIDHEAPTYPE = 644, + CREATE_DESCRIPTOR_HEAP_INVALID_DESC = 645, + INVALID_DESCRIPTOR_HANDLE = 646, + CREATERASTERIZERSTATE_INVALID_CONSERVATIVERASTERMODE = 647, + CREATE_CONSTANT_BUFFER_VIEW_INVALID_RESOURCE = 649, + CREATE_CONSTANT_BUFFER_VIEW_INVALID_DESC = 650, + CREATE_UNORDEREDACCESS_VIEW_INVALID_COUNTER_USAGE = 652, + COPY_DESCRIPTORS_INVALID_RANGES = 653, + COPY_DESCRIPTORS_WRITE_ONLY_DESCRIPTOR = 654, + CREATEGRAPHICSPIPELINESTATE_RTV_FORMAT_NOT_UNKNOWN = 655, + CREATEGRAPHICSPIPELINESTATE_INVALID_RENDER_TARGET_COUNT = 656, + CREATEGRAPHICSPIPELINESTATE_VERTEX_SHADER_NOT_SET = 657, + CREATEGRAPHICSPIPELINESTATE_INPUTLAYOUT_NOT_SET = 658, + CREATEGRAPHICSPIPELINESTATE_SHADER_LINKAGE_HS_DS_SIGNATURE_MISMATCH = 659, + CREATEGRAPHICSPIPELINESTATE_SHADER_LINKAGE_REGISTERINDEX = 660, + CREATEGRAPHICSPIPELINESTATE_SHADER_LINKAGE_COMPONENTTYPE = 661, + CREATEGRAPHICSPIPELINESTATE_SHADER_LINKAGE_REGISTERMASK = 662, + CREATEGRAPHICSPIPELINESTATE_SHADER_LINKAGE_SYSTEMVALUE = 663, + CREATEGRAPHICSPIPELINESTATE_SHADER_LINKAGE_NEVERWRITTEN_ALWAYSREADS = 664, + CREATEGRAPHICSPIPELINESTATE_SHADER_LINKAGE_MINPRECISION = 665, + CREATEGRAPHICSPIPELINESTATE_SHADER_LINKAGE_SEMANTICNAME_NOT_FOUND = 666, + CREATEGRAPHICSPIPELINESTATE_HS_XOR_DS_MISMATCH = 667, + CREATEGRAPHICSPIPELINESTATE_HULL_SHADER_INPUT_TOPOLOGY_MISMATCH = 668, + CREATEGRAPHICSPIPELINESTATE_HS_DS_CONTROL_POINT_COUNT_MISMATCH = 669, + CREATEGRAPHICSPIPELINESTATE_HS_DS_TESSELLATOR_DOMAIN_MISMATCH = 670, + CREATEGRAPHICSPIPELINESTATE_INVALID_USE_OF_CENTER_MULTISAMPLE_PATTERN = 671, + CREATEGRAPHICSPIPELINESTATE_INVALID_USE_OF_FORCED_SAMPLE_COUNT = 672, + CREATEGRAPHICSPIPELINESTATE_INVALID_PRIMITIVETOPOLOGY = 673, + CREATEGRAPHICSPIPELINESTATE_INVALID_SYSTEMVALUE = 674, + CREATEGRAPHICSPIPELINESTATE_OM_DUAL_SOURCE_BLENDING_CAN_ONLY_HAVE_RENDER_TARGET_0 = 675, + CREATEGRAPHICSPIPELINESTATE_OM_RENDER_TARGET_DOES_NOT_SUPPORT_BLENDING = 676, + CREATEGRAPHICSPIPELINESTATE_PS_OUTPUT_TYPE_MISMATCH = 677, + CREATEGRAPHICSPIPELINESTATE_OM_RENDER_TARGET_DOES_NOT_SUPPORT_LOGIC_OPS = 678, + CREATEGRAPHICSPIPELINESTATE_RENDERTARGETVIEW_NOT_SET = 679, + CREATEGRAPHICSPIPELINESTATE_DEPTHSTENCILVIEW_NOT_SET = 680, + CREATEGRAPHICSPIPELINESTATE_GS_INPUT_PRIMITIVE_MISMATCH = 681, + CREATEGRAPHICSPIPELINESTATE_POSITION_NOT_PRESENT = 682, + CREATEGRAPHICSPIPELINESTATE_MISSING_ROOT_SIGNATURE_FLAGS = 683, + CREATEGRAPHICSPIPELINESTATE_INVALID_INDEX_BUFFER_PROPERTIES = 684, + CREATEGRAPHICSPIPELINESTATE_INVALID_SAMPLE_DESC = 685, + CREATEGRAPHICSPIPELINESTATE_HS_ROOT_SIGNATURE_MISMATCH = 686, + CREATEGRAPHICSPIPELINESTATE_DS_ROOT_SIGNATURE_MISMATCH = 687, + CREATEGRAPHICSPIPELINESTATE_VS_ROOT_SIGNATURE_MISMATCH = 688, + CREATEGRAPHICSPIPELINESTATE_GS_ROOT_SIGNATURE_MISMATCH = 689, + CREATEGRAPHICSPIPELINESTATE_PS_ROOT_SIGNATURE_MISMATCH = 690, + CREATEGRAPHICSPIPELINESTATE_MISSING_ROOT_SIGNATURE = 691, + EXECUTE_BUNDLE_OPEN_BUNDLE = 692, + EXECUTE_BUNDLE_DESCRIPTOR_HEAP_MISMATCH = 693, + EXECUTE_BUNDLE_TYPE = 694, + DRAW_EMPTY_SCISSOR_RECTANGLE = 695, + CREATE_ROOT_SIGNATURE_BLOB_NOT_FOUND = 696, + CREATE_ROOT_SIGNATURE_DESERIALIZE_FAILED = 697, + CREATE_ROOT_SIGNATURE_INVALID_CONFIGURATION = 698, + CREATE_ROOT_SIGNATURE_NOT_SUPPORTED_ON_DEVICE = 699, + CREATERESOURCEANDHEAP_NULLRESOURCEPROPERTIES = 700, + CREATERESOURCEANDHEAP_NULLHEAP = 701, + GETRESOURCEALLOCATIONINFO_INVALIDRDESCS = 702, + MAKERESIDENT_NULLOBJECTARRAY = 703, + EVICT_NULLOBJECTARRAY = 705, + SET_DESCRIPTOR_TABLE_INVALID = 708, + SET_ROOT_CONSTANT_INVALID = 709, + SET_ROOT_CONSTANT_BUFFER_VIEW_INVALID = 710, + SET_ROOT_SHADER_RESOURCE_VIEW_INVALID = 711, + SET_ROOT_UNORDERED_ACCESS_VIEW_INVALID = 712, + SET_VERTEX_BUFFERS_INVALID_DESC = 713, + SET_INDEX_BUFFER_INVALID_DESC = 715, + SET_STREAM_OUTPUT_BUFFERS_INVALID_DESC = 717, + CREATERESOURCE_UNRECOGNIZEDDIMENSIONALITY = 718, + CREATERESOURCE_UNRECOGNIZEDLAYOUT = 719, + CREATERESOURCE_INVALIDDIMENSIONALITY = 720, + CREATERESOURCE_INVALIDALIGNMENT = 721, + CREATERESOURCE_INVALIDMIPLEVELS = 722, + CREATERESOURCE_INVALIDSAMPLEDESC = 723, + CREATERESOURCE_INVALIDLAYOUT = 724, + SET_INDEX_BUFFER_INVALID = 725, + SET_VERTEX_BUFFERS_INVALID = 726, + SET_STREAM_OUTPUT_BUFFERS_INVALID = 727, + SET_RENDER_TARGETS_INVALID = 728, + CREATEQUERY_HEAP_INVALID_PARAMETERS = 729, + BEGIN_END_QUERY_INVALID_PARAMETERS = 731, + CLOSE_COMMAND_LIST_OPEN_QUERY = 732, + RESOLVE_QUERY_DATA_INVALID_PARAMETERS = 733, + SET_PREDICATION_INVALID_PARAMETERS = 734, + TIMESTAMPS_NOT_SUPPORTED = 735, + CREATERESOURCE_UNRECOGNIZEDFORMAT = 737, + CREATERESOURCE_INVALIDFORMAT = 738, + GETCOPYABLEFOOTPRINTS_INVALIDSUBRESOURCERANGE = 739, + GETCOPYABLEFOOTPRINTS_INVALIDBASEOFFSET = 740, + GETCOPYABLELAYOUT_INVALIDSUBRESOURCERANGE = 739, + GETCOPYABLELAYOUT_INVALIDBASEOFFSET = 740, + RESOURCE_BARRIER_INVALID_HEAP = 741, + CREATE_SAMPLER_INVALID = 742, + CREATECOMMANDSIGNATURE_INVALID = 743, + EXECUTE_INDIRECT_INVALID_PARAMETERS = 744, + GETGPUVIRTUALADDRESS_INVALID_RESOURCE_DIMENSION = 745, + CREATERESOURCE_INVALIDCLEARVALUE = 815, + CREATERESOURCE_UNRECOGNIZEDCLEARVALUEFORMAT = 816, + CREATERESOURCE_INVALIDCLEARVALUEFORMAT = 817, + CREATERESOURCE_CLEARVALUEDENORMFLUSH = 818, + CLEARRENDERTARGETVIEW_MISMATCHINGCLEARVALUE = 820, + CLEARDEPTHSTENCILVIEW_MISMATCHINGCLEARVALUE = 821, + MAP_INVALIDHEAP = 822, + UNMAP_INVALIDHEAP = 823, + MAP_INVALIDRESOURCE = 824, + UNMAP_INVALIDRESOURCE = 825, + MAP_INVALIDSUBRESOURCE = 826, + UNMAP_INVALIDSUBRESOURCE = 827, + MAP_INVALIDRANGE = 828, + UNMAP_INVALIDRANGE = 829, + MAP_INVALIDDATAPOINTER = 832, + MAP_INVALIDARG_RETURN = 833, + MAP_OUTOFMEMORY_RETURN = 834, + EXECUTECOMMANDLISTS_BUNDLENOTSUPPORTED = 835, + EXECUTECOMMANDLISTS_COMMANDLISTMISMATCH = 836, + EXECUTECOMMANDLISTS_OPENCOMMANDLIST = 837, + EXECUTECOMMANDLISTS_FAILEDCOMMANDLIST = 838, + COPYBUFFERREGION_NULLDST = 839, + COPYBUFFERREGION_INVALIDDSTRESOURCEDIMENSION = 840, + COPYBUFFERREGION_DSTRANGEOUTOFBOUNDS = 841, + COPYBUFFERREGION_NULLSRC = 842, + COPYBUFFERREGION_INVALIDSRCRESOURCEDIMENSION = 843, + COPYBUFFERREGION_SRCRANGEOUTOFBOUNDS = 844, + COPYBUFFERREGION_INVALIDCOPYFLAGS = 845, + COPYTEXTUREREGION_NULLDST = 846, + COPYTEXTUREREGION_UNRECOGNIZEDDSTTYPE = 847, + COPYTEXTUREREGION_INVALIDDSTRESOURCEDIMENSION = 848, + COPYTEXTUREREGION_INVALIDDSTRESOURCE = 849, + COPYTEXTUREREGION_INVALIDDSTSUBRESOURCE = 850, + COPYTEXTUREREGION_INVALIDDSTOFFSET = 851, + COPYTEXTUREREGION_UNRECOGNIZEDDSTFORMAT = 852, + COPYTEXTUREREGION_INVALIDDSTFORMAT = 853, + COPYTEXTUREREGION_INVALIDDSTDIMENSIONS = 854, + COPYTEXTUREREGION_INVALIDDSTROWPITCH = 855, + COPYTEXTUREREGION_INVALIDDSTPLACEMENT = 856, + COPYTEXTUREREGION_INVALIDDSTDSPLACEDFOOTPRINTFORMAT = 857, + COPYTEXTUREREGION_DSTREGIONOUTOFBOUNDS = 858, + COPYTEXTUREREGION_NULLSRC = 859, + COPYTEXTUREREGION_UNRECOGNIZEDSRCTYPE = 860, + COPYTEXTUREREGION_INVALIDSRCRESOURCEDIMENSION = 861, + COPYTEXTUREREGION_INVALIDSRCRESOURCE = 862, + COPYTEXTUREREGION_INVALIDSRCSUBRESOURCE = 863, + COPYTEXTUREREGION_INVALIDSRCOFFSET = 864, + COPYTEXTUREREGION_UNRECOGNIZEDSRCFORMAT = 865, + COPYTEXTUREREGION_INVALIDSRCFORMAT = 866, + COPYTEXTUREREGION_INVALIDSRCDIMENSIONS = 867, + COPYTEXTUREREGION_INVALIDSRCROWPITCH = 868, + COPYTEXTUREREGION_INVALIDSRCPLACEMENT = 869, + COPYTEXTUREREGION_INVALIDSRCDSPLACEDFOOTPRINTFORMAT = 870, + COPYTEXTUREREGION_SRCREGIONOUTOFBOUNDS = 871, + COPYTEXTUREREGION_INVALIDDSTCOORDINATES = 872, + COPYTEXTUREREGION_INVALIDSRCBOX = 873, + COPYTEXTUREREGION_FORMATMISMATCH = 874, + COPYTEXTUREREGION_EMPTYBOX = 875, + COPYTEXTUREREGION_INVALIDCOPYFLAGS = 876, + RESOLVESUBRESOURCE_INVALID_SUBRESOURCE_INDEX = 877, + RESOLVESUBRESOURCE_INVALID_FORMAT = 878, + RESOLVESUBRESOURCE_RESOURCE_MISMATCH = 879, + RESOLVESUBRESOURCE_INVALID_SAMPLE_COUNT = 880, + CREATECOMPUTEPIPELINESTATE_INVALID_SHADER = 881, + CREATECOMPUTEPIPELINESTATE_CS_ROOT_SIGNATURE_MISMATCH = 882, + CREATECOMPUTEPIPELINESTATE_MISSING_ROOT_SIGNATURE = 883, + CREATEPIPELINESTATE_INVALIDCACHEDBLOB = 884, + CREATEPIPELINESTATE_CACHEDBLOBADAPTERMISMATCH = 885, + CREATEPIPELINESTATE_CACHEDBLOBDRIVERVERSIONMISMATCH = 886, + CREATEPIPELINESTATE_CACHEDBLOBDESCMISMATCH = 887, + CREATEPIPELINESTATE_CACHEDBLOBIGNORED = 888, + WRITETOSUBRESOURCE_INVALIDHEAP = 889, + WRITETOSUBRESOURCE_INVALIDRESOURCE = 890, + WRITETOSUBRESOURCE_INVALIDBOX = 891, + WRITETOSUBRESOURCE_INVALIDSUBRESOURCE = 892, + WRITETOSUBRESOURCE_EMPTYBOX = 893, + READFROMSUBRESOURCE_INVALIDHEAP = 894, + READFROMSUBRESOURCE_INVALIDRESOURCE = 895, + READFROMSUBRESOURCE_INVALIDBOX = 896, + READFROMSUBRESOURCE_INVALIDSUBRESOURCE = 897, + READFROMSUBRESOURCE_EMPTYBOX = 898, + TOO_MANY_NODES_SPECIFIED = 899, + INVALID_NODE_INDEX = 900, + GETHEAPPROPERTIES_INVALIDRESOURCE = 901, + NODE_MASK_MISMATCH = 902, + COMMAND_LIST_OUTOFMEMORY = 903, + COMMAND_LIST_MULTIPLE_SWAPCHAIN_BUFFER_REFERENCES = 904, + COMMAND_LIST_TOO_MANY_SWAPCHAIN_REFERENCES = 905, + COMMAND_QUEUE_TOO_MANY_SWAPCHAIN_REFERENCES = 906, + EXECUTECOMMANDLISTS_WRONGSWAPCHAINBUFFERREFERENCE = 907, + COMMAND_LIST_SETRENDERTARGETS_INVALIDNUMRENDERTARGETS = 908, + CREATE_QUEUE_INVALID_TYPE = 909, + CREATE_QUEUE_INVALID_FLAGS = 910, + CREATESHAREDRESOURCE_INVALIDFLAGS = 911, + CREATESHAREDRESOURCE_INVALIDFORMAT = 912, + CREATESHAREDHEAP_INVALIDFLAGS = 913, + REFLECTSHAREDPROPERTIES_UNRECOGNIZEDPROPERTIES = 914, + REFLECTSHAREDPROPERTIES_INVALIDSIZE = 915, + REFLECTSHAREDPROPERTIES_INVALIDOBJECT = 916, + KEYEDMUTEX_INVALIDOBJECT = 917, + KEYEDMUTEX_INVALIDKEY = 918, + KEYEDMUTEX_WRONGSTATE = 919, + CREATE_QUEUE_INVALID_PRIORITY = 920, + OBJECT_DELETED_WHILE_STILL_IN_USE = 921, + CREATEPIPELINESTATE_INVALID_FLAGS = 922, + HEAP_ADDRESS_RANGE_HAS_NO_RESOURCE = 923, + COMMAND_LIST_DRAW_RENDER_TARGET_DELETED = 924, + CREATEGRAPHICSPIPELINESTATE_ALL_RENDER_TARGETS_HAVE_UNKNOWN_FORMAT = 925, + HEAP_ADDRESS_RANGE_INTERSECTS_MULTIPLE_BUFFERS = 926, + EXECUTECOMMANDLISTS_GPU_WRITTEN_READBACK_RESOURCE_MAPPED = 927, + UNMAP_RANGE_NOT_EMPTY = 929, + MAP_INVALID_NULLRANGE = 930, + UNMAP_INVALID_NULLRANGE = 931, + NO_GRAPHICS_API_SUPPORT = 932, + NO_COMPUTE_API_SUPPORT = 933, + RESOLVESUBRESOURCE_RESOURCE_FLAGS_NOT_SUPPORTED = 934, + GPU_BASED_VALIDATION_ROOT_ARGUMENT_UNINITIALIZED = 935, + GPU_BASED_VALIDATION_DESCRIPTOR_HEAP_INDEX_OUT_OF_BOUNDS = 936, + GPU_BASED_VALIDATION_DESCRIPTOR_TABLE_REGISTER_INDEX_OUT_OF_BOUNDS = 937, + GPU_BASED_VALIDATION_DESCRIPTOR_UNINITIALIZED = 938, + GPU_BASED_VALIDATION_DESCRIPTOR_TYPE_MISMATCH = 939, + GPU_BASED_VALIDATION_SRV_RESOURCE_DIMENSION_MISMATCH = 940, + GPU_BASED_VALIDATION_UAV_RESOURCE_DIMENSION_MISMATCH = 941, + GPU_BASED_VALIDATION_INCOMPATIBLE_RESOURCE_STATE = 942, + COPYRESOURCE_NULLDST = 943, + COPYRESOURCE_INVALIDDSTRESOURCE = 944, + COPYRESOURCE_NULLSRC = 945, + COPYRESOURCE_INVALIDSRCRESOURCE = 946, + RESOLVESUBRESOURCE_NULLDST = 947, + RESOLVESUBRESOURCE_INVALIDDSTRESOURCE = 948, + RESOLVESUBRESOURCE_NULLSRC = 949, + RESOLVESUBRESOURCE_INVALIDSRCRESOURCE = 950, + PIPELINE_STATE_TYPE_MISMATCH = 951, + COMMAND_LIST_DISPATCH_ROOT_SIGNATURE_NOT_SET = 952, + COMMAND_LIST_DISPATCH_ROOT_SIGNATURE_MISMATCH = 953, + RESOURCE_BARRIER_ZERO_BARRIERS = 954, + BEGIN_END_EVENT_MISMATCH = 955, + RESOURCE_BARRIER_POSSIBLE_BEFORE_AFTER_MISMATCH = 956, + RESOURCE_BARRIER_MISMATCHING_BEGIN_END = 957, + GPU_BASED_VALIDATION_INVALID_RESOURCE = 958, + USE_OF_ZERO_REFCOUNT_OBJECT = 959, + OBJECT_EVICTED_WHILE_STILL_IN_USE = 960, + GPU_BASED_VALIDATION_ROOT_DESCRIPTOR_ACCESS_OUT_OF_BOUNDS = 961, + CREATEPIPELINELIBRARY_INVALIDLIBRARYBLOB = 962, + CREATEPIPELINELIBRARY_DRIVERVERSIONMISMATCH = 963, + CREATEPIPELINELIBRARY_ADAPTERVERSIONMISMATCH = 964, + CREATEPIPELINELIBRARY_UNSUPPORTED = 965, + CREATE_PIPELINELIBRARY = 966, + LIVE_PIPELINELIBRARY = 967, + DESTROY_PIPELINELIBRARY = 968, + STOREPIPELINE_NONAME = 969, + STOREPIPELINE_DUPLICATENAME = 970, + LOADPIPELINE_NAMENOTFOUND = 971, + LOADPIPELINE_INVALIDDESC = 972, + PIPELINELIBRARY_SERIALIZE_NOTENOUGHMEMORY = 973, + CREATEGRAPHICSPIPELINESTATE_PS_OUTPUT_RT_OUTPUT_MISMATCH = 974, + SETEVENTONMULTIPLEFENCECOMPLETION_INVALIDFLAGS = 975, + CREATE_QUEUE_VIDEO_NOT_SUPPORTED = 976, + CREATE_COMMAND_ALLOCATOR_VIDEO_NOT_SUPPORTED = 977, + CREATEQUERY_HEAP_VIDEO_DECODE_STATISTICS_NOT_SUPPORTED = 978, + CREATE_VIDEODECODECOMMANDLIST = 979, + CREATE_VIDEODECODER = 980, + CREATE_VIDEODECODESTREAM = 981, + LIVE_VIDEODECODECOMMANDLIST = 982, + LIVE_VIDEODECODER = 983, + LIVE_VIDEODECODESTREAM = 984, + DESTROY_VIDEODECODECOMMANDLIST = 985, + DESTROY_VIDEODECODER = 986, + DESTROY_VIDEODECODESTREAM = 987, + DECODE_FRAME_INVALID_PARAMETERS = 988, + DEPRECATED_API = 989, + RESOURCE_BARRIER_MISMATCHING_COMMAND_LIST_TYPE = 990, + COMMAND_LIST_DESCRIPTOR_TABLE_NOT_SET = 991, + COMMAND_LIST_ROOT_CONSTANT_BUFFER_VIEW_NOT_SET = 992, + COMMAND_LIST_ROOT_SHADER_RESOURCE_VIEW_NOT_SET = 993, + COMMAND_LIST_ROOT_UNORDERED_ACCESS_VIEW_NOT_SET = 994, + DISCARD_INVALID_SUBRESOURCE_RANGE = 995, + DISCARD_ONE_SUBRESOURCE_FOR_MIPS_WITH_RECTS = 996, + DISCARD_NO_RECTS_FOR_NON_TEXTURE2D = 997, + COPY_ON_SAME_SUBRESOURCE = 998, + SETRESIDENCYPRIORITY_INVALID_PAGEABLE = 999, + GPU_BASED_VALIDATION_UNSUPPORTED = 1000, + STATIC_DESCRIPTOR_INVALID_DESCRIPTOR_CHANGE = 1001, + DATA_STATIC_DESCRIPTOR_INVALID_DATA_CHANGE = 1002, + DATA_STATIC_WHILE_SET_AT_EXECUTE_DESCRIPTOR_INVALID_DATA_CHANGE = 1003, + EXECUTE_BUNDLE_STATIC_DESCRIPTOR_DATA_STATIC_NOT_SET = 1004, + GPU_BASED_VALIDATION_RESOURCE_ACCESS_OUT_OF_BOUNDS = 1005, + GPU_BASED_VALIDATION_SAMPLER_MODE_MISMATCH = 1006, + CREATE_FENCE_INVALID_FLAGS = 1007, + RESOURCE_BARRIER_DUPLICATE_SUBRESOURCE_TRANSITIONS = 1008, + SETRESIDENCYPRIORITY_INVALID_PRIORITY = 1009, + CREATE_DESCRIPTOR_HEAP_LARGE_NUM_DESCRIPTORS = 1013, + BEGIN_EVENT = 1014, + END_EVENT = 1015, + CREATEDEVICE_DEBUG_LAYER_STARTUP_OPTIONS = 1016, + CREATEDEPTHSTENCILSTATE_DEPTHBOUNDSTEST_UNSUPPORTED = 1017, + CREATEPIPELINESTATE_DUPLICATE_SUBOBJECT = 1018, + CREATEPIPELINESTATE_UNKNOWN_SUBOBJECT = 1019, + CREATEPIPELINESTATE_ZERO_SIZE_STREAM = 1020, + CREATEPIPELINESTATE_INVALID_STREAM = 1021, + CREATEPIPELINESTATE_CANNOT_DEDUCE_TYPE = 1022, + COMMAND_LIST_STATIC_DESCRIPTOR_RESOURCE_DIMENSION_MISMATCH = 1023, + CREATE_COMMAND_QUEUE_INSUFFICIENT_PRIVILEGE_FOR_GLOBAL_REALTIME = 1024, + CREATE_COMMAND_QUEUE_INSUFFICIENT_HARDWARE_SUPPORT_FOR_GLOBAL_REALTIME = 1025, + ATOMICCOPYBUFFER_INVALID_ARCHITECTURE = 1026, + ATOMICCOPYBUFFER_NULL_DST = 1027, + ATOMICCOPYBUFFER_INVALID_DST_RESOURCE_DIMENSION = 1028, + ATOMICCOPYBUFFER_DST_RANGE_OUT_OF_BOUNDS = 1029, + ATOMICCOPYBUFFER_NULL_SRC = 1030, + ATOMICCOPYBUFFER_INVALID_SRC_RESOURCE_DIMENSION = 1031, + ATOMICCOPYBUFFER_SRC_RANGE_OUT_OF_BOUNDS = 1032, + ATOMICCOPYBUFFER_INVALID_OFFSET_ALIGNMENT = 1033, + ATOMICCOPYBUFFER_NULL_DEPENDENT_RESOURCES = 1034, + ATOMICCOPYBUFFER_NULL_DEPENDENT_SUBRESOURCE_RANGES = 1035, + ATOMICCOPYBUFFER_INVALID_DEPENDENT_RESOURCE = 1036, + ATOMICCOPYBUFFER_INVALID_DEPENDENT_SUBRESOURCE_RANGE = 1037, + ATOMICCOPYBUFFER_DEPENDENT_SUBRESOURCE_OUT_OF_BOUNDS = 1038, + ATOMICCOPYBUFFER_DEPENDENT_RANGE_OUT_OF_BOUNDS = 1039, + ATOMICCOPYBUFFER_ZERO_DEPENDENCIES = 1040, + DEVICE_CREATE_SHARED_HANDLE_INVALIDARG = 1041, + DESCRIPTOR_HANDLE_WITH_INVALID_RESOURCE = 1042, + SETDEPTHBOUNDS_INVALIDARGS = 1043, + GPU_BASED_VALIDATION_RESOURCE_STATE_IMPRECISE = 1044, + COMMAND_LIST_PIPELINE_STATE_NOT_SET = 1045, + CREATEGRAPHICSPIPELINESTATE_SHADER_MODEL_MISMATCH = 1046, + OBJECT_ACCESSED_WHILE_STILL_IN_USE = 1047, + PROGRAMMABLE_MSAA_UNSUPPORTED = 1048, + SETSAMPLEPOSITIONS_INVALIDARGS = 1049, + RESOLVESUBRESOURCEREGION_INVALID_RECT = 1050, + CREATE_VIDEODECODECOMMANDQUEUE = 1051, + CREATE_VIDEOPROCESSCOMMANDLIST = 1052, + CREATE_VIDEOPROCESSCOMMANDQUEUE = 1053, + LIVE_VIDEODECODECOMMANDQUEUE = 1054, + LIVE_VIDEOPROCESSCOMMANDLIST = 1055, + LIVE_VIDEOPROCESSCOMMANDQUEUE = 1056, + DESTROY_VIDEODECODECOMMANDQUEUE = 1057, + DESTROY_VIDEOPROCESSCOMMANDLIST = 1058, + DESTROY_VIDEOPROCESSCOMMANDQUEUE = 1059, + CREATE_VIDEOPROCESSOR = 1060, + CREATE_VIDEOPROCESSSTREAM = 1061, + LIVE_VIDEOPROCESSOR = 1062, + LIVE_VIDEOPROCESSSTREAM = 1063, + DESTROY_VIDEOPROCESSOR = 1064, + DESTROY_VIDEOPROCESSSTREAM = 1065, + PROCESS_FRAME_INVALID_PARAMETERS = 1066, + COPY_INVALIDLAYOUT = 1067, + CREATE_CRYPTO_SESSION = 1068, + CREATE_CRYPTO_SESSION_POLICY = 1069, + CREATE_PROTECTED_RESOURCE_SESSION = 1070, + LIVE_CRYPTO_SESSION = 1071, + LIVE_CRYPTO_SESSION_POLICY = 1072, + LIVE_PROTECTED_RESOURCE_SESSION = 1073, + DESTROY_CRYPTO_SESSION = 1074, + DESTROY_CRYPTO_SESSION_POLICY = 1075, + DESTROY_PROTECTED_RESOURCE_SESSION = 1076, + PROTECTED_RESOURCE_SESSION_UNSUPPORTED = 1077, + FENCE_INVALIDOPERATION = 1078, + CREATEQUERY_HEAP_COPY_QUEUE_TIMESTAMPS_NOT_SUPPORTED = 1079, + SAMPLEPOSITIONS_MISMATCH_DEFERRED = 1080, + SAMPLEPOSITIONS_MISMATCH_RECORDTIME_ASSUMEDFROMFIRSTUSE = 1081, + SAMPLEPOSITIONS_MISMATCH_RECORDTIME_ASSUMEDFROMCLEAR = 1082, + CREATE_VIDEODECODERHEAP = 1083, + LIVE_VIDEODECODERHEAP = 1084, + DESTROY_VIDEODECODERHEAP = 1085, + OPENEXISTINGHEAP_INVALIDARG_RETURN = 1086, + OPENEXISTINGHEAP_OUTOFMEMORY_RETURN = 1087, + OPENEXISTINGHEAP_INVALIDADDRESS = 1088, + OPENEXISTINGHEAP_INVALIDHANDLE = 1089, + WRITEBUFFERIMMEDIATE_INVALID_DEST = 1090, + WRITEBUFFERIMMEDIATE_INVALID_MODE = 1091, + WRITEBUFFERIMMEDIATE_INVALID_ALIGNMENT = 1092, + WRITEBUFFERIMMEDIATE_NOT_SUPPORTED = 1093, + SETVIEWINSTANCEMASK_INVALIDARGS = 1094, + VIEW_INSTANCING_UNSUPPORTED = 1095, + VIEW_INSTANCING_INVALIDARGS = 1096, + COPYTEXTUREREGION_MISMATCH_DECODE_REFERENCE_ONLY_FLAG = 1097, + COPYRESOURCE_MISMATCH_DECODE_REFERENCE_ONLY_FLAG = 1098, + CREATE_VIDEO_DECODE_HEAP_CAPS_FAILURE = 1099, + CREATE_VIDEO_DECODE_HEAP_CAPS_UNSUPPORTED = 1100, + VIDEO_DECODE_SUPPORT_INVALID_INPUT = 1101, + CREATE_VIDEO_DECODER_UNSUPPORTED = 1102, + CREATEGRAPHICSPIPELINESTATE_METADATA_ERROR = 1103, + CREATEGRAPHICSPIPELINESTATE_VIEW_INSTANCING_VERTEX_SIZE_EXCEEDED = 1104, + CREATEGRAPHICSPIPELINESTATE_RUNTIME_INTERNAL_ERROR = 1105, + NO_VIDEO_API_SUPPORT = 1106, + VIDEO_PROCESS_SUPPORT_INVALID_INPUT = 1107, + CREATE_VIDEO_PROCESSOR_CAPS_FAILURE = 1108, + VIDEO_PROCESS_SUPPORT_UNSUPPORTED_FORMAT = 1109, + VIDEO_DECODE_FRAME_INVALID_ARGUMENT = 1110, + ENQUEUE_MAKE_RESIDENT_INVALID_FLAGS = 1111, + OPENEXISTINGHEAP_UNSUPPORTED = 1112, + VIDEO_PROCESS_FRAMES_INVALID_ARGUMENT = 1113, + VIDEO_DECODE_SUPPORT_UNSUPPORTED = 1114, + CREATE_COMMANDRECORDER = 1115, + LIVE_COMMANDRECORDER = 1116, + DESTROY_COMMANDRECORDER = 1117, + CREATE_COMMAND_RECORDER_VIDEO_NOT_SUPPORTED = 1118, + CREATE_COMMAND_RECORDER_INVALID_SUPPORT_FLAGS = 1119, + CREATE_COMMAND_RECORDER_INVALID_FLAGS = 1120, + CREATE_COMMAND_RECORDER_MORE_RECORDERS_THAN_LOGICAL_PROCESSORS = 1121, + CREATE_COMMANDPOOL = 1122, + LIVE_COMMANDPOOL = 1123, + DESTROY_COMMANDPOOL = 1124, + CREATE_COMMAND_POOL_INVALID_FLAGS = 1125, + CREATE_COMMAND_LIST_VIDEO_NOT_SUPPORTED = 1126, + COMMAND_RECORDER_SUPPORT_FLAGS_MISMATCH = 1127, + COMMAND_RECORDER_CONTENTION = 1128, + COMMAND_RECORDER_USAGE_WITH_CREATECOMMANDLIST_COMMAND_LIST = 1129, + COMMAND_ALLOCATOR_USAGE_WITH_CREATECOMMANDLIST1_COMMAND_LIST = 1130, + CANNOT_EXECUTE_EMPTY_COMMAND_LIST = 1131, + CANNOT_RESET_COMMAND_POOL_WITH_OPEN_COMMAND_LISTS = 1132, + CANNOT_USE_COMMAND_RECORDER_WITHOUT_CURRENT_TARGET = 1133, + CANNOT_CHANGE_COMMAND_RECORDER_TARGET_WHILE_RECORDING = 1134, + COMMAND_POOL_SYNC = 1135, + EVICT_UNDERFLOW = 1136, + CREATE_META_COMMAND = 1137, + LIVE_META_COMMAND = 1138, + DESTROY_META_COMMAND = 1139, + COPYBUFFERREGION_INVALID_DST_RESOURCE = 1140, + COPYBUFFERREGION_INVALID_SRC_RESOURCE = 1141, + ATOMICCOPYBUFFER_INVALID_DST_RESOURCE = 1142, + ATOMICCOPYBUFFER_INVALID_SRC_RESOURCE = 1143, + CREATEPLACEDRESOURCEONBUFFER_NULL_BUFFER = 1144, + CREATEPLACEDRESOURCEONBUFFER_NULL_RESOURCE_DESC = 1145, + CREATEPLACEDRESOURCEONBUFFER_UNSUPPORTED = 1146, + CREATEPLACEDRESOURCEONBUFFER_INVALID_BUFFER_DIMENSION = 1147, + CREATEPLACEDRESOURCEONBUFFER_INVALID_BUFFER_FLAGS = 1148, + CREATEPLACEDRESOURCEONBUFFER_INVALID_BUFFER_OFFSET = 1149, + CREATEPLACEDRESOURCEONBUFFER_INVALID_RESOURCE_DIMENSION = 1150, + CREATEPLACEDRESOURCEONBUFFER_INVALID_RESOURCE_FLAGS = 1151, + CREATEPLACEDRESOURCEONBUFFER_OUTOFMEMORY_RETURN = 1152, + CANNOT_CREATE_GRAPHICS_AND_VIDEO_COMMAND_RECORDER = 1153, + UPDATETILEMAPPINGS_POSSIBLY_MISMATCHING_PROPERTIES = 1154, + CREATE_COMMAND_LIST_INVALID_COMMAND_LIST_TYPE = 1155, + CLEARUNORDEREDACCESSVIEW_INCOMPATIBLE_WITH_STRUCTURED_BUFFERS = 1156, + COMPUTE_ONLY_DEVICE_OPERATION_UNSUPPORTED = 1157, + BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INVALID = 1158, + EMIT_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_INVALID = 1159, + COPY_RAYTRACING_ACCELERATION_STRUCTURE_INVALID = 1160, + DISPATCH_RAYS_INVALID = 1161, + GET_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO_INVALID = 1162, + CREATE_LIFETIMETRACKER = 1163, + LIVE_LIFETIMETRACKER = 1164, + DESTROY_LIFETIMETRACKER = 1165, + DESTROYOWNEDOBJECT_OBJECTNOTOWNED = 1166, + CREATE_TRACKEDWORKLOAD = 1167, + LIVE_TRACKEDWORKLOAD = 1168, + DESTROY_TRACKEDWORKLOAD = 1169, + RENDER_PASS_ERROR = 1170, + META_COMMAND_ID_INVALID = 1171, + META_COMMAND_UNSUPPORTED_PARAMS = 1172, + META_COMMAND_FAILED_ENUMERATION = 1173, + META_COMMAND_PARAMETER_SIZE_MISMATCH = 1174, + UNINITIALIZED_META_COMMAND = 1175, + META_COMMAND_INVALID_GPU_VIRTUAL_ADDRESS = 1176, + CREATE_VIDEOENCODECOMMANDLIST = 1177, + LIVE_VIDEOENCODECOMMANDLIST = 1178, + DESTROY_VIDEOENCODECOMMANDLIST = 1179, + CREATE_VIDEOENCODECOMMANDQUEUE = 1180, + LIVE_VIDEOENCODECOMMANDQUEUE = 1181, + DESTROY_VIDEOENCODECOMMANDQUEUE = 1182, + CREATE_VIDEOMOTIONESTIMATOR = 1183, + LIVE_VIDEOMOTIONESTIMATOR = 1184, + DESTROY_VIDEOMOTIONESTIMATOR = 1185, + CREATE_VIDEOMOTIONVECTORHEAP = 1186, + LIVE_VIDEOMOTIONVECTORHEAP = 1187, + DESTROY_VIDEOMOTIONVECTORHEAP = 1188, + MULTIPLE_TRACKED_WORKLOADS = 1189, + MULTIPLE_TRACKED_WORKLOAD_PAIRS = 1190, + OUT_OF_ORDER_TRACKED_WORKLOAD_PAIR = 1191, + CANNOT_ADD_TRACKED_WORKLOAD = 1192, + INCOMPLETE_TRACKED_WORKLOAD_PAIR = 1193, + CREATE_STATE_OBJECT_ERROR = 1194, + GET_SHADER_IDENTIFIER_ERROR = 1195, + GET_SHADER_STACK_SIZE_ERROR = 1196, + GET_PIPELINE_STACK_SIZE_ERROR = 1197, + SET_PIPELINE_STACK_SIZE_ERROR = 1198, + GET_SHADER_IDENTIFIER_SIZE_INVALID = 1199, + CHECK_DRIVER_MATCHING_IDENTIFIER_INVALID = 1200, + CHECK_DRIVER_MATCHING_IDENTIFIER_DRIVER_REPORTED_ISSUE = 1201, + RENDER_PASS_INVALID_RESOURCE_BARRIER = 1202, + RENDER_PASS_DISALLOWED_API_CALLED = 1203, + RENDER_PASS_CANNOT_NEST_RENDER_PASSES = 1204, + RENDER_PASS_CANNOT_END_WITHOUT_BEGIN = 1205, + RENDER_PASS_CANNOT_CLOSE_COMMAND_LIST = 1206, + RENDER_PASS_GPU_WORK_WHILE_SUSPENDED = 1207, + RENDER_PASS_MISMATCHING_SUSPEND_RESUME = 1208, + RENDER_PASS_NO_PRIOR_SUSPEND_WITHIN_EXECUTECOMMANDLISTS = 1209, + RENDER_PASS_NO_SUBSEQUENT_RESUME_WITHIN_EXECUTECOMMANDLISTS = 1210, + TRACKED_WORKLOAD_COMMAND_QUEUE_MISMATCH = 1211, + TRACKED_WORKLOAD_NOT_SUPPORTED = 1212, + RENDER_PASS_MISMATCHING_NO_ACCESS = 1213, + RENDER_PASS_UNSUPPORTED_RESOLVE = 1214, + CLEARUNORDEREDACCESSVIEW_INVALID_RESOURCE_PTR = 1215, + WINDOWS7_FENCE_OUTOFORDER_SIGNAL = 1216, + WINDOWS7_FENCE_OUTOFORDER_WAIT = 1217, + VIDEO_CREATE_MOTION_ESTIMATOR_INVALID_ARGUMENT = 1218, + VIDEO_CREATE_MOTION_VECTOR_HEAP_INVALID_ARGUMENT = 1219, + ESTIMATE_MOTION_INVALID_ARGUMENT = 1220, + RESOLVE_MOTION_VECTOR_HEAP_INVALID_ARGUMENT = 1221, + GETGPUVIRTUALADDRESS_INVALID_HEAP_TYPE = 1222, + SET_BACKGROUND_PROCESSING_MODE_INVALID_ARGUMENT = 1223, + CREATE_COMMAND_LIST_INVALID_COMMAND_LIST_TYPE_FOR_FEATURE_LEVEL = 1224, + CREATE_VIDEOEXTENSIONCOMMAND = 1225, + LIVE_VIDEOEXTENSIONCOMMAND = 1226, + DESTROY_VIDEOEXTENSIONCOMMAND = 1227, + INVALID_VIDEO_EXTENSION_COMMAND_ID = 1228, + VIDEO_EXTENSION_COMMAND_INVALID_ARGUMENT = 1229, + CREATE_ROOT_SIGNATURE_NOT_UNIQUE_IN_DXIL_LIBRARY = 1230, + VARIABLE_SHADING_RATE_NOT_ALLOWED_WITH_TIR = 1231, + GEOMETRY_SHADER_OUTPUTTING_BOTH_VIEWPORT_ARRAY_INDEX_AND_SHADING_RATE_NOT_SUPPORTED_ON_DEVICE = 1232, + RSSETSHADING_RATE_INVALID_SHADING_RATE = 1233, + RSSETSHADING_RATE_SHADING_RATE_NOT_PERMITTED_BY_CAP = 1234, + RSSETSHADING_RATE_INVALID_COMBINER = 1235, + RSSETSHADINGRATEIMAGE_REQUIRES_TIER_2 = 1236, + RSSETSHADINGRATE_REQUIRES_TIER_1 = 1237, + SHADING_RATE_IMAGE_INCORRECT_FORMAT = 1238, + SHADING_RATE_IMAGE_INCORRECT_ARRAY_SIZE = 1239, + SHADING_RATE_IMAGE_INCORRECT_MIP_LEVEL = 1240, + SHADING_RATE_IMAGE_INCORRECT_SAMPLE_COUNT = 1241, + SHADING_RATE_IMAGE_INCORRECT_SAMPLE_QUALITY = 1242, + NON_RETAIL_SHADER_MODEL_WONT_VALIDATE = 1243, + CREATEGRAPHICSPIPELINESTATE_AS_ROOT_SIGNATURE_MISMATCH = 1244, + CREATEGRAPHICSPIPELINESTATE_MS_ROOT_SIGNATURE_MISMATCH = 1245, + ADD_TO_STATE_OBJECT_ERROR = 1246, + CREATE_PROTECTED_RESOURCE_SESSION_INVALID_ARGUMENT = 1247, + CREATEGRAPHICSPIPELINESTATE_MS_PSO_DESC_MISMATCH = 1248, + CREATEPIPELINESTATE_MS_INCOMPLETE_TYPE = 1249, + CREATEGRAPHICSPIPELINESTATE_AS_NOT_MS_MISMATCH = 1250, + CREATEGRAPHICSPIPELINESTATE_MS_NOT_PS_MISMATCH = 1251, + NONZERO_SAMPLER_FEEDBACK_MIP_REGION_WITH_INCOMPATIBLE_FORMAT = 1252, + CREATEGRAPHICSPIPELINESTATE_INPUTLAYOUT_SHADER_MISMATCH = 1253, + EMPTY_DISPATCH = 1254, + RESOURCE_FORMAT_REQUIRES_SAMPLER_FEEDBACK_CAPABILITY = 1255, + SAMPLER_FEEDBACK_MAP_INVALID_MIP_REGION = 1256, + SAMPLER_FEEDBACK_MAP_INVALID_DIMENSION = 1257, + SAMPLER_FEEDBACK_MAP_INVALID_SAMPLE_COUNT = 1258, + SAMPLER_FEEDBACK_MAP_INVALID_SAMPLE_QUALITY = 1259, + SAMPLER_FEEDBACK_MAP_INVALID_LAYOUT = 1260, + SAMPLER_FEEDBACK_MAP_REQUIRES_UNORDERED_ACCESS_FLAG = 1261, + SAMPLER_FEEDBACK_CREATE_UAV_NULL_ARGUMENTS = 1262, + SAMPLER_FEEDBACK_UAV_REQUIRES_SAMPLER_FEEDBACK_CAPABILITY = 1263, + SAMPLER_FEEDBACK_CREATE_UAV_REQUIRES_FEEDBACK_MAP_FORMAT = 1264, + CREATEMESHSHADER_INVALIDSHADERBYTECODE = 1265, + CREATEMESHSHADER_OUTOFMEMORY = 1266, + CREATEMESHSHADERWITHSTREAMOUTPUT_INVALIDSHADERTYPE = 1267, + RESOLVESUBRESOURCE_SAMPLER_FEEDBACK_TRANSCODE_INVALID_FORMAT = 1268, + RESOLVESUBRESOURCE_SAMPLER_FEEDBACK_INVALID_MIP_LEVEL_COUNT = 1269, + RESOLVESUBRESOURCE_SAMPLER_FEEDBACK_TRANSCODE_ARRAY_SIZE_MISMATCH = 1270, + SAMPLER_FEEDBACK_CREATE_UAV_MISMATCHING_TARGETED_RESOURCE = 1271, + CREATEMESHSHADER_OUTPUTEXCEEDSMAXSIZE = 1272, + CREATEMESHSHADER_GROUPSHAREDEXCEEDSMAXSIZE = 1273, + VERTEX_SHADER_OUTPUTTING_BOTH_VIEWPORT_ARRAY_INDEX_AND_SHADING_RATE_NOT_SUPPORTED_ON_DEVICE = 1274, + MESH_SHADER_OUTPUTTING_BOTH_VIEWPORT_ARRAY_INDEX_AND_SHADING_RATE_NOT_SUPPORTED_ON_DEVICE = 1275, + CREATEMESHSHADER_MISMATCHEDASMSPAYLOADSIZE = 1276, + CREATE_ROOT_SIGNATURE_UNBOUNDED_STATIC_DESCRIPTORS = 1277, + CREATEAMPLIFICATIONSHADER_INVALIDSHADERBYTECODE = 1278, + CREATEAMPLIFICATIONSHADER_OUTOFMEMORY = 1279, + MESSAGES_END = 1280, +} + +MESSAGE :: struct { + Category: MESSAGE_CATEGORY, + Severity: MESSAGE_SEVERITY, + ID: MESSAGE_ID, + pDescription: cstring, + DescriptionByteLength: SIZE_T, +} + +INFO_QUEUE_FILTER_DESC :: struct { + NumCategories: u32, + pCategoryList: ^MESSAGE_CATEGORY, + NumSeverities: u32, + pSeverityList: ^MESSAGE_SEVERITY, + NumIDs: u32, + pIDList: ^MESSAGE_ID, +} + +INFO_QUEUE_FILTER :: struct { + AllowList: INFO_QUEUE_FILTER_DESC, + DenyList: INFO_QUEUE_FILTER_DESC, +} + + +IInfoQueue_UUID :: "0742a90b-c387-483f-b946-30a7e4e61458" +IInfoQueue :: struct #raw_union { + #subtype iunknown: IUnknown, + using id3d12infoqueue_vtable: ^IInfoQueue_VTable, +} +IInfoQueue_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + SetMessageCountLimit: proc "stdcall" (this: ^IInfoQueue, MessageCountLimit: u64) -> HRESULT, + ClearStoredMessages: proc "stdcall" (this: ^IInfoQueue), + GetMessageA: proc "stdcall" (this: ^IInfoQueue, MessageIndex: u64, pMessage: ^MESSAGE, pMessageByteLength: ^SIZE_T) -> HRESULT, + GetNumMessagesAllowedByStorageFilter: proc "stdcall" (this: ^IInfoQueue) -> u64, + GetNumMessagesDeniedByStorageFilter: proc "stdcall" (this: ^IInfoQueue) -> u64, + GetNumStoredMessages: proc "stdcall" (this: ^IInfoQueue) -> u64, + GetNumStoredMessagesAllowedByRetrievalFilter: proc "stdcall" (this: ^IInfoQueue) -> u64, + GetNumMessagesDiscardedByMessageCountLimit: proc "stdcall" (this: ^IInfoQueue) -> u64, + GetMessageCountLimit: proc "stdcall" (this: ^IInfoQueue) -> u64, + AddStorageFilterEntries: proc "stdcall" (this: ^IInfoQueue, pFilter: ^INFO_QUEUE_FILTER) -> HRESULT, + GetStorageFilter: proc "stdcall" (this: ^IInfoQueue, pFilter: ^INFO_QUEUE_FILTER, pFilterByteLength: ^SIZE_T) -> HRESULT, + ClearStorageFilter: proc "stdcall" (this: ^IInfoQueue), + PushEmptyStorageFilter: proc "stdcall" (this: ^IInfoQueue) -> HRESULT, + PushCopyOfStorageFilter: proc "stdcall" (this: ^IInfoQueue) -> HRESULT, + PushStorageFilter: proc "stdcall" (this: ^IInfoQueue, pFilter: ^INFO_QUEUE_FILTER) -> HRESULT, + PopStorageFilter: proc "stdcall" (this: ^IInfoQueue), + GetStorageFilterStackSize: proc "stdcall" (this: ^IInfoQueue) -> u32, + AddRetrievalFilterEntries: proc "stdcall" (this: ^IInfoQueue, pFilter: ^INFO_QUEUE_FILTER) -> HRESULT, + GetRetrievalFilter: proc "stdcall" (this: ^IInfoQueue, pFilter: ^INFO_QUEUE_FILTER, pFilterByteLength: ^SIZE_T) -> HRESULT, + ClearRetrievalFilter: proc "stdcall" (this: ^IInfoQueue), + PushEmptyRetrievalFilter: proc "stdcall" (this: ^IInfoQueue) -> HRESULT, + PushCopyOfRetrievalFilter: proc "stdcall" (this: ^IInfoQueue) -> HRESULT, + PushRetrievalFilter: proc "stdcall" (this: ^IInfoQueue, pFilter: ^INFO_QUEUE_FILTER) -> HRESULT, + PopRetrievalFilter: proc "stdcall" (this: ^IInfoQueue), + GetRetrievalFilterStackSize: proc "stdcall" (this: ^IInfoQueue) -> u32, + AddMessage: proc "stdcall" (this: ^IInfoQueue, Category: MESSAGE_CATEGORY, Severity: MESSAGE_SEVERITY, ID: MESSAGE_ID, pDescription: cstring) -> HRESULT, + AddApplicationMessage: proc "stdcall" (this: ^IInfoQueue, Severity: MESSAGE_SEVERITY, pDescription: cstring) -> HRESULT, + SetBreakOnCategory: proc "stdcall" (this: ^IInfoQueue, Category: MESSAGE_CATEGORY, bEnable: BOOL) -> HRESULT, + SetBreakOnSeverity: proc "stdcall" (this: ^IInfoQueue, Severity: MESSAGE_SEVERITY, bEnable: BOOL) -> HRESULT, + SetBreakOnID: proc "stdcall" (this: ^IInfoQueue, ID: MESSAGE_ID, bEnable: BOOL) -> HRESULT, + GetBreakOnCategory: proc "stdcall" (this: ^IInfoQueue, Category: MESSAGE_CATEGORY) -> BOOL, + GetBreakOnSeverity: proc "stdcall" (this: ^IInfoQueue, Severity: MESSAGE_SEVERITY) -> BOOL, + GetBreakOnID: proc "stdcall" (this: ^IInfoQueue, ID: MESSAGE_ID) -> BOOL, + SetMuteDebugOutput: proc "stdcall" (this: ^IInfoQueue, bMute: BOOL), + GetMuteDebugOutput: proc "stdcall" (this: ^IInfoQueue) -> BOOL, +} + +PFN_CREATE_DEVICE :: #type proc "c" (a0: ^IUnknown, a1: FEATURE_LEVEL, a2: ^IID, a3: ^rawptr) -> HRESULT +PFN_GET_DEBUG_INTERFACE :: #type proc "c" (a0: ^IID, a1: ^rawptr) -> HRESULT + +AXIS_SHADING_RATE :: enum i32 { + _1X = 0, + _2X = 1, + _4X = 2, +} + +SHADING_RATE :: enum i32 { + _1X1 = 0, + _1X2 = 1, + _2X1 = 4, + _2X2 = 5, + _2X4 = 6, + _4X2 = 9, + _4X4 = 10, +} + +SHADING_RATE_COMBINER :: enum i32 { + PASSTHROUGH = 0, + OVERRIDE = 1, + MIN = 2, + MAX = 3, + SUM = 4, +} + + +IGraphicsCommandList5_UUID :: "55050859-4024-474c-87f5-6472eaee44ea" +IGraphicsCommandList5 :: struct #raw_union { + #subtype id3d12graphicscommandlist4: IGraphicsCommandList4, + using id3d12graphicscommandlist5_vtable: ^IGraphicsCommandList5_VTable, +} +IGraphicsCommandList5_VTable :: struct { + using id3d12graphicscommandlist4_vtable: IGraphicsCommandList4_VTable, + RSSetShadingRate: proc "stdcall" (this: ^IGraphicsCommandList5, baseShadingRate: SHADING_RATE, combiners: ^SHADING_RATE_COMBINER), + RSSetShadingRateImage: proc "stdcall" (this: ^IGraphicsCommandList5, shadingRateImage: ^IResource), +} + +DISPATCH_MESH_ARGUMENTS :: struct { + ThreadGroupCountX: u32, + ThreadGroupCountY: u32, + ThreadGroupCountZ: u32, +} + + +IGraphicsCommandList6_UUID :: "c3827890-e548-4cfa-96cf-5689a9370f80" +IGraphicsCommandList6 :: struct #raw_union { + #subtype id3d12graphicscommandlist5: IGraphicsCommandList5, + using id3d12graphicscommandlist6_vtable: ^IGraphicsCommandList6_VTable, +} +IGraphicsCommandList6_VTable :: struct { + using id3d12graphicscommandlist5_vtable: IGraphicsCommandList5_VTable, + DispatchMesh: proc "stdcall" (this: ^IGraphicsCommandList6, ThreadGroupCountX: u32, ThreadGroupCountY: u32, ThreadGroupCountZ: u32), +} + +SHADER_VERSION_TYPE :: enum i32 { + PIXEL_SHADER = 0, + VERTEX_SHADER = 1, + GEOMETRY_SHADER = 2, + + HULL_SHADER = 3, + DOMAIN_SHADER = 4, + COMPUTE_SHADER = 5, + + RESERVED0 = 65520, +} + +SIGNATURE_PARAMETER_DESC :: struct { + SemanticName: cstring, + SemanticIndex: u32, + Register: u32, + SystemValueType: NAME, + ComponentType: REGISTER_COMPONENT_TYPE, + Mask: u8, + + ReadWriteMask: u8, + + Stream: u32, + MinPrecision: MIN_PRECISION, +} + +SHADER_BUFFER_DESC :: struct { + Name: cstring, + Type: CBUFFER_TYPE, + Variables: u32, + Size: u32, + uFlags: u32, +} + +SHADER_VARIABLE_DESC :: struct { + Name: cstring, + StartOffset: u32, + Size: u32, + uFlags: u32, + DefaultValue: rawptr, + StartTexture: u32, + TextureSize: u32, + StartSampler: u32, + SamplerSize: u32, +} + +SHADER_TYPE_DESC :: struct { + Class: SHADER_VARIABLE_CLASS, + Type: SHADER_VARIABLE_TYPE, + Rows: u32, + Columns: u32, + Elements: u32, + Members: u32, + Offset: u32, + Name: cstring, +} +SHADER_DESC :: struct { + Version: u32, + Creator: cstring, + Flags: u32, + + ConstantBuffers: u32, + BoundResources: u32, + InputParameters: u32, + OutputParameters: u32, + + InstructionCount: u32, + TempRegisterCount: u32, + TempArrayCount: u32, + DefCount: u32, + DclCount: u32, + TextureNormalInstructions: u32, + TextureLoadInstructions: u32, + TextureCompInstructions: u32, + TextureBiasInstructions: u32, + TextureGradientInstructions: u32, + FloatInstructionCount: u32, + IntInstructionCount: u32, + UintInstructionCount: u32, + StaticFlowControlCount: u32, + DynamicFlowControlCount: u32, + MacroInstructionCount: u32, + ArrayInstructionCount: u32, + CutInstructionCount: u32, + EmitInstructionCount: u32, + GSOutputTopology: PRIMITIVE_TOPOLOGY, + GSMaxOutputVertexCount: u32, + InputPrimitive: PRIMITIVE, + PatchConstantParameters: u32, + cGSInstanceCount: u32, + cControlPoints: u32, + HSOutputPrimitive: TESSELLATOR_OUTPUT_PRIMITIVE, + HSPartitioning: TESSELLATOR_PARTITIONING, + TessellatorDomain: TESSELLATOR_DOMAIN, + + cBarrierInstructions: u32, + cInterlockedInstructions: u32, + cTextureStoreInstructions: u32, +} + +SHADER_INPUT_BIND_DESC :: struct { + Name: cstring, + Type: SHADER_INPUT_TYPE, + BindPoint: u32, + BindCount: u32, + + uFlags: u32, + ReturnType: RESOURCE_RETURN_TYPE, + Dimension: SRV_DIMENSION, + NumSamples: u32, + Space: u32, + uID: u32, +} + +LIBRARY_DESC :: struct { + Creator: cstring, + Flags: u32, + FunctionCount: u32, +} + +FUNCTION_DESC :: struct { + Version: u32, + Creator: cstring, + Flags: u32, + + ConstantBuffers: u32, + BoundResources: u32, + + InstructionCount: u32, + TempRegisterCount: u32, + TempArrayCount: u32, + DefCount: u32, + DclCount: u32, + TextureNormalInstructions: u32, + TextureLoadInstructions: u32, + TextureCompInstructions: u32, + TextureBiasInstructions: u32, + TextureGradientInstructions: u32, + FloatInstructionCount: u32, + IntInstructionCount: u32, + UintInstructionCount: u32, + StaticFlowControlCount: u32, + DynamicFlowControlCount: u32, + MacroInstructionCount: u32, + ArrayInstructionCount: u32, + MovInstructionCount: u32, + MovcInstructionCount: u32, + ConversionInstructionCount: u32, + BitwiseInstructionCount: u32, + MinFeatureLevel: FEATURE_LEVEL, + RequiredFeatureFlags: u64, + + Name: cstring, + FunctionParameterCount: i32, + HasReturn: BOOL, + Has10Level9VertexShader: BOOL, + Has10Level9PixelShader: BOOL, +} + +PARAMETER_DESC :: struct { + Name: cstring, + SemanticName: cstring, + Type: SHADER_VARIABLE_TYPE, + Class: SHADER_VARIABLE_CLASS, + Rows: u32, + Columns: u32, + InterpolationMode: INTERPOLATION_MODE, + Flags: PARAMETER_FLAGS, + + FirstInRegister: u32, + FirstInComponent: u32, + FirstOutRegister: u32, + FirstOutComponent: u32, +} + +IShaderReflectionType :: struct { + vtable: ^IShaderReflectionType_VTable, +} +IShaderReflectionType_VTable :: struct { + GetDesc: proc "stdcall" (this: ^IShaderReflectionType, pDesc: ^SHADER_TYPE_DESC) -> HRESULT, + GetMemberTypeByIndex: proc "stdcall" (this: ^IShaderReflectionType, Index: u32) -> ^IShaderReflectionType, + GetMemberTypeByName: proc "stdcall" (this: ^IShaderReflectionType, Name: cstring) -> ^IShaderReflectionType, + GetMemberTypeName: proc "stdcall" (this: ^IShaderReflectionType, Index: u32) -> cstring, + IsEqual: proc "stdcall" (this: ^IShaderReflectionType, pType: ^IShaderReflectionType) -> HRESULT, + GetSubType: proc "stdcall" (this: ^IShaderReflectionType) -> ^IShaderReflectionType, + GetBaseClass: proc "stdcall" (this: ^IShaderReflectionType) -> ^IShaderReflectionType, + GetNumInterfaces: proc "stdcall" (this: ^IShaderReflectionType) -> u32, + GetInterfaceByIndex: proc "stdcall" (this: ^IShaderReflectionType, uIndex: u32) -> ^IShaderReflectionType, + IsOfType: proc "stdcall" (this: ^IShaderReflectionType, pType: ^IShaderReflectionType) -> HRESULT, + ImplementsInterface: proc "stdcall" (this: ^IShaderReflectionType, pBase: ^IShaderReflectionType) -> HRESULT, +} + +IShaderReflectionVariable :: struct { + vtable: ^IShaderReflectionVariable_VTable, +} +IShaderReflectionVariable_VTable :: struct { + GetDesc: proc "stdcall" (this: ^IShaderReflectionVariable, pDesc: ^SHADER_VARIABLE_DESC) -> HRESULT, + GetType: proc "stdcall" (this: ^IShaderReflectionVariable) -> ^IShaderReflectionType, + GetBuffer: proc "stdcall" (this: ^IShaderReflectionVariable) -> ^IShaderReflectionConstantBuffer, + GetInterfaceSlot: proc "stdcall" (this: ^IShaderReflectionVariable, uArrayIndex: u32) -> u32, +} + +IShaderReflectionConstantBuffer :: struct { + vtable: ^IShaderReflectionConstantBuffer_VTable, +} +IShaderReflectionConstantBuffer_VTable :: struct { + GetDesc: proc "stdcall" (this: ^IShaderReflectionConstantBuffer, pDesc: ^SHADER_BUFFER_DESC) -> HRESULT, + GetVariableByIndex: proc "stdcall" (this: ^IShaderReflectionConstantBuffer, Index: u32) -> ^IShaderReflectionVariable, + GetVariableByName: proc "stdcall" (this: ^IShaderReflectionConstantBuffer, Name: cstring) -> ^IShaderReflectionVariable, +} + +IShaderReflection :: struct #raw_union { + #subtype iunknown: IUnknown, + using id3d12shaderreflection_vtable: ^IShaderReflection_VTable, +} +IShaderReflection_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + GetDesc: proc "stdcall" (this: ^IShaderReflection, pDesc: ^SHADER_DESC) -> HRESULT, + GetConstantBufferByIndex: proc "stdcall" (this: ^IShaderReflection, Index: u32) -> ^IShaderReflectionConstantBuffer, + GetConstantBufferByName: proc "stdcall" (this: ^IShaderReflection, Name: cstring) -> ^IShaderReflectionConstantBuffer, + GetResourceBindingDesc: proc "stdcall" (this: ^IShaderReflection, ResourceIndex: u32, pDesc: ^SHADER_INPUT_BIND_DESC) -> HRESULT, + GetInputParameterDesc: proc "stdcall" (this: ^IShaderReflection, ParameterIndex: u32, pDesc: ^SIGNATURE_PARAMETER_DESC) -> HRESULT, + GetOutputParameterDesc: proc "stdcall" (this: ^IShaderReflection, ParameterIndex: u32, pDesc: ^SIGNATURE_PARAMETER_DESC) -> HRESULT, + GetPatchConstantParameterDesc: proc "stdcall" (this: ^IShaderReflection, ParameterIndex: u32, pDesc: ^SIGNATURE_PARAMETER_DESC) -> HRESULT, + GetVariableByName: proc "stdcall" (this: ^IShaderReflection, Name: cstring) -> ^IShaderReflectionVariable, + GetResourceBindingDescByName: proc "stdcall" (this: ^IShaderReflection, Name: cstring, pDesc: ^SHADER_INPUT_BIND_DESC) -> HRESULT, + GetMovInstructionCount: proc "stdcall" (this: ^IShaderReflection) -> u32, + GetMovcInstructionCount: proc "stdcall" (this: ^IShaderReflection) -> u32, + GetConversionInstructionCount: proc "stdcall" (this: ^IShaderReflection) -> u32, + GetBitwiseInstructionCount: proc "stdcall" (this: ^IShaderReflection) -> u32, + GetGSInputPrimitive: proc "stdcall" (this: ^IShaderReflection) -> PRIMITIVE, + IsSampleFrequencyShader: proc "stdcall" (this: ^IShaderReflection) -> BOOL, + GetNumInterfaceSlots: proc "stdcall" (this: ^IShaderReflection) -> u32, + GetMinFeatureLevel: proc "stdcall" (this: ^IShaderReflection, pLevel: ^FEATURE_LEVEL) -> HRESULT, + GetThreadGroupSize: proc "stdcall" (this: ^IShaderReflection, pSizeX: ^u32, pSizeY: ^u32, pSizeZ: ^u32) -> u32, + GetRequiresFlags: proc "stdcall" (this: ^IShaderReflection) -> u64, +} + +ILibraryReflection :: struct #raw_union { + #subtype iunknown: IUnknown, + using id3d12libraryreflection_vtable: ^ILibraryReflection_VTable, +} +ILibraryReflection_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + GetDesc: proc "stdcall" (this: ^ILibraryReflection, pDesc: ^LIBRARY_DESC) -> HRESULT, + GetFunctionByIndex: proc "stdcall" (this: ^ILibraryReflection, FunctionIndex: i32) -> ^IFunctionReflection, +} + +IFunctionReflection :: struct { + vtable: ^IFunctionReflection_VTable, +} +IFunctionReflection_VTable :: struct { + GetDesc: proc "stdcall" (this: ^IFunctionReflection, pDesc: ^FUNCTION_DESC) -> HRESULT, + GetConstantBufferByIndex: proc "stdcall" (this: ^IFunctionReflection, BufferIndex: u32) -> ^IShaderReflectionConstantBuffer, + GetConstantBufferByName: proc "stdcall" (this: ^IFunctionReflection, Name: cstring) -> ^IShaderReflectionConstantBuffer, + GetResourceBindingDesc: proc "stdcall" (this: ^IFunctionReflection, ResourceIndex: u32, pDesc: ^SHADER_INPUT_BIND_DESC) -> HRESULT, + GetVariableByName: proc "stdcall" (this: ^IFunctionReflection, Name: cstring) -> ^IShaderReflectionVariable, + GetResourceBindingDescByName: proc "stdcall" (this: ^IFunctionReflection, Name: cstring, pDesc: ^SHADER_INPUT_BIND_DESC) -> HRESULT, + GetFunctionParameter: proc "stdcall" (this: ^IFunctionReflection, ParameterIndex: i32) -> ^IFunctionParameterReflection, +} + +IFunctionParameterReflection :: struct { + vtable: ^IFunctionParameterReflection_VTable, +} +IFunctionParameterReflection_VTable :: struct { + GetDesc: proc "stdcall" (this: ^IFunctionParameterReflection, pDesc: ^PARAMETER_DESC) -> HRESULT, +} diff --git a/vendor/directx/d3d12/d3d12_constants.odin b/vendor/directx/d3d12/d3d12_constants.odin new file mode 100644 index 000000000..0fbda6b6a --- /dev/null +++ b/vendor/directx/d3d12/d3d12_constants.odin @@ -0,0 +1,531 @@ +package directx_d3d12 + +D3D_FL9_1_REQ_TEXTURE1D_U_DIMENSION :: 2048 +D3D_FL9_3_REQ_TEXTURE1D_U_DIMENSION :: 4096 +D3D_FL9_1_REQ_TEXTURE2D_U_OR_V_DIMENSION :: 2048 +D3D_FL9_3_REQ_TEXTURE2D_U_OR_V_DIMENSION :: 4096 +D3D_FL9_1_REQ_TEXTURECUBE_DIMENSION :: 512 +D3D_FL9_3_REQ_TEXTURECUBE_DIMENSION :: 4096 +D3D_FL9_1_REQ_TEXTURE3D_U_V_OR_W_DIMENSION :: 256 +D3D_FL9_1_DEFAULT_MAX_ANISOTROPY :: 2 +D3D_FL9_1_IA_PRIMITIVE_MAX_COUNT :: 65535 +D3D_FL9_2_IA_PRIMITIVE_MAX_COUNT :: 1048575 +D3D_FL9_1_SIMULTANEOUS_RENDER_TARGET_COUNT :: 1 +D3D_FL9_3_SIMULTANEOUS_RENDER_TARGET_COUNT :: 4 +D3D_FL9_1_MAX_TEXTURE_REPEAT :: 128 +D3D_FL9_2_MAX_TEXTURE_REPEAT :: 2048 +D3D_FL9_3_MAX_TEXTURE_REPEAT :: 8192 + +D3D_COMPONENT_MASK_X :: 1 +D3D_COMPONENT_MASK_Y :: 2 +D3D_COMPONENT_MASK_Z :: 4 +D3D_COMPONENT_MASK_W :: 8 + +D3D12_16BIT_INDEX_STRIP_CUT_VALUE :: 0xffff +D3D12_32BIT_INDEX_STRIP_CUT_VALUE :: 0xffffffff +D3D12_8BIT_INDEX_STRIP_CUT_VALUE :: 0xff + +D3D12_APPEND_ALIGNED_ELEMENT :: 0xffffffff +D3D12_ARRAY_AXIS_ADDRESS_RANGE_BIT_COUNT :: 9 + +D3D12_CLIP_OR_CULL_DISTANCE_COUNT :: 8 +D3D12_CLIP_OR_CULL_DISTANCE_ELEMENT_COUNT :: 2 + +D3D12_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT :: 14 +D3D12_COMMONSHADER_CONSTANT_BUFFER_COMPONENTS :: 4 +D3D12_COMMONSHADER_CONSTANT_BUFFER_COMPONENT_BIT_COUNT :: 32 +D3D12_COMMONSHADER_CONSTANT_BUFFER_HW_SLOT_COUNT :: 15 +D3D12_COMMONSHADER_CONSTANT_BUFFER_PARTIAL_UPDATE_EXTENTS_BYTE_ALIGNMENT :: 16 +D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COMPONENTS :: 4 +D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COUNT :: 15 +D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READS_PER_INST :: 1 +D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READ_PORTS :: 1 +D3D12_COMMONSHADER_FLOWCONTROL_NESTING_LIMIT :: 64 +D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COMPONENTS :: 4 +D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COUNT :: 1 +D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READS_PER_INST :: 1 +D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READ_PORTS :: 1 +D3D12_COMMONSHADER_IMMEDIATE_VALUE_COMPONENT_BIT_COUNT :: 32 +D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_COMPONENTS :: 1 +D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_COUNT :: 128 +D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_READS_PER_INST :: 1 +D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_READ_PORTS :: 1 +D3D12_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT :: 128 +D3D12_COMMONSHADER_SAMPLER_REGISTER_COMPONENTS :: 1 +D3D12_COMMONSHADER_SAMPLER_REGISTER_COUNT :: 16 +D3D12_COMMONSHADER_SAMPLER_REGISTER_READS_PER_INST :: 1 +D3D12_COMMONSHADER_SAMPLER_REGISTER_READ_PORTS :: 1 +D3D12_COMMONSHADER_SAMPLER_SLOT_COUNT :: 16 +D3D12_COMMONSHADER_SUBROUTINE_NESTING_LIMIT :: 32 +D3D12_COMMONSHADER_TEMP_REGISTER_COMPONENTS :: 4 +D3D12_COMMONSHADER_TEMP_REGISTER_COMPONENT_BIT_COUNT :: 32 +D3D12_COMMONSHADER_TEMP_REGISTER_COUNT :: 4096 +D3D12_COMMONSHADER_TEMP_REGISTER_READS_PER_INST :: 3 +D3D12_COMMONSHADER_TEMP_REGISTER_READ_PORTS :: 3 +D3D12_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MAX :: 10 +D3D12_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MIN :: -10 +D3D12_COMMONSHADER_TEXEL_OFFSET_MAX_NEGATIVE :: -8 +D3D12_COMMONSHADER_TEXEL_OFFSET_MAX_POSITIVE :: 7 + +D3D12_CONSTANT_BUFFER_DATA_PLACEMENT_ALIGNMENT :: 256 + +D3D12_CS_4_X_BUCKET00_MAX_BYTES_TGSM_WRITABLE_PER_THREAD :: 256 +D3D12_CS_4_X_BUCKET00_MAX_NUM_THREADS_PER_GROUP :: 64 +D3D12_CS_4_X_BUCKET01_MAX_BYTES_TGSM_WRITABLE_PER_THREAD :: 240 +D3D12_CS_4_X_BUCKET01_MAX_NUM_THREADS_PER_GROUP :: 68 +D3D12_CS_4_X_BUCKET02_MAX_BYTES_TGSM_WRITABLE_PER_THREAD :: 224 +D3D12_CS_4_X_BUCKET02_MAX_NUM_THREADS_PER_GROUP :: 72 +D3D12_CS_4_X_BUCKET03_MAX_BYTES_TGSM_WRITABLE_PER_THREAD :: 208 +D3D12_CS_4_X_BUCKET03_MAX_NUM_THREADS_PER_GROUP :: 76 +D3D12_CS_4_X_BUCKET04_MAX_BYTES_TGSM_WRITABLE_PER_THREAD :: 192 +D3D12_CS_4_X_BUCKET04_MAX_NUM_THREADS_PER_GROUP :: 84 +D3D12_CS_4_X_BUCKET05_MAX_BYTES_TGSM_WRITABLE_PER_THREAD :: 176 +D3D12_CS_4_X_BUCKET05_MAX_NUM_THREADS_PER_GROUP :: 92 +D3D12_CS_4_X_BUCKET06_MAX_BYTES_TGSM_WRITABLE_PER_THREAD :: 160 +D3D12_CS_4_X_BUCKET06_MAX_NUM_THREADS_PER_GROUP :: 100 +D3D12_CS_4_X_BUCKET07_MAX_BYTES_TGSM_WRITABLE_PER_THREAD :: 144 +D3D12_CS_4_X_BUCKET07_MAX_NUM_THREADS_PER_GROUP :: 112 +D3D12_CS_4_X_BUCKET08_MAX_BYTES_TGSM_WRITABLE_PER_THREAD :: 128 +D3D12_CS_4_X_BUCKET08_MAX_NUM_THREADS_PER_GROUP :: 128 +D3D12_CS_4_X_BUCKET09_MAX_BYTES_TGSM_WRITABLE_PER_THREAD :: 112 +D3D12_CS_4_X_BUCKET09_MAX_NUM_THREADS_PER_GROUP :: 144 +D3D12_CS_4_X_BUCKET10_MAX_BYTES_TGSM_WRITABLE_PER_THREAD :: 96 +D3D12_CS_4_X_BUCKET10_MAX_NUM_THREADS_PER_GROUP :: 168 +D3D12_CS_4_X_BUCKET11_MAX_BYTES_TGSM_WRITABLE_PER_THREAD :: 80 +D3D12_CS_4_X_BUCKET11_MAX_NUM_THREADS_PER_GROUP :: 204 +D3D12_CS_4_X_BUCKET12_MAX_BYTES_TGSM_WRITABLE_PER_THREAD :: 64 +D3D12_CS_4_X_BUCKET12_MAX_NUM_THREADS_PER_GROUP :: 256 +D3D12_CS_4_X_BUCKET13_MAX_BYTES_TGSM_WRITABLE_PER_THREAD :: 48 +D3D12_CS_4_X_BUCKET13_MAX_NUM_THREADS_PER_GROUP :: 340 +D3D12_CS_4_X_BUCKET14_MAX_BYTES_TGSM_WRITABLE_PER_THREAD :: 32 +D3D12_CS_4_X_BUCKET14_MAX_NUM_THREADS_PER_GROUP :: 512 +D3D12_CS_4_X_BUCKET15_MAX_BYTES_TGSM_WRITABLE_PER_THREAD :: 16 +D3D12_CS_4_X_BUCKET15_MAX_NUM_THREADS_PER_GROUP :: 768 +D3D12_CS_4_X_DISPATCH_MAX_THREAD_GROUPS_IN_Z_DIMENSION :: 1 +D3D12_CS_4_X_RAW_UAV_BYTE_ALIGNMENT :: 256 +D3D12_CS_4_X_THREAD_GROUP_MAX_THREADS_PER_GROUP :: 768 +D3D12_CS_4_X_THREAD_GROUP_MAX_X :: 768 +D3D12_CS_4_X_THREAD_GROUP_MAX_Y :: 768 +D3D12_CS_4_X_UAV_REGISTER_COUNT :: 1 + +D3D12_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION :: 65535 +D3D12_CS_TGSM_REGISTER_COUNT :: 8192 +D3D12_CS_TGSM_REGISTER_READS_PER_INST :: 1 +D3D12_CS_TGSM_RESOURCE_REGISTER_COMPONENTS :: 1 +D3D12_CS_TGSM_RESOURCE_REGISTER_READ_PORTS :: 1 +D3D12_CS_THREADGROUPID_REGISTER_COMPONENTS :: 3 +D3D12_CS_THREADGROUPID_REGISTER_COUNT :: 1 +D3D12_CS_THREADIDINGROUPFLATTENED_REGISTER_COMPONENTS :: 1 +D3D12_CS_THREADIDINGROUPFLATTENED_REGISTER_COUNT :: 1 +D3D12_CS_THREADIDINGROUP_REGISTER_COMPONENTS :: 3 +D3D12_CS_THREADIDINGROUP_REGISTER_COUNT :: 1 +D3D12_CS_THREADID_REGISTER_COMPONENTS :: 3 +D3D12_CS_THREADID_REGISTER_COUNT :: 1 +D3D12_CS_THREAD_GROUP_MAX_THREADS_PER_GROUP :: 1024 +D3D12_CS_THREAD_GROUP_MAX_X :: 1024 +D3D12_CS_THREAD_GROUP_MAX_Y :: 1024 +D3D12_CS_THREAD_GROUP_MAX_Z :: 64 +D3D12_CS_THREAD_GROUP_MIN_X :: 1 +D3D12_CS_THREAD_GROUP_MIN_Y :: 1 +D3D12_CS_THREAD_GROUP_MIN_Z :: 1 +D3D12_CS_THREAD_LOCAL_TEMP_REGISTER_POOL :: 16384 + +D3D12_DEFAULT_BLEND_FACTOR_ALPHA :: 1.0 +D3D12_DEFAULT_BLEND_FACTOR_BLUE :: 1.0 +D3D12_DEFAULT_BLEND_FACTOR_GREEN :: 1.0 +D3D12_DEFAULT_BLEND_FACTOR_RED :: 1.0 +D3D12_DEFAULT_BORDER_COLOR_COMPONENT :: 0.0 +D3D12_DEFAULT_DEPTH_BIAS :: 0 +D3D12_DEFAULT_DEPTH_BIAS_CLAMP :: 0.0 +D3D12_DEFAULT_MAX_ANISOTROPY :: 16 +D3D12_DEFAULT_MIP_LOD_BIAS :: 0.0 +D3D12_DEFAULT_MSAA_RESOURCE_PLACEMENT_ALIGNMENT :: 4194304 +D3D12_DEFAULT_RENDER_TARGET_ARRAY_INDEX :: 0 + +D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT :: 65536 +D3D12_DEFAULT_SAMPLE_MASK :: 0xffffffff +D3D12_DEFAULT_SCISSOR_ENDX :: 0 +D3D12_DEFAULT_SCISSOR_ENDY :: 0 +D3D12_DEFAULT_SCISSOR_STARTX :: 0 +D3D12_DEFAULT_SCISSOR_STARTY :: 0 +D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS :: 0.0 +D3D12_DEFAULT_STENCIL_READ_MASK :: 0xff +D3D12_DEFAULT_STENCIL_REFERENCE :: 0 +D3D12_DEFAULT_STENCIL_WRITE_MASK :: 0xff +D3D12_DEFAULT_VIEWPORT_AND_SCISSORRECT_INDEX :: 0 +D3D12_DEFAULT_VIEWPORT_HEIGHT :: 0 +D3D12_DEFAULT_VIEWPORT_MAX_DEPTH :: 0.0 +D3D12_DEFAULT_VIEWPORT_MIN_DEPTH :: 0.0 +D3D12_DEFAULT_VIEWPORT_TOPLEFTX :: 0 +D3D12_DEFAULT_VIEWPORT_TOPLEFTY :: 0 +D3D12_DEFAULT_VIEWPORT_WIDTH :: 0 + +D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND :: 0xffffffff + +D3D12_DRIVER_RESERVED_REGISTER_SPACE_VALUES_END :: 0xfffffff7 +D3D12_DRIVER_RESERVED_REGISTER_SPACE_VALUES_START :: 0xfffffff0 + +D3D12_DS_INPUT_CONTROL_POINTS_MAX_TOTAL_SCALARS :: 3968 +D3D12_DS_INPUT_CONTROL_POINT_REGISTER_COMPONENTS :: 4 +D3D12_DS_INPUT_CONTROL_POINT_REGISTER_COMPONENT_BIT_COUNT :: 32 +D3D12_DS_INPUT_CONTROL_POINT_REGISTER_COUNT :: 32 +D3D12_DS_INPUT_CONTROL_POINT_REGISTER_READS_PER_INST :: 2 +D3D12_DS_INPUT_CONTROL_POINT_REGISTER_READ_PORTS :: 1 +D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_COMPONENTS :: 3 +D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_COMPONENT_BIT_COUNT :: 32 +D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_COUNT :: 1 +D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_READS_PER_INST :: 2 +D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_READ_PORTS :: 1 +D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_COMPONENTS :: 4 +D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_COMPONENT_BIT_COUNT :: 32 +D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_COUNT :: 32 +D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_READS_PER_INST :: 2 +D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_READ_PORTS :: 1 +D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENTS :: 1 +D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENT_BIT_COUNT :: 32 +D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_COUNT :: 1 +D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_READS_PER_INST :: 2 +D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_READ_PORTS :: 1 +D3D12_DS_OUTPUT_REGISTER_COMPONENTS :: 4 +D3D12_DS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT :: 32 +D3D12_DS_OUTPUT_REGISTER_COUNT :: 32 + +D3D12_FLOAT16_FUSED_TOLERANCE_IN_ULP :: 0.6 +D3D12_FLOAT32_MAX :: 3.402823466e+38 +D3D12_FLOAT32_TO_INTEGER_TOLERANCE_IN_ULP :: 0.6 +D3D12_FLOAT_TO_SRGB_EXPONENT_DENOMINATOR :: 2.4 +D3D12_FLOAT_TO_SRGB_EXPONENT_NUMERATOR :: 1.0 +D3D12_FLOAT_TO_SRGB_OFFSET :: 0.055 +D3D12_FLOAT_TO_SRGB_SCALE_1 :: 12.92 +D3D12_FLOAT_TO_SRGB_SCALE_2 :: 1.055 +D3D12_FLOAT_TO_SRGB_THRESHOLD :: 0.0031308 +D3D12_FTOI_INSTRUCTION_MAX_INPUT :: 2147483647.999 +D3D12_FTOI_INSTRUCTION_MIN_INPUT :: -2147483648.999 +D3D12_FTOU_INSTRUCTION_MAX_INPUT :: 4294967295.999 +D3D12_FTOU_INSTRUCTION_MIN_INPUT :: 0.0 + +D3D12_GS_INPUT_INSTANCE_ID_READS_PER_INST :: 2 +D3D12_GS_INPUT_INSTANCE_ID_READ_PORTS :: 1 +D3D12_GS_INPUT_INSTANCE_ID_REGISTER_COMPONENTS :: 1 +D3D12_GS_INPUT_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT :: 32 +D3D12_GS_INPUT_INSTANCE_ID_REGISTER_COUNT :: 1 +D3D12_GS_INPUT_PRIM_CONST_REGISTER_COMPONENTS :: 1 +D3D12_GS_INPUT_PRIM_CONST_REGISTER_COMPONENT_BIT_COUNT :: 32 +D3D12_GS_INPUT_PRIM_CONST_REGISTER_COUNT :: 1 +D3D12_GS_INPUT_PRIM_CONST_REGISTER_READS_PER_INST :: 2 +D3D12_GS_INPUT_PRIM_CONST_REGISTER_READ_PORTS :: 1 +D3D12_GS_INPUT_REGISTER_COMPONENTS :: 4 +D3D12_GS_INPUT_REGISTER_COMPONENT_BIT_COUNT :: 32 +D3D12_GS_INPUT_REGISTER_COUNT :: 32 +D3D12_GS_INPUT_REGISTER_READS_PER_INST :: 2 +D3D12_GS_INPUT_REGISTER_READ_PORTS :: 1 +D3D12_GS_INPUT_REGISTER_VERTICES :: 32 +D3D12_GS_MAX_INSTANCE_COUNT :: 32 +D3D12_GS_MAX_OUTPUT_VERTEX_COUNT_ACROSS_INSTANCES :: 1024 +D3D12_GS_OUTPUT_ELEMENTS :: 32 +D3D12_GS_OUTPUT_REGISTER_COMPONENTS :: 4 +D3D12_GS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT :: 32 +D3D12_GS_OUTPUT_REGISTER_COUNT :: 32 + +D3D12_HS_CONTROL_POINT_PHASE_INPUT_REGISTER_COUNT :: 32 +D3D12_HS_CONTROL_POINT_PHASE_OUTPUT_REGISTER_COUNT :: 32 +D3D12_HS_CONTROL_POINT_REGISTER_COMPONENTS :: 4 +D3D12_HS_CONTROL_POINT_REGISTER_COMPONENT_BIT_COUNT :: 32 +D3D12_HS_CONTROL_POINT_REGISTER_READS_PER_INST :: 2 +D3D12_HS_CONTROL_POINT_REGISTER_READ_PORTS :: 1 +D3D12_HS_FORK_PHASE_INSTANCE_COUNT_UPPER_BOUND :: 0xffffffff +D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COMPONENTS :: 1 +D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT :: 32 +D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COUNT :: 1 +D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_READS_PER_INST :: 2 +D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_READ_PORTS :: 1 +D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COMPONENTS :: 1 +D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT :: 32 +D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COUNT :: 1 +D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_READS_PER_INST :: 2 +D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_READ_PORTS :: 1 +D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENTS :: 1 +D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENT_BIT_COUNT :: 32 +D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_COUNT :: 1 +D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_READS_PER_INST :: 2 +D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_READ_PORTS :: 1 +D3D12_HS_JOIN_PHASE_INSTANCE_COUNT_UPPER_BOUND :: 0xffffffff +D3D12_HS_MAXTESSFACTOR_LOWER_BOUND :: 1.0 +D3D12_HS_MAXTESSFACTOR_UPPER_BOUND :: 64.0 +D3D12_HS_OUTPUT_CONTROL_POINTS_MAX_TOTAL_SCALARS :: 3968 +D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COMPONENTS :: 1 +D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COMPONENT_BIT_COUNT :: 32 +D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COUNT :: 1 +D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_READS_PER_INST :: 2 +D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_READ_PORTS :: 1 +D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COMPONENTS :: 4 +D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COMPONENT_BIT_COUNT :: 32 +D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COUNT :: 32 +D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_READS_PER_INST :: 2 +D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_READ_PORTS :: 1 +D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_SCALAR_COMPONENTS :: 128 + +D3D12_IA_DEFAULT_INDEX_BUFFER_OFFSET_IN_BYTES :: 0 +D3D12_IA_DEFAULT_PRIMITIVE_TOPOLOGY :: 0 +D3D12_IA_DEFAULT_VERTEX_BUFFER_OFFSET_IN_BYTES :: 0 +D3D12_IA_INDEX_INPUT_RESOURCE_SLOT_COUNT :: 1 +D3D12_IA_INSTANCE_ID_BIT_COUNT :: 32 +D3D12_IA_INTEGER_ARITHMETIC_BIT_COUNT :: 32 +D3D12_IA_PATCH_MAX_CONTROL_POINT_COUNT :: 32 +D3D12_IA_PRIMITIVE_ID_BIT_COUNT :: 32 +D3D12_IA_VERTEX_ID_BIT_COUNT :: 32 +D3D12_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT :: 32 +D3D12_IA_VERTEX_INPUT_STRUCTURE_ELEMENTS_COMPONENTS :: 128 +D3D12_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT :: 32 + +D3D12_INTEGER_DIVIDE_BY_ZERO_QUOTIENT :: 0xffffffff +D3D12_INTEGER_DIVIDE_BY_ZERO_REMAINDER :: 0xffffffff + +D3D12_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL :: 0xffffffff +D3D12_KEEP_UNORDERED_ACCESS_VIEWS :: 0xffffffff + +D3D12_LINEAR_GAMMA :: 1.0 +D3D12_MAJOR_VERSION :: 12 + +D3D12_MAX_BORDER_COLOR_COMPONENT :: 1.0 +D3D12_MAX_DEPTH :: 1.0 +D3D12_MAX_LIVE_STATIC_SAMPLERS :: 2032 +D3D12_MAX_MAXANISOTROPY :: 16 +D3D12_MAX_MULTISAMPLE_SAMPLE_COUNT :: 32 +D3D12_MAX_POSITION_VALUE :: 3.402823466e+34D3D12_MAX_ROOT_COST :: 64 +D3D12_MAX_SHADER_VISIBLE_DESCRIPTOR_HEAP_SIZE_TIER_1 :: 1000000 +D3D12_MAX_SHADER_VISIBLE_DESCRIPTOR_HEAP_SIZE_TIER_2 :: 1000000 +D3D12_MAX_SHADER_VISIBLE_SAMPLER_HEAP_SIZE :: 2048 +D3D12_MAX_TEXTURE_DIMENSION_2_TO_EXP :: 17 +D3D12_MAX_VIEW_INSTANCE_COUNT :: 4 + +D3D12_MINOR_VERSION :: 0 + +D3D12_MIN_BORDER_COLOR_COMPONENT :: 0.0 +D3D12_MIN_DEPTH :: 0.0 +D3D12_MIN_MAXANISOTROPY :: 0 + +D3D12_MIP_LOD_BIAS_MAX :: 15.99 +D3D12_MIP_LOD_BIAS_MIN :: -16.0 +D3D12_MIP_LOD_FRACTIONAL_BIT_COUNT :: 8 +D3D12_MIP_LOD_RANGE_BIT_COUNT :: 8 + +D3D12_MULTISAMPLE_ANTIALIAS_LINE_WIDTH :: 1.4 +D3D12_NONSAMPLE_FETCH_OUT_OF_RANGE_ACCESS_RESULT :: 0 + +D3D12_OS_RESERVED_REGISTER_SPACE_VALUES_END :: 0xffffffff +D3D12_OS_RESERVED_REGISTER_SPACE_VALUES_START :: 0xfffffff8 + +D3D12_PACKED_TILE :: 0xffffffff + +D3D12_PIXEL_ADDRESS_RANGE_BIT_COUNT :: 15 + +D3D12_PRE_SCISSOR_PIXEL_ADDRESS_RANGE_BIT_COUNT :: 16 + +D3D12_PS_CS_UAV_REGISTER_COMPONENTS :: 1 +D3D12_PS_CS_UAV_REGISTER_COUNT :: 8 +D3D12_PS_CS_UAV_REGISTER_READS_PER_INST :: 1 +D3D12_PS_CS_UAV_REGISTER_READ_PORTS :: 1 +D3D12_PS_FRONTFACING_DEFAULT_VALUE :: 0xffffffff +D3D12_PS_FRONTFACING_FALSE_VALUE :: 0 +D3D12_PS_FRONTFACING_TRUE_VALUE :: 0xffffffff +D3D12_PS_INPUT_REGISTER_COMPONENTS :: 4 +D3D12_PS_INPUT_REGISTER_COMPONENT_BIT_COUNT :: 32 +D3D12_PS_INPUT_REGISTER_COUNT :: 32 +D3D12_PS_INPUT_REGISTER_READS_PER_INST :: 2 +D3D12_PS_INPUT_REGISTER_READ_PORTS :: 1 +D3D12_PS_LEGACY_PIXEL_CENTER_FRACTIONAL_COMPONENT :: 0.0 +D3D12_PS_OUTPUT_DEPTH_REGISTER_COMPONENTS :: 1 +D3D12_PS_OUTPUT_DEPTH_REGISTER_COMPONENT_BIT_COUNT :: 32 +D3D12_PS_OUTPUT_DEPTH_REGISTER_COUNT :: 1 +D3D12_PS_OUTPUT_MASK_REGISTER_COMPONENTS :: 1 +D3D12_PS_OUTPUT_MASK_REGISTER_COMPONENT_BIT_COUNT :: 32 +D3D12_PS_OUTPUT_MASK_REGISTER_COUNT :: 1 +D3D12_PS_OUTPUT_REGISTER_COMPONENTS :: 4 +D3D12_PS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT :: 32 +D3D12_PS_OUTPUT_REGISTER_COUNT :: 8 +D3D12_PS_PIXEL_CENTER_FRACTIONAL_COMPONENT :: 0.5 + +D3D12_RAW_UAV_SRV_BYTE_ALIGNMENT :: 16 + +D3D12_RAYTRACING_AABB_BYTE_ALIGNMENT :: 8 +D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BYTE_ALIGNMENT :: 256 +D3D12_RAYTRACING_INSTANCE_DESCS_BYTE_ALIGNMENT :: 16 +D3D12_RAYTRACING_MAX_ATTRIBUTE_SIZE_IN_BYTES :: 32 +D3D12_RAYTRACING_MAX_DECLARABLE_TRACE_RECURSION_DEPTH :: 31 +D3D12_RAYTRACING_MAX_GEOMETRIES_PER_BOTTOM_LEVEL_ACCELERATION_STRUCTURE :: 16777216 +D3D12_RAYTRACING_MAX_INSTANCES_PER_TOP_LEVEL_ACCELERATION_STRUCTURE :: 16777216 +D3D12_RAYTRACING_MAX_PRIMITIVES_PER_BOTTOM_LEVEL_ACCELERATION_STRUCTURE :: 536870912 +D3D12_RAYTRACING_MAX_RAY_GENERATION_SHADER_THREADS :: 1073741824 +D3D12_RAYTRACING_MAX_SHADER_RECORD_STRIDE :: 4096 +D3D12_RAYTRACING_SHADER_RECORD_BYTE_ALIGNMENT :: 32 +D3D12_RAYTRACING_SHADER_TABLE_BYTE_ALIGNMENT :: 64 +D3D12_RAYTRACING_TRANSFORM3X4_BYTE_ALIGNMENT :: 16 + +D3D12_REQ_BLEND_OBJECT_COUNT_PER_DEVICE :: 4096 +D3D12_REQ_BUFFER_RESOURCE_TEXEL_COUNT_2_TO_EXP :: 27 +D3D12_REQ_CONSTANT_BUFFER_ELEMENT_COUNT :: 4096 +D3D12_REQ_DEPTH_STENCIL_OBJECT_COUNT_PER_DEVICE :: 4096 +D3D12_REQ_DRAWINDEXED_INDEX_COUNT_2_TO_EXP :: 32 +D3D12_REQ_DRAW_VERTEX_COUNT_2_TO_EXP :: 32 +D3D12_REQ_FILTERING_HW_ADDRESSABLE_RESOURCE_DIMENSION :: 16384 +D3D12_REQ_GS_INVOCATION_32BIT_OUTPUT_COMPONENT_LIMIT :: 1024 +D3D12_REQ_IMMEDIATE_CONSTANT_BUFFER_ELEMENT_COUNT :: 4096 +D3D12_REQ_MAXANISOTROPY :: 16 +D3D12_REQ_MIP_LEVELS :: 15 +D3D12_REQ_MULTI_ELEMENT_STRUCTURE_SIZE_IN_BYTES :: 2048 +D3D12_REQ_RASTERIZER_OBJECT_COUNT_PER_DEVICE :: 4096 +D3D12_REQ_RENDER_TO_BUFFER_WINDOW_WIDTH :: 16384 +D3D12_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_A_TERM :: 128 +D3D12_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_B_TERM :: 0.25 +D3D12_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_C_TERM :: 2048 +D3D12_REQ_RESOURCE_VIEW_COUNT_PER_DEVICE_2_TO_EXP :: 20 +D3D12_REQ_SAMPLER_OBJECT_COUNT_PER_DEVICE :: 4096 +D3D12_REQ_SUBRESOURCES :: 30720 +D3D12_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION :: 2048 +D3D12_REQ_TEXTURE1D_U_DIMENSION :: 16384 +D3D12_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION :: 2048 +D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION :: 16384 +D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION :: 2048 +D3D12_REQ_TEXTURECUBE_DIMENSION :: 16384 + +D3D12_RESINFO_INSTRUCTION_MISSING_COMPONENT_RETVAL :: 0 + +D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES :: 0xffffffff + +D3D12_RS_SET_SHADING_RATE_COMBINER_COUNT :: 2 + +D3D12_SHADER_IDENTIFIER_SIZE_IN_BYTES :: 32 +D3D12_SHADER_MAJOR_VERSION :: 5 +D3D12_SHADER_MAX_INSTANCES :: 65535 +D3D12_SHADER_MAX_INTERFACES :: 253 +D3D12_SHADER_MAX_INTERFACE_CALL_SITES :: 4096 +D3D12_SHADER_MAX_TYPES :: 65535 +D3D12_SHADER_MINOR_VERSION :: 1 + +D3D12_SHIFT_INSTRUCTION_PAD_VALUE :: 0 +D3D12_SHIFT_INSTRUCTION_SHIFT_VALUE_BIT_COUNT :: 5 + +D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT :: 8 + +D3D12_SMALL_MSAA_RESOURCE_PLACEMENT_ALIGNMENT :: 65536 +D3D12_SMALL_RESOURCE_PLACEMENT_ALIGNMENT :: 4096 + +D3D12_SO_BUFFER_MAX_STRIDE_IN_BYTES :: 2048 +D3D12_SO_BUFFER_MAX_WRITE_WINDOW_IN_BYTES :: 512 +D3D12_SO_BUFFER_SLOT_COUNT :: 4 +D3D12_SO_DDI_REGISTER_INDEX_DENOTING_GAP :: 0xffffffff +D3D12_SO_NO_RASTERIZED_STREAM :: 0xffffffff +D3D12_SO_OUTPUT_COMPONENT_COUNT :: 128 +D3D12_SO_STREAM_COUNT :: 4 + +D3D12_SPEC_DATE_DAY :: 14 +D3D12_SPEC_DATE_MONTH :: 11 +D3D12_SPEC_DATE_YEAR :: 2014 +D3D12_SPEC_VERSION :: 1.16 + +D3D12_SRGB_GAMMA :: 2.2 +D3D12_SRGB_TO_FLOAT_DENOMINATOR_1 :: 12.92 +D3D12_SRGB_TO_FLOAT_DENOMINATOR_2 :: 1.055 +D3D12_SRGB_TO_FLOAT_EXPONENT :: 2.4 +D3D12_SRGB_TO_FLOAT_OFFSET :: 0.055 +D3D12_SRGB_TO_FLOAT_THRESHOLD :: 0.04045 +D3D12_SRGB_TO_FLOAT_TOLERANCE_IN_ULP :: 0.5 + +D3D12_STANDARD_COMPONENT_BIT_COUNT :: 32 +D3D12_STANDARD_COMPONENT_BIT_COUNT_DOUBLED :: 64 +D3D12_STANDARD_MAXIMUM_ELEMENT_ALIGNMENT_BYTE_MULTIPLE :: 4 +D3D12_STANDARD_PIXEL_COMPONENT_COUNT :: 128 +D3D12_STANDARD_PIXEL_ELEMENT_COUNT :: 32 +D3D12_STANDARD_VECTOR_SIZE :: 4 +D3D12_STANDARD_VERTEX_ELEMENT_COUNT :: 32 +D3D12_STANDARD_VERTEX_TOTAL_COMPONENT_COUNT :: 64 + +D3D12_SUBPIXEL_FRACTIONAL_BIT_COUNT :: 8 +D3D12_SUBTEXEL_FRACTIONAL_BIT_COUNT :: 8 + +D3D12_SYSTEM_RESERVED_REGISTER_SPACE_VALUES_END :: 0xffffffff +D3D12_SYSTEM_RESERVED_REGISTER_SPACE_VALUES_START :: 0xfffffff0 + +D3D12_TESSELLATOR_MAX_EVEN_TESSELLATION_FACTOR :: 64 +D3D12_TESSELLATOR_MAX_ISOLINE_DENSITY_TESSELLATION_FACTOR :: 64 +D3D12_TESSELLATOR_MAX_ODD_TESSELLATION_FACTOR :: 63 +D3D12_TESSELLATOR_MAX_TESSELLATION_FACTOR :: 64 +D3D12_TESSELLATOR_MIN_EVEN_TESSELLATION_FACTOR :: 2 +D3D12_TESSELLATOR_MIN_ISOLINE_DENSITY_TESSELLATION_FACTOR :: 1 +D3D12_TESSELLATOR_MIN_ODD_TESSELLATION_FACTOR :: 1 + +D3D12_TEXEL_ADDRESS_RANGE_BIT_COUNT :: 16 + +D3D12_TEXTURE_DATA_PITCH_ALIGNMENT :: 256 +D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT :: 512 + +D3D12_TILED_RESOURCE_TILE_SIZE_IN_BYTES :: 65536 + +D3D12_TRACKED_WORKLOAD_MAX_INSTANCES :: 32 + +D3D12_UAV_COUNTER_PLACEMENT_ALIGNMENT :: 4096 +D3D12_UAV_SLOT_COUNT :: 64 + +D3D12_UNBOUND_MEMORY_ACCESS_RESULT :: 0 + +D3D12_VIDEO_DECODE_MAX_ARGUMENTS :: 10 +D3D12_VIDEO_DECODE_MAX_HISTOGRAM_COMPONENTS :: 4 +D3D12_VIDEO_DECODE_MIN_BITSTREAM_OFFSET_ALIGNMENT :: 256 +D3D12_VIDEO_DECODE_MIN_HISTOGRAM_OFFSET_ALIGNMENT :: 256 +D3D12_VIDEO_DECODE_STATUS_MACROBLOCKS_AFFECTED_UNKNOWN :: 0xffffffff +D3D12_VIDEO_PROCESS_MAX_FILTERS :: 32 +D3D12_VIDEO_PROCESS_STEREO_VIEWS :: 2 + +D3D12_VIEWPORT_AND_SCISSORRECT_MAX_INDEX :: 15 +D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE :: 16 +D3D12_VIEWPORT_BOUNDS_MAX :: 32767 +D3D12_VIEWPORT_BOUNDS_MIN :: -32768 + +D3D12_VS_INPUT_REGISTER_COMPONENTS :: 4 +D3D12_VS_INPUT_REGISTER_COMPONENT_BIT_COUNT :: 32 +D3D12_VS_INPUT_REGISTER_COUNT :: 32 +D3D12_VS_INPUT_REGISTER_READS_PER_INST :: 2 +D3D12_VS_INPUT_REGISTER_READ_PORTS :: 1 +D3D12_VS_OUTPUT_REGISTER_COMPONENTS :: 4 +D3D12_VS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT :: 32 +D3D12_VS_OUTPUT_REGISTER_COUNT :: 32 + +D3D12_WHQL_CONTEXT_COUNT_FOR_RESOURCE_LIMIT :: 10 +D3D12_WHQL_DRAWINDEXED_INDEX_COUNT_2_TO_EXP :: 25 +D3D12_WHQL_DRAW_VERTEX_COUNT_2_TO_EXP :: 25 + +D3D12_SHADER_COMPONENT_MAPPING_MASK :: 0x7 +D3D12_SHADER_COMPONENT_MAPPING_SHIFT :: 3 + +D3D12_FILTER_REDUCTION_TYPE_MASK :: 0x3 +D3D12_FILTER_REDUCTION_TYPE_SHIFT :: 7 +D3D12_FILTER_TYPE_MASK :: 0x3 + +D3D12_MIN_FILTER_SHIFT :: 4 +D3D12_MAG_FILTER_SHIFT :: 2 +D3D12_MIP_FILTER_SHIFT :: 0 + +D3D12_ANISOTROPIC_FILTERING_BIT :: 0x40 + +D3D12_INFO_QUEUE_DEFAULT_MESSAGE_COUNT_LIMIT :: 1024 + +D3D12_SHADING_RATE_X_AXIS_SHIFT :: 2 +D3D12_SHADING_RATE_VALID_MASK :: 3 + +D3D_RETURN_PARAMETER_INDEX :: -1 + +D3D_SHADER_REQUIRES_DOUBLES :: 0x00000001 +D3D_SHADER_REQUIRES_EARLY_DEPTH_STENCIL :: 0x00000002 +D3D_SHADER_REQUIRES_UAVS_AT_EVERY_STAGE :: 0x00000004 +D3D_SHADER_REQUIRES_64_UAVS :: 0x00000008 +D3D_SHADER_REQUIRES_MINIMUM_PRECISION :: 0x00000010 +D3D_SHADER_REQUIRES_11_1_DOUBLE_EXTENSIONS :: 0x00000020 +D3D_SHADER_REQUIRES_11_1_SHADER_EXTENSIONS :: 0x00000040 +D3D_SHADER_REQUIRES_LEVEL_9_COMPARISON_FILTERING :: 0x00000080 +D3D_SHADER_REQUIRES_TILED_RESOURCES :: 0x00000100 +D3D_SHADER_REQUIRES_STENCIL_REF :: 0x00000200 +D3D_SHADER_REQUIRES_INNER_COVERAGE :: 0x00000400 +D3D_SHADER_REQUIRES_TYPED_UAV_LOAD_ADDITIONAL_FORMATS :: 0x00000800 +D3D_SHADER_REQUIRES_ROVS :: 0x00001000 +D3D_SHADER_REQUIRES_VIEWPORT_AND_RT_ARRAY_INDEX_FROM_ANY_SHADER_FEEDING_RASTERIZER :: 0x00002000 diff --git a/vendor/directx/d3d_compiler/d3d_compiler.odin b/vendor/directx/d3d_compiler/d3d_compiler.odin new file mode 100644 index 000000000..9157e3585 --- /dev/null +++ b/vendor/directx/d3d_compiler/d3d_compiler.odin @@ -0,0 +1,224 @@ +package directx_d3d_compiler + +foreign import d3dcompiler "d3dcompiler_47.lib" + +D3DCOMPILER_DLL_A :: "d3dcompiler_47.dll" +COMPILER_VERSION :: 47 + + +import "../dxgi" + +BOOL :: dxgi.BOOL +IID :: dxgi.IID +SIZE_T :: dxgi.SIZE_T +HRESULT :: dxgi.HRESULT +IUnknown :: dxgi.IUnknown +IUnknown_VTable :: dxgi.IUnknown_VTable + +@(default_calling_convention="stdcall", link_prefix="D3D") +foreign d3dcompiler { + ReadFileToBlob :: proc(pFileName: [^]u16, ppContents: ^^ID3DBlob) -> HRESULT --- + WriteBlobToFile :: proc(pBlob: ^ID3DBlob, pFileName: [^]u16, bOverwrite: BOOL) -> HRESULT --- + Compile :: proc(pSrcData: rawptr, SrcDataSize: SIZE_T, pSourceName: cstring, pDefines: ^SHADER_MACRO, pInclude: ^ID3DInclude, pEntrypoint: cstring, pTarget: cstring, Flags1: u32, Flags2: u32, ppCode: ^^ID3DBlob, ppErrorMsgs: ^^ID3DBlob) -> HRESULT --- + Compile2 :: proc(pSrcData: rawptr, SrcDataSize: SIZE_T, pSourceName: cstring, pDefines: ^SHADER_MACRO, pInclude: ^ID3DInclude, pEntrypoint: cstring, pTarget: cstring, Flags1: u32, Flags2: u32, SecondaryDataFlags: u32, pSecondaryData: rawptr, SecondaryDataSize: SIZE_T, ppCode: ^^ID3DBlob, ppErrorMsgs: ^^ID3DBlob) -> HRESULT --- + CompileFromFile :: proc(pFileName: [^]u16, pDefines: ^SHADER_MACRO, pInclude: ^ID3DInclude, pEntrypoint: cstring, pTarget: cstring, Flags1: u32, Flags2: u32, ppCode: ^^ID3DBlob, ppErrorMsgs: ^^ID3DBlob) -> HRESULT --- + Preprocess :: proc(pSrcData: rawptr, SrcDataSize: SIZE_T, pSourceName: cstring, pDefines: ^SHADER_MACRO, pInclude: ^ID3DInclude, ppCodeText: ^^ID3DBlob, ppErrorMsgs: ^^ID3DBlob) -> HRESULT --- + GetDebugInfo :: proc(pSrcData: rawptr, SrcDataSize: SIZE_T, ppDebugInfo: ^^ID3DBlob) -> HRESULT --- + Reflect :: proc(pSrcData: rawptr, SrcDataSize: SIZE_T, pInterface: ^IID, ppReflector: ^rawptr) -> HRESULT --- + ReflectLibrary :: proc(pSrcData: rawptr, SrcDataSize: SIZE_T, riid: ^IID, ppReflector: ^rawptr) -> HRESULT --- + Disassemble :: proc(pSrcData: rawptr, SrcDataSize: SIZE_T, Flags: u32, szComments: cstring, ppDisassembly: ^^ID3DBlob) -> HRESULT --- + DisassembleRegion :: proc(pSrcData: rawptr, SrcDataSize: SIZE_T, Flags: u32, szComments: cstring, StartByteOffset: SIZE_T, NumInsts: SIZE_T, pFinishByteOffset: ^SIZE_T, ppDisassembly: ^^ID3DBlob) -> HRESULT --- + CreateLinker :: proc(ppLinker: ^^ID3D11Linker) -> HRESULT --- + LoadModule :: proc(pSrcData: rawptr, cbSrcDataSize: SIZE_T, ppModule: ^^ID3D11Module) -> HRESULT --- + GetTraceInstructionOffsets :: proc(pSrcData: rawptr, SrcDataSize: SIZE_T, Flags: u32, StartInstIndex: SIZE_T, NumInsts: SIZE_T, pOffsets: ^SIZE_T, pTotalInsts: ^SIZE_T) -> HRESULT --- + GetInputSignatureBlob :: proc(pSrcData: rawptr, SrcDataSize: SIZE_T, ppSignatureBlob: ^^ID3DBlob) -> HRESULT --- + GetOutputSignatureBlob :: proc(pSrcData: rawptr, SrcDataSize: SIZE_T, ppSignatureBlob: ^^ID3DBlob) -> HRESULT --- + GetInputAndOutputSignatureBlob :: proc(pSrcData: rawptr, SrcDataSize: SIZE_T, ppSignatureBlob: ^^ID3DBlob) -> HRESULT --- + StripShader :: proc(pShaderBytecode: rawptr, BytecodeLength: SIZE_T, uStripFlags: u32, ppStrippedBlob: ^^ID3DBlob) -> HRESULT --- + GetBlobPart :: proc(pSrcData: rawptr, SrcDataSize: SIZE_T, Part: BLOB_PART, Flags: u32, ppPart: ^^ID3DBlob) -> HRESULT --- + SetBlobPart :: proc(pSrcData: rawptr, SrcDataSize: SIZE_T, Part: BLOB_PART, Flags: u32, pPart: rawptr, PartSize: SIZE_T, ppNewShader: ^^ID3DBlob) -> HRESULT --- + CreateBlob :: proc(Size: SIZE_T, ppBlob: ^^ID3DBlob) -> HRESULT --- + CompressShaders :: proc(uNumShaders: u32, pShaderData: ^SHADER_DATA, uFlags: u32, ppCompressedData: ^^ID3DBlob) -> HRESULT --- + DecompressShaders :: proc(pSrcData: rawptr, SrcDataSize: SIZE_T, uNumShaders: u32, uStartIndex: u32, pIndices: ^u32, uFlags: u32, ppShaders: ^^ID3DBlob, pTotalShaders: ^u32) -> HRESULT --- + Disassemble10Effect :: proc(pEffect: ^ID3D10Effect, Flags: u32, ppDisassembly: ^^ID3DBlob) -> HRESULT --- +} + + + +D3DCOMPILE :: enum u32 { // TODO: make bit_field + DEBUG = 1 << 0, + SKIP_VALIDATION = 1 << 1, + SKIP_OPTIMIZATION = 1 << 2, + PACK_MATRIX_ROW_MAJOR = 1 << 3, + PACK_MATRIX_COLUMN_MAJOR = 1 << 4, + PARTIAL_PRECISION = 1 << 5, + FORCE_VS_SOFTWARE_NO_OPT = 1 << 6, + FORCE_PS_SOFTWARE_NO_OPT = 1 << 7, + NO_PRESHADER = 1 << 8, + AVOID_FLOW_CONTROL = 1 << 9, + PREFER_FLOW_CONTROL = 1 << 10, + ENABLE_STRICTNESS = 1 << 11, + ENABLE_BACKWARDS_COMPATIBILITY = 1 << 12, + IEEE_STRICTNESS = 1 << 13, + OPTIMIZATION_LEVEL0 = 1 << 14, + OPTIMIZATION_LEVEL1 = 0, + OPTIMIZATION_LEVEL2 = (1 << 14)|(1 << 15), // Added manually + OPTIMIZATION_LEVEL3 = 1 << 15, + RESERVED16 = 1 << 16, + RESERVED17 = 1 << 17, + WARNINGS_ARE_ERRORS = 1 << 18, + RESOURCES_MAY_ALIAS = 1 << 19, + ENABLE_UNBOUNDED_DESCRIPTOR_TABLES = 1 << 20, + ALL_RESOURCES_BOUND = 1 << 21, + DEBUG_NAME_FOR_SOURCE = 1 << 22, + DEBUG_NAME_FOR_BINARY = 1 << 23, +} + +EFFECT :: enum u32 { // TODO: make bit_field + CHILD_EFFECT = 1 << 0, + ALLOW_SLOW_OPS = 1 << 1, +} + +FLAGS2 :: enum u32 { // TODO: make bit_field + FORCE_ROOT_SIGNATURE_LATEST = 0, + FORCE_ROOT_SIGNATURE_1_0 = 1 << 4, + FORCE_ROOT_SIGNATURE_1_1 = 1 << 5, +} + +SECDATA :: enum u32 { // TODO: make bit_field + MERGE_UAV_SLOTS = 0x00000001, + PRESERVE_TEMPLATE_SLOTS = 0x00000002, + REQUIRE_TEMPLATE_MATCH = 0x00000004, +} + +DISASM_ENABLE_COLOR_CODE :: 0x00000001 +DISASM_ENABLE_DEFAULT_VALUE_PRINTS :: 0x00000002 +DISASM_ENABLE_INSTRUCTION_NUMBERING :: 0x00000004 +DISASM_ENABLE_INSTRUCTION_CYCLE :: 0x00000008 +DISASM_DISABLE_DEBUG_INFO :: 0x00000010 +DISASM_ENABLE_INSTRUCTION_OFFSET :: 0x00000020 +DISASM_INSTRUCTION_ONLY :: 0x00000040 +DISASM_PRINT_HEX_LITERALS :: 0x00000080 + +GET_INST_OFFSETS_INCLUDE_NON_EXECUTABLE :: 0x00000001 + +COMPRESS_SHADER_KEEP_ALL_PARTS :: 0x00000001 + +SHADER_MACRO :: struct { + Name: cstring, + Definition: cstring, +} + +ID3D10Blob :: struct { + #subtype iunknown: IUnknown, + using id3d10blob_vtable: ^ID3D10Blob_VTable, +} +ID3D10Blob_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + GetBufferPointer: proc "stdcall" (this: ^ID3D10Blob), + GetBufferSize: proc "stdcall" (this: ^ID3D10Blob) -> SIZE_T, +} + + +ID3DBlob :: ID3D10Blob + +INCLUDE_TYPE :: enum i32 { + INCLUDE_LOCAL = 0, + INCLUDE_SYSTEM = 1, + _10_INCLUDE_LOCAL = 0, + _10_INCLUDE_SYSTEM = 1, + INCLUDE_FORCE_DWORD = 2147483647, +} + +ID3DInclude :: struct { + vtable: ^ID3DInclude_VTable, +} +ID3DInclude_VTable :: struct { + Open: proc "stdcall" (this: ^ID3DInclude, IncludeType: INCLUDE_TYPE, pFileName: cstring, pParentData: rawptr, ppData: ^rawptr, pBytes: ^u32) -> HRESULT, + Close: proc "stdcall" (this: ^ID3DInclude, pData: rawptr) -> HRESULT, +} + + +ID3D11Module :: struct { + #subtype iunknown: IUnknown, + using id3d11module_vtable: ^ID3D11Module_VTable, +} +ID3D11Module_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + CreateInstance: proc "stdcall" (this: ^ID3D11Module, pNamespace: cstring, ppModuleInstance: ^^ID3D11ModuleInstance) -> HRESULT, +} + + +ID3D11ModuleInstance :: struct { + #subtype iunknown: IUnknown, + using id3d11moduleinstance_vtable: ^ID3D11ModuleInstance_VTable, +} +ID3D11ModuleInstance_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + BindConstantBuffer: proc "stdcall" (this: ^ID3D11ModuleInstance, uSrcSlot: u32, uDstSlot: u32, cbDstOffset: u32) -> HRESULT, + BindConstantBufferByName: proc "stdcall" (this: ^ID3D11ModuleInstance, pName: cstring, uDstSlot: u32, cbDstOffset: u32) -> HRESULT, + BindResource: proc "stdcall" (this: ^ID3D11ModuleInstance, uSrcSlot: u32, uDstSlot: u32, uCount: u32) -> HRESULT, + BindResourceByName: proc "stdcall" (this: ^ID3D11ModuleInstance, pName: cstring, uDstSlot: u32, uCount: u32) -> HRESULT, + BindSampler: proc "stdcall" (this: ^ID3D11ModuleInstance, uSrcSlot: u32, uDstSlot: u32, uCount: u32) -> HRESULT, + BindSamplerByName: proc "stdcall" (this: ^ID3D11ModuleInstance, pName: cstring, uDstSlot: u32, uCount: u32) -> HRESULT, + BindUnorderedAccessView: proc "stdcall" (this: ^ID3D11ModuleInstance, uSrcSlot: u32, uDstSlot: u32, uCount: u32) -> HRESULT, + BindUnorderedAccessViewByName: proc "stdcall" (this: ^ID3D11ModuleInstance, pName: cstring, uDstSlot: u32, uCount: u32) -> HRESULT, + BindResourceAsUnorderedAccessView: proc "stdcall" (this: ^ID3D11ModuleInstance, uSrcSrvSlot: u32, uDstUavSlot: u32, uCount: u32) -> HRESULT, + BindResourceAsUnorderedAccessViewByName: proc "stdcall" (this: ^ID3D11ModuleInstance, pSrvName: cstring, uDstUavSlot: u32, uCount: u32) -> HRESULT, +} + + +ID3D11Linker :: struct { + #subtype iunknown: IUnknown, + using id3d11linker_vtable: ^ID3D11Linker_VTable, +} +ID3D11Linker_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + Link: proc "stdcall" (this: ^ID3D11Linker, pEntry: ^ID3D11ModuleInstance, pEntryName: cstring, pTargetName: cstring, uFlags: u32, ppShaderBlob: ^^ID3DBlob, ppErrorBuffer: ^^ID3DBlob) -> HRESULT, + UseLibrary: proc "stdcall" (this: ^ID3D11Linker, pLibraryMI: ^ID3D11ModuleInstance) -> HRESULT, + AddClipPlaneFromCBuffer: proc "stdcall" (this: ^ID3D11Linker, uCBufferSlot: u32, uCBufferEntry: u32) -> HRESULT, +} + + +pD3DCompile :: #type proc "c" (a0: rawptr, a1: SIZE_T, a2: cstring, a3: ^SHADER_MACRO, a4: ^ID3DInclude, a5: cstring, a6: cstring, a7: u32, a8: u32, a9: ^^ID3DBlob, a10: ^^ID3DBlob) -> HRESULT +pD3DPreprocess :: #type proc "c" (a0: rawptr, a1: SIZE_T, a2: cstring, a3: ^SHADER_MACRO, a4: ^ID3DInclude, a5: ^^ID3DBlob, a6: ^^ID3DBlob) -> HRESULT +pD3DDisassemble :: #type proc "c" (a0: rawptr, a1: SIZE_T, a2: u32, a3: cstring, a4: ^^ID3DBlob) -> HRESULT + +D3DCOMPILER_STRIP_FLAGS :: enum u32 { // TODO: make bit_field + REFLECTION_DATA = 0x1, + DEBUG_INFO = 0x2, + TEST_BLOBS = 0x4, + PRIVATE_DATA = 0x8, + ROOT_SIGNATURE = 0x10, + FORCE_DWORD = 0x7fffffff, +} + +BLOB_PART :: enum i32 { + INPUT_SIGNATURE_BLOB = 0, + OUTPUT_SIGNATURE_BLOB = 1, + INPUT_AND_OUTPUT_SIGNATURE_BLOB = 2, + PATCH_CONSTANT_SIGNATURE_BLOB = 3, + ALL_SIGNATURE_BLOB = 4, + DEBUG_INFO = 5, + LEGACY_SHADER = 6, + XNA_PREPASS_SHADER = 7, + XNA_SHADER = 8, + PDB = 9, + PRIVATE_DATA = 10, + ROOT_SIGNATURE = 11, + DEBUG_NAME = 12, + + TEST_ALTERNATE_SHADER = 32768, + TEST_COMPILE_DETAILS = 32769, + TEST_COMPILE_PERF = 32770, + TEST_COMPILE_REPORT = 32771, +} + +SHADER_DATA :: struct { + pBytecode: rawptr, + BytecodeLength: SIZE_T, +} + +ID3D10Effect :: struct { + // ???? +} diff --git a/vendor/directx/d3d_compiler/d3dcompiler_47.dll b/vendor/directx/d3d_compiler/d3dcompiler_47.dll new file mode 100644 index 000000000..d30a17652 Binary files /dev/null and b/vendor/directx/d3d_compiler/d3dcompiler_47.dll differ diff --git a/vendor/directx/d3d_compiler/d3dcompiler_47.lib b/vendor/directx/d3d_compiler/d3dcompiler_47.lib new file mode 100644 index 000000000..022890ad9 Binary files /dev/null and b/vendor/directx/d3d_compiler/d3dcompiler_47.lib differ diff --git a/vendor/directx/dxgi/dxgi.odin b/vendor/directx/dxgi/dxgi.odin new file mode 100644 index 000000000..899dc102b --- /dev/null +++ b/vendor/directx/dxgi/dxgi.odin @@ -0,0 +1,1125 @@ +package directx_dxgi + +foreign import dxgi { + "system:dxgi.lib", + "system:user32.lib", + "system:gdi32.lib", +} + +import win32 "core:sys/windows" + +IID :: win32.LUID +LUID :: win32.LUID +UUID :: win32.GUID +GUID :: win32.GUID +HANDLE :: win32.HANDLE +HRESULT :: win32.HRESULT +HMONITOR :: win32.HMONITOR +HWND :: win32.HWND +HMODULE :: win32.HMODULE +HDC :: win32.HANDLE +BOOL :: win32.BOOL +LARGE_INTEGER :: win32.LARGE_INTEGER +SIZE_T :: win32.SIZE_T +ULONG :: win32.ULONG +LONG :: win32.LONG +RECT :: win32.RECT +POINT :: win32.POINT +SIZE :: win32.SIZE + +IUnknown :: struct { + using _iunknown_vtable: ^IUnknown_VTable, +} +IUnknown_VTable :: struct { + QueryInterface: proc "stdcall" (this: ^IUnknown, riid: ^IID, ppvObject: ^rawptr) -> HRESULT, + AddRef: proc "stdcall" (this: ^IUnknown) -> ULONG, + Release: proc "stdcall" (this: ^IUnknown) -> ULONG, +} + +@(default_calling_convention="stdcall") +foreign dxgi { + CreateDXGIFactory :: proc(riid: ^IID, ppFactory: rawptr) -> HRESULT --- + CreateDXGIFactory1 :: proc(riid: ^IID, ppFactory: rawptr) -> HRESULT --- + CreateDXGIFactory2 :: proc(Flags: u32, riid: ^IID, ppFactory: rawptr) -> HRESULT --- + DXGIGetDebugInterface1 :: proc(Flags: u32, riid: ^IID, pDebug: rawptr) -> HRESULT --- +} + +CreateDXGIFactoryEx :: proc "stdcall" (riid: IID, ppFactory: rawptr) -> HRESULT { + riid := riid + return CreateDXGIFactory(&riid, ppFactory) +} +CreateDXGIFactory1Ex :: proc "stdcall" (riid: IID, ppFactory: rawptr) -> HRESULT { + riid := riid + return CreateDXGIFactory1(&riid, ppFactory) +} +CreateDXGIFactory2Ex :: proc "stdcall" (Flags: u32, riid: IID, ppFactory: rawptr) -> HRESULT { + riid := riid + return CreateDXGIFactory2(Flags, &riid, ppFactory) +} +DXGIGetDebugInterface1Ex :: proc "stdcall" (Flags: u32, riid: IID, pDebug: rawptr) -> HRESULT { + riid := riid + return DXGIGetDebugInterface1(Flags, &riid, pDebug) +} + + + +STANDARD_MULTISAMPLE_QUALITY_PATTERN :: 0xffffffff +CENTER_MULTISAMPLE_QUALITY_PATTERN :: 0xfffffffe +FORMAT_DEFINED :: 1 +_FACDXGI :: 0x87a + +CPU_ACCESS :: enum u32 { + NONE = 0, + DYNAMIC = 1, + READ_WRITE = 2, + SCRATCH = 3, + FIELD = 15, +} + +USAGE :: enum u32 { // TODO: convert to bit_set + SHADER_INPUT = 0x00000010, + RENDER_TARGET_OUTPUT = 0x00000020, + BACK_BUFFER = 0x00000040, + SHARED = 0x00000080, + READ_ONLY = 0x00000100, + DISCARD_ON_PRESENT = 0x00000200, + UNORDERED_ACCESS = 0x00000400, +} + +RESOURCE_PRIORITY :: enum u32 { + MINIMUM = 0x28000000, + LOW = 0x50000000, + NORMAL = 0x78000000, + HIGH = 0xa0000000, + MAXIMUM = 0xc8000000, +} + +MAP :: enum u32 { // TODO: convert to bit_set + READ = 1, + WRITE = 2, + DISCARD = 4, +} + +ENUM_MODES :: enum u32 { // TODO: convert to bit_set + INTERLACED = 1, + SCALING = 2, + STEREO = 4, + DISABLED_STEREO = 8, +} + +MAX_SWAP_CHAIN_BUFFERS :: 16 +PRESENT :: enum u32 { // TODO: convert to bit_set + TEST = 0x00000001, + DO_NOT_SEQUENCE = 0x00000002, + RESTART = 0x00000004, + DO_NOT_WAIT = 0x00000008, + STEREO_PREFER_RIGHT = 0x00000010, + STEREO_TEMPORARY_MONO = 0x00000020, + RESTRICT_TO_OUTPUT = 0x00000040, + USE_DURATION = 0x00000100, + ALLOW_TEARING = 0x00000200, +} + +MWA :: enum u32 { // TODO: convert to bit_set + NO_WINDOW_CHANGES = 1 << 0, + NO_ALT_ENTER = 1 << 1, + NO_PRINT_SCREEN = 1 << 2, + VALID = 0x7, +} + +SHARED_RESOURCE_READ :: 0x80000000 +SHARED_RESOURCE_WRITE :: 1 +CREATE_FACTORY_DEBUG :: 0x1 + +RATIONAL :: struct { + Numerator: u32, + Denominator: u32, +} + +SAMPLE_DESC :: struct { + Count: u32, + Quality: u32, +} + +COLOR_SPACE_TYPE :: enum i32 { + RGB_FULL_G22_NONE_P709 = 0, + RGB_FULL_G10_NONE_P709 = 1, + RGB_STUDIO_G22_NONE_P709 = 2, + RGB_STUDIO_G22_NONE_P2020 = 3, + RESERVED = 4, + YCBCR_FULL_G22_NONE_P709_X601 = 5, + YCBCR_STUDIO_G22_LEFT_P601 = 6, + YCBCR_FULL_G22_LEFT_P601 = 7, + YCBCR_STUDIO_G22_LEFT_P709 = 8, + YCBCR_FULL_G22_LEFT_P709 = 9, + YCBCR_STUDIO_G22_LEFT_P2020 = 10, + YCBCR_FULL_G22_LEFT_P2020 = 11, + RGB_FULL_G2084_NONE_P2020 = 12, + YCBCR_STUDIO_G2084_LEFT_P2020 = 13, + RGB_STUDIO_G2084_NONE_P2020 = 14, + YCBCR_STUDIO_G22_TOPLEFT_P2020 = 15, + YCBCR_STUDIO_G2084_TOPLEFT_P2020 = 16, + RGB_FULL_G22_NONE_P2020 = 17, + YCBCR_STUDIO_GHLG_TOPLEFT_P2020 = 18, + YCBCR_FULL_GHLG_TOPLEFT_P2020 = 19, + RGB_STUDIO_G24_NONE_P709 = 20, + RGB_STUDIO_G24_NONE_P2020 = 21, + YCBCR_STUDIO_G24_LEFT_P709 = 22, + YCBCR_STUDIO_G24_LEFT_P2020 = 23, + YCBCR_STUDIO_G24_TOPLEFT_P2020 = 24, + CUSTOM = -1, +} + +FORMAT :: enum i32 { + UNKNOWN = 0, + R32G32B32A32_TYPELESS = 1, + R32G32B32A32_FLOAT = 2, + R32G32B32A32_UINT = 3, + R32G32B32A32_SINT = 4, + R32G32B32_TYPELESS = 5, + R32G32B32_FLOAT = 6, + R32G32B32_UINT = 7, + R32G32B32_SINT = 8, + R16G16B16A16_TYPELESS = 9, + R16G16B16A16_FLOAT = 10, + R16G16B16A16_UNORM = 11, + R16G16B16A16_UINT = 12, + R16G16B16A16_SNORM = 13, + R16G16B16A16_SINT = 14, + R32G32_TYPELESS = 15, + R32G32_FLOAT = 16, + R32G32_UINT = 17, + R32G32_SINT = 18, + R32G8X24_TYPELESS = 19, + D32_FLOAT_S8X24_UINT = 20, + R32_FLOAT_X8X24_TYPELESS = 21, + X32_TYPELESS_G8X24_UINT = 22, + R10G10B10A2_TYPELESS = 23, + R10G10B10A2_UNORM = 24, + R10G10B10A2_UINT = 25, + R11G11B10_FLOAT = 26, + R8G8B8A8_TYPELESS = 27, + R8G8B8A8_UNORM = 28, + R8G8B8A8_UNORM_SRGB = 29, + R8G8B8A8_UINT = 30, + R8G8B8A8_SNORM = 31, + R8G8B8A8_SINT = 32, + R16G16_TYPELESS = 33, + R16G16_FLOAT = 34, + R16G16_UNORM = 35, + R16G16_UINT = 36, + R16G16_SNORM = 37, + R16G16_SINT = 38, + R32_TYPELESS = 39, + D32_FLOAT = 40, + R32_FLOAT = 41, + R32_UINT = 42, + R32_SINT = 43, + R24G8_TYPELESS = 44, + D24_UNORM_S8_UINT = 45, + R24_UNORM_X8_TYPELESS = 46, + X24_TYPELESS_G8_UINT = 47, + R8G8_TYPELESS = 48, + R8G8_UNORM = 49, + R8G8_UINT = 50, + R8G8_SNORM = 51, + R8G8_SINT = 52, + R16_TYPELESS = 53, + R16_FLOAT = 54, + D16_UNORM = 55, + R16_UNORM = 56, + R16_UINT = 57, + R16_SNORM = 58, + R16_SINT = 59, + R8_TYPELESS = 60, + R8_UNORM = 61, + R8_UINT = 62, + R8_SNORM = 63, + R8_SINT = 64, + A8_UNORM = 65, + R1_UNORM = 66, + R9G9B9E5_SHAREDEXP = 67, + R8G8_B8G8_UNORM = 68, + G8R8_G8B8_UNORM = 69, + BC1_TYPELESS = 70, + BC1_UNORM = 71, + BC1_UNORM_SRGB = 72, + BC2_TYPELESS = 73, + BC2_UNORM = 74, + BC2_UNORM_SRGB = 75, + BC3_TYPELESS = 76, + BC3_UNORM = 77, + BC3_UNORM_SRGB = 78, + BC4_TYPELESS = 79, + BC4_UNORM = 80, + BC4_SNORM = 81, + BC5_TYPELESS = 82, + BC5_UNORM = 83, + BC5_SNORM = 84, + B5G6R5_UNORM = 85, + B5G5R5A1_UNORM = 86, + B8G8R8A8_UNORM = 87, + B8G8R8X8_UNORM = 88, + R10G10B10_XR_BIAS_A2_UNORM = 89, + B8G8R8A8_TYPELESS = 90, + B8G8R8A8_UNORM_SRGB = 91, + B8G8R8X8_TYPELESS = 92, + B8G8R8X8_UNORM_SRGB = 93, + BC6H_TYPELESS = 94, + BC6H_UF16 = 95, + BC6H_SF16 = 96, + BC7_TYPELESS = 97, + BC7_UNORM = 98, + BC7_UNORM_SRGB = 99, + AYUV = 100, + Y410 = 101, + Y416 = 102, + NV12 = 103, + P010 = 104, + P016 = 105, + _420_OPAQUE = 106, + YUY2 = 107, + Y210 = 108, + Y216 = 109, + NV11 = 110, + AI44 = 111, + IA44 = 112, + P8 = 113, + A8P8 = 114, + B4G4R4A4_UNORM = 115, + + P208 = 130, + V208 = 131, + V408 = 132, + + SAMPLER_FEEDBACK_MIN_MIP_OPAQUE = 189, + SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE = 190, + + FORCE_UINT = -1, +} + +RGB :: struct { + Red: f32, + Green: f32, + Blue: f32, +} + +D3DCOLORVALUE :: struct { + r: f32, + g: f32, + b: f32, + a: f32, +} + +RGBA :: D3DCOLORVALUE + +GAMMA_CONTROL :: struct { + Scale: RGB, + Offset: RGB, + GammaCurve: [1025]RGB, +} + +GAMMA_CONTROL_CAPABILITIES :: struct { + ScaleAndOffsetSupported: BOOL, + MaxConvertedValue: f32, + MinConvertedValue: f32, + NumGammaControlPoints: u32, + ControlPointPositions: [1025]f32, +} + +MODE_SCANLINE_ORDER :: enum i32 { + UNSPECIFIED = 0, + PROGRESSIVE = 1, + UPPER_FIELD_FIRST = 2, + LOWER_FIELD_FIRST = 3, +} + +MODE_SCALING :: enum i32 { + UNSPECIFIED = 0, + CENTERED = 1, + STRETCHED = 2, +} + +MODE_ROTATION :: enum i32 { + UNSPECIFIED = 0, + IDENTITY = 1, + ROTATE90 = 2, + ROTATE180 = 3, + ROTATE270 = 4, +} + +MODE_DESC :: struct { + Width: u32, + Height: u32, + RefreshRate: RATIONAL, + Format: FORMAT, + ScanlineOrdering: MODE_SCANLINE_ORDER, + Scaling: MODE_SCALING, +} + +JPEG_DC_HUFFMAN_TABLE :: struct { + CodeCounts: [12]u8, + CodeValues: [12]u8, +} + +JPEG_AC_HUFFMAN_TABLE :: struct { + CodeCounts: [16]u8, + CodeValues: [162]u8, +} + +JPEG_QUANTIZATION_TABLE :: struct { + Elements: [64]u8, +} + +FRAME_STATISTICS :: struct { + PresentCount: u32, + PresentRefreshCount: u32, + SyncRefreshCount: u32, + SyncQPCTime: LARGE_INTEGER, + SyncGPUTime: LARGE_INTEGER, +} + +MAPPED_RECT :: struct { + Pitch: i32, + pBits: [^]u8, +} + +ADAPTER_DESC :: struct { + Description: [128]i16, + VendorId: u32, + DeviceId: u32, + SubSysId: u32, + Revision: u32, + DedicatedVideoMemory: SIZE_T, + DedicatedSystemMemory: SIZE_T, + SharedSystemMemory: SIZE_T, + AdapterLuid: LUID, +} + +OUTPUT_DESC :: struct { + DeviceName: [32]i16, + DesktopCoordinates: RECT, + AttachedToDesktop: BOOL, + Rotation: MODE_ROTATION, + Monitor: HMONITOR, +} + +SHARED_RESOURCE :: struct { + Handle: HANDLE, +} + +RESIDENCY :: enum i32 { + FULLY_RESIDENT = 1, + RESIDENT_IN_SHARED_MEMORY = 2, + EVICTED_TO_DISK = 3, +} + +SURFACE_DESC :: struct { + Width: u32, + Height: u32, + Format: FORMAT, + SampleDesc: SAMPLE_DESC, +} + +SWAP_EFFECT :: enum i32 { + DISCARD = 0, + SEQUENTIAL = 1, + FLIP_SEQUENTIAL = 3, + FLIP_DISCARD = 4, +} + +SWAP_CHAIN_FLAG :: enum u32 { // TODO: convert to bit_set + NONPREROTATED = 0x1, + ALLOW_MODE_SWITCH = 0x2, + GDI_COMPATIBLE = 0x4, + RESTRICTED_CONTENT = 0x8, + RESTRICT_SHARED_RESOURCE_DRIVER = 0x10, + DISPLAY_ONLY = 0x20, + FRAME_LATENCY_WAITABLE_OBJECT = 0x40, + FOREGROUND_LAYER = 0x80, + FULLSCREEN_VIDEO = 0x100, + YUV_VIDEO = 0x200, + HW_PROTECTED = 0x400, + ALLOW_TEARING = 0x800, + RESTRICTED_TO_ALL_HOLOGRAPHIC_DISPLAYS = 0x1000, +} + +SWAP_CHAIN_DESC :: struct { + BufferDesc: MODE_DESC, + SampleDesc: SAMPLE_DESC, + BufferUsage: USAGE, + BufferCount: u32, + OutputWindow: HWND, + Windowed: BOOL, + SwapEffect: SWAP_EFFECT, + Flags: u32, +} + + +IObject_UUID :: "AEC22FB8-76F3-4639-9BE0-28EB43A67A2E" +IObject :: struct #raw_union { + #subtype iunknown: IUnknown, + using vtable: ^IObject_VTable, +} +IObject_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + SetPrivateData: proc "stdcall" (this: ^IObject, Name: ^GUID, DataSize: u32, pData: rawptr) -> HRESULT, + SetPrivateDataInterface: proc "stdcall" (this: ^IObject, Name: ^GUID, pUnknown: ^IUnknown) -> HRESULT, + GetPrivateData: proc "stdcall" (this: ^IObject, Name: ^GUID, pDataSize: ^u32, pData: rawptr) -> HRESULT, + GetParent: proc "stdcall" (this: ^IObject, riid: ^IID, ppParent: ^rawptr) -> HRESULT, +} + +IDeviceSubObject_UUID :: "3D3E0379-F9DE-4D58-BB6C-18D62992F1A6" +IDeviceSubObject :: struct #raw_union { + #subtype idxgiobject: IObject, + using idxgidevicesubobject_vtable: ^IDeviceSubObject_VTable, +} +IDeviceSubObject_VTable :: struct { + using idxgiobject_vtable: IObject_VTable, + GetDevice: proc "stdcall" (this: ^IDeviceSubObject, riid: ^IID, ppDevice: ^rawptr) -> HRESULT, +} + +IResource_UUID :: "035F3AB4-482E-4E50-B41F-8A7F8BD8960B" +IResource :: struct #raw_union { + #subtype idxgidevicesubobject: IDeviceSubObject, + using idxgiresource_vtable: ^IResource_VTable, +} +IResource_VTable :: struct { + using idxgidevicesubobject_vtable: IDeviceSubObject_VTable, + GetSharedHandle: proc "stdcall" (this: ^IResource, pSharedHandle: ^HANDLE) -> HRESULT, + GetUsage: proc "stdcall" (this: ^IResource, pUsage: ^USAGE) -> HRESULT, + SetEvictionPriority: proc "stdcall" (this: ^IResource, EvictionPriority: u32) -> HRESULT, + GetEvictionPriority: proc "stdcall" (this: ^IResource, pEvictionPriority: ^u32) -> HRESULT, +} + +IKeyedMutex_UUID :: "9D8E1289-D7B3-465F-8126-250E349AF85D" +IKeyedMutex :: struct #raw_union { + #subtype idxgidevicesubobject: IDeviceSubObject, + using idxgikeyedmutex_vtable: ^IKeyedMutex_VTable, +} +IKeyedMutex_VTable :: struct { + using idxgidevicesubobject_vtable: IDeviceSubObject_VTable, + AcquireSync: proc "stdcall" (this: ^IKeyedMutex, Key: u64, dwMilliseconds: u32) -> HRESULT, + ReleaseSync: proc "stdcall" (this: ^IKeyedMutex, Key: u64) -> HRESULT, +} + +ISurface_UUID :: "CAFCB56C-6AC3-4889-BF47-9E23BBD260EC" +ISurface :: struct #raw_union { + #subtype idxgidevicesubobject: IDeviceSubObject, + using idxgisurface_vtable: ^ISurface_VTable, +} +ISurface_VTable :: struct { + using idxgidevicesubobject_vtable: IDeviceSubObject_VTable, + GetDesc: proc "stdcall" (this: ^ISurface, pDesc: ^SURFACE_DESC) -> HRESULT, + Map: proc "stdcall" (this: ^ISurface, pLockedRect: ^MAPPED_RECT, MapFlags: u32) -> HRESULT, + Unmap: proc "stdcall" (this: ^ISurface) -> HRESULT, +} + +ISurface1_UUID :: "4AE63092-6327-4C1B-80AE-BFE12EA32B86" +ISurface1 :: struct #raw_union { + #subtype idxgisurface: ISurface, + using idxgisurface1_vtable: ^ISurface1_VTable, +} +ISurface1_VTable :: struct { + using idxgisurface_vtable: ISurface_VTable, + GetDC: proc "stdcall" (this: ^ISurface1, Discard: BOOL, phdc: ^HDC) -> HRESULT, + ReleaseDC: proc "stdcall" (this: ^ISurface1, pDirtyRect: ^RECT) -> HRESULT, +} + +IAdapter_UUID :: "2411E7E1-12AC-4CCF-BD14-9798E8534DC0" +IAdapter :: struct #raw_union { + #subtype idxgiobject: IObject, + using idxgiadapter_vtable: ^IAdapter_VTable, +} +IAdapter_VTable :: struct { + using idxgiobject_vtable: IObject_VTable, + EnumOutputs: proc "stdcall" (this: ^IAdapter, Output: u32, ppOutput: ^^IOutput) -> HRESULT, + GetDesc: proc "stdcall" (this: ^IAdapter, pDesc: ^ADAPTER_DESC) -> HRESULT, + CheckInterfaceSupport: proc "stdcall" (this: ^IAdapter, InterfaceName: ^GUID, pUMDVersion: ^LARGE_INTEGER) -> HRESULT, +} + +IOutput_UUID :: "AE02EEDB-C735-4690-8D52-5A8DC20213AA" +IOutput :: struct #raw_union { + #subtype idxgiobject: IObject, + using idxgioutput_vtable: ^IOutput_VTable, +} +IOutput_VTable :: struct { + using idxgiobject_vtable: IObject_VTable, + GetDesc: proc "stdcall" (this: ^IOutput, pDesc: ^OUTPUT_DESC) -> HRESULT, + GetDisplayModeList: proc "stdcall" (this: ^IOutput, EnumFormat: FORMAT, Flags: u32, pNumModes: ^u32, pDesc: ^MODE_DESC) -> HRESULT, + FindClosestMatchingMode: proc "stdcall" (this: ^IOutput, pModeToMatch: ^MODE_DESC, pClosestMatch: ^MODE_DESC, pConcernedDevice: ^IUnknown) -> HRESULT, + WaitForVBlank: proc "stdcall" (this: ^IOutput) -> HRESULT, + TakeOwnership: proc "stdcall" (this: ^IOutput, pDevice: ^IUnknown, Exclusive: BOOL) -> HRESULT, + ReleaseOwnership: proc "stdcall" (this: ^IOutput), + GetGammaControlCapabilities: proc "stdcall" (this: ^IOutput, pGammaCaps: ^GAMMA_CONTROL_CAPABILITIES) -> HRESULT, + SetGammaControl: proc "stdcall" (this: ^IOutput, pArray: ^GAMMA_CONTROL) -> HRESULT, + GetGammaControl: proc "stdcall" (this: ^IOutput, pArray: ^GAMMA_CONTROL) -> HRESULT, + SetDisplaySurface: proc "stdcall" (this: ^IOutput, pScanoutSurface: ^ISurface) -> HRESULT, + GetDisplaySurfaceData: proc "stdcall" (this: ^IOutput, pDestination: ^ISurface) -> HRESULT, + GetFrameStatistics: proc "stdcall" (this: ^IOutput, pStats: ^FRAME_STATISTICS) -> HRESULT, +} + +ISwapChain_UUID :: "310D36A0-D2E7-4C0A-AA04-6A9D23B8886A" +ISwapChain :: struct #raw_union { + #subtype idxgidevicesubobject: IDeviceSubObject, + using idxgiswapchain_vtable: ^ISwapChain_VTable, +} +ISwapChain_VTable :: struct { + using idxgidevicesubobject_vtable: IDeviceSubObject_VTable, + Present: proc "stdcall" (this: ^ISwapChain, SyncInterval: u32, Flags: u32) -> HRESULT, + GetBuffer: proc "stdcall" (this: ^ISwapChain, Buffer: u32, riid: ^IID, ppSurface: ^rawptr) -> HRESULT, + SetFullscreenState: proc "stdcall" (this: ^ISwapChain, Fullscreen: BOOL, pTarget: ^IOutput) -> HRESULT, + GetFullscreenState: proc "stdcall" (this: ^ISwapChain, pFullscreen: ^BOOL, ppTarget: ^^IOutput) -> HRESULT, + GetDesc: proc "stdcall" (this: ^ISwapChain, pDesc: ^SWAP_CHAIN_DESC) -> HRESULT, + ResizeBuffers: proc "stdcall" (this: ^ISwapChain, BufferCount: u32, Width: u32, Height: u32, NewFormat: FORMAT, SwapChainFlags: u32) -> HRESULT, + ResizeTarget: proc "stdcall" (this: ^ISwapChain, pNewTargetParameters: ^MODE_DESC) -> HRESULT, + GetContainingOutput: proc "stdcall" (this: ^ISwapChain, ppOutput: ^^IOutput) -> HRESULT, + GetFrameStatistics: proc "stdcall" (this: ^ISwapChain, pStats: ^FRAME_STATISTICS) -> HRESULT, + GetLastPresentCount: proc "stdcall" (this: ^ISwapChain, pLastPresentCount: ^u32) -> HRESULT, +} + +IFactory_UUID :: "7B7166EC-21C7-44AE-B21A-C9AE321AE369" +IFactory :: struct #raw_union { + #subtype idxgiobject: IObject, + using idxgifactory_vtable: ^IFactory_VTable, +} +IFactory_VTable :: struct { + using idxgiobject_vtable: IObject_VTable, + EnumAdapters: proc "stdcall" (this: ^IFactory, Adapter: u32, ppAdapter: ^^IAdapter) -> HRESULT, + MakeWindowAssociation: proc "stdcall" (this: ^IFactory, WindowHandle: HWND, Flags: u32) -> HRESULT, + GetWindowAssociation: proc "stdcall" (this: ^IFactory, pWindowHandle: ^HWND) -> HRESULT, + CreateSwapChain: proc "stdcall" (this: ^IFactory, pDevice: ^IUnknown, pDesc: ^SWAP_CHAIN_DESC, ppSwapChain: ^^ISwapChain) -> HRESULT, + CreateSoftwareAdapter: proc "stdcall" (this: ^IFactory, Module: HMODULE, ppAdapter: ^^IAdapter) -> HRESULT, +} +IDevice_UUID :: "54EC77FA-1377-44E6-8C32-88FD5F44C84C" +IDevice :: struct #raw_union { + #subtype idxgiobject: IObject, + using idxgidevice_vtable: ^IDevice_VTable, +} +IDevice_VTable :: struct { + using idxgiobject_vtable: IObject_VTable, + GetAdapter: proc "stdcall" (this: ^IDevice, pAdapter: ^^IAdapter) -> HRESULT, + CreateSurface: proc "stdcall" (this: ^IDevice, pDesc: ^SURFACE_DESC, NumSurfaces: u32, Usage: USAGE, pSharedResource: ^SHARED_RESOURCE, ppSurface: ^^ISurface) -> HRESULT, + QueryResourceResidency: proc "stdcall" (this: ^IDevice, ppResources: ^^IUnknown, pResidencyStatus: ^RESIDENCY, NumResources: u32) -> HRESULT, + SetGPUThreadPriority: proc "stdcall" (this: ^IDevice, Priority: i32) -> HRESULT, + GetGPUThreadPriority: proc "stdcall" (this: ^IDevice, pPriority: ^i32) -> HRESULT, +} +ADAPTER_FLAG :: enum u32 { // TODO: convert to bit_set + NONE = 0x0, + REMOTE = 0x1, + SOFTWARE = 0x2, + FORCE_DWORD = 0xffffffff, +} + +ADAPTER_DESC1 :: struct { + Description: [128]i16, + VendorId: u32, + DeviceId: u32, + SubSysId: u32, + Revision: u32, + DedicatedVideoMemory: SIZE_T, + DedicatedSystemMemory: SIZE_T, + SharedSystemMemory: SIZE_T, + AdapterLuid: LUID, + Flags: u32, +} + +DISPLAY_COLOR_SPACE :: struct { + PrimaryCoordinates: [8][2]f32, + WhitePoints: [16][2]f32, +} + + +IFactory1_UUID :: "770AAE78-F26F-4DBA-A829-253C83D1B387" +IFactory1 :: struct #raw_union { + #subtype idxgifactory: IFactory, + using idxgifactory1_vtable: ^IFactory1_VTable, +} +IFactory1_VTable :: struct { + using idxgifactory_vtable: IFactory_VTable, + EnumAdapters1: proc "stdcall" (this: ^IFactory1, Adapter: u32, ppAdapter: ^^IAdapter1) -> HRESULT, + IsCurrent: proc "stdcall" (this: ^IFactory1) -> BOOL, +} + +IAdapter1_UUID :: "29038F61-3839-4626-91FD-086879011A05" +IAdapter1 :: struct #raw_union { + #subtype idxgiadapter: IAdapter, + using idxgiadapter1_vtable: ^IAdapter1_VTable, +} +IAdapter1_VTable :: struct { + using idxgiadapter_vtable: IAdapter_VTable, + GetDesc1: proc "stdcall" (this: ^IAdapter1, pDesc: ^ADAPTER_DESC1) -> HRESULT, +} + +IDevice1_UUID :: "77DB970F-6276-48BA-BA28-070143B4392C" +IDevice1 :: struct #raw_union { + #subtype idxgidevice: IDevice, + using idxgidevice1_vtable: ^IDevice1_VTable, +} +IDevice1_VTable :: struct { + using idxgidevice_vtable: IDevice_VTable, + SetMaximumFrameLatency: proc "stdcall" (this: ^IDevice1, MaxLatency: u32) -> HRESULT, + GetMaximumFrameLatency: proc "stdcall" (this: ^IDevice1, pMaxLatency: ^u32) -> HRESULT, +} + +IDisplayControl_UUID :: "EA9DBF1A-C88E-4486-854A-98AA0138F30C" +IDisplayControl :: struct #raw_union { + #subtype iunknown: IUnknown, + using idxgidisplaycontrol_vtable: ^IDisplayControl_VTable, +} +IDisplayControl_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + IsStereoEnabled: proc "stdcall" (this: ^IDisplayControl) -> BOOL, + SetStereoEnabled: proc "stdcall" (this: ^IDisplayControl, enabled: BOOL), +} +OUTDUPL_MOVE_RECT :: struct { + SourcePoint: POINT, + DestinationRect: RECT, +} + +OUTDUPL_DESC :: struct { + ModeDesc: MODE_DESC, + Rotation: MODE_ROTATION, + DesktopImageInSystemMemory: BOOL, +} + +OUTDUPL_POINTER_POSITION :: struct { + Position: POINT, + Visible: BOOL, +} + +OUTDUPL_POINTER_SHAPE_TYPE :: enum i32 { + MONOCHROME = 1, + COLOR = 2, + MASKED_COLOR = 4, +} + +OUTDUPL_POINTER_SHAPE_INFO :: struct { + Type: u32, + Width: u32, + Height: u32, + Pitch: u32, + HotSpot: POINT, +} + +OUTDUPL_FRAME_INFO :: struct { + LastPresentTime: LARGE_INTEGER, + LastMouseUpdateTime: LARGE_INTEGER, + AccumulatedFrames: u32, + RectsCoalesced: BOOL, + ProtectedContentMaskedOut: BOOL, + PointerPosition: OUTDUPL_POINTER_POSITION, + TotalMetadataBufferSize: u32, + PointerShapeBufferSize: u32, +} + + +IOutputDuplication_UUID :: "191CFAC3-A341-470D-B26E-A864F428319C" +IOutputDuplication :: struct #raw_union { + #subtype idxgiobject: IObject, + using idxgioutputduplication_vtable: ^IOutputDuplication_VTable, +} +IOutputDuplication_VTable :: struct { + using idxgiobject_vtable: IObject_VTable, + GetDesc: proc "stdcall" (this: ^IOutputDuplication, pDesc: ^OUTDUPL_DESC), + AcquireNextFrame: proc "stdcall" (this: ^IOutputDuplication, TimeoutInMilliseconds: u32, pFrameInfo: ^OUTDUPL_FRAME_INFO, ppDesktopResource: ^^IResource) -> HRESULT, + GetFrameDirtyRects: proc "stdcall" (this: ^IOutputDuplication, DirtyRectsBufferSize: u32, pDirtyRectsBuffer: ^RECT, pDirtyRectsBufferSizeRequired: ^u32) -> HRESULT, + GetFrameMoveRects: proc "stdcall" (this: ^IOutputDuplication, MoveRectsBufferSize: u32, pMoveRectBuffer: ^OUTDUPL_MOVE_RECT, pMoveRectsBufferSizeRequired: ^u32) -> HRESULT, + GetFramePointerShape: proc "stdcall" (this: ^IOutputDuplication, PointerShapeBufferSize: u32, pPointerShapeBuffer: rawptr, pPointerShapeBufferSizeRequired: ^u32, pPointerShapeInfo: ^OUTDUPL_POINTER_SHAPE_INFO) -> HRESULT, + MapDesktopSurface: proc "stdcall" (this: ^IOutputDuplication, pLockedRect: ^MAPPED_RECT) -> HRESULT, + UnMapDesktopSurface: proc "stdcall" (this: ^IOutputDuplication) -> HRESULT, + ReleaseFrame: proc "stdcall" (this: ^IOutputDuplication) -> HRESULT, +} +ALPHA_MODE :: enum i32 { + UNSPECIFIED = 0, + PREMULTIPLIED = 1, + STRAIGHT = 2, + IGNORE = 3, + FORCE_DWORD = -1, +} + + +ISurface2_UUID :: "ABA496DD-B617-4CB8-A866-BC44D7EB1FA2" +ISurface2 :: struct #raw_union { + #subtype idxgisurface1: ISurface1, + using idxgisurface2_vtable: ^ISurface2_VTable, +} +ISurface2_VTable :: struct { + using idxgisurface1_vtable: ISurface1_VTable, + GetResource: proc "stdcall" (this: ^ISurface2, riid: ^IID, ppParentResource: ^rawptr, pSubresourceIndex: ^u32) -> HRESULT, +} + +IResource1_UUID :: "30961379-4609-4A41-998E-54FE567EE0C1" +IResource1 :: struct #raw_union { + #subtype idxgiresource: IResource, + using idxgiresource1_vtable: ^IResource1_VTable, +} +IResource1_VTable :: struct { + using idxgiresource_vtable: IResource_VTable, + CreateSubresourceSurface: proc "stdcall" (this: ^IResource1, index: u32, ppSurface: ^^ISurface2) -> HRESULT, + CreateSharedHandle: proc "stdcall" (this: ^IResource1, pAttributes: ^win32.SECURITY_ATTRIBUTES, dwAccess: u32, lpName: ^i16, pHandle: ^HANDLE) -> HRESULT, +} +OFFER_RESOURCE_PRIORITY :: enum i32 { + LOW = 1, + NORMAL = 2, + HIGH = 3, +} + + +IDevice2_UUID :: "05008617-FBFD-4051-A790-144884B4F6A9" +IDevice2 :: struct #raw_union { + #subtype idxgidevice1: IDevice1, + using idxgidevice2_vtable: ^IDevice2_VTable, +} +IDevice2_VTable :: struct { + using idxgidevice1_vtable: IDevice1_VTable, + OfferResources: proc "stdcall" (this: ^IDevice2, NumResources: u32, ppResources: ^^IResource, Priority: OFFER_RESOURCE_PRIORITY) -> HRESULT, + ReclaimResources: proc "stdcall" (this: ^IDevice2, NumResources: u32, ppResources: ^^IResource, pDiscarded: ^BOOL) -> HRESULT, + EnqueueSetEvent: proc "stdcall" (this: ^IDevice2, hEvent: HANDLE) -> HRESULT, +} +MODE_DESC1 :: struct { + Width: u32, + Height: u32, + RefreshRate: RATIONAL, + Format: FORMAT, + ScanlineOrdering: MODE_SCANLINE_ORDER, + Scaling: MODE_SCALING, + Stereo: BOOL, +} + +SCALING :: enum i32 { + STRETCH = 0, + NONE = 1, + ASPECT_RATIO_STRETCH = 2, +} + +SWAP_CHAIN_DESC1 :: struct { + Width: u32, + Height: u32, + Format: FORMAT, + Stereo: BOOL, + SampleDesc: SAMPLE_DESC, + BufferUsage: USAGE, + BufferCount: u32, + Scaling: SCALING, + SwapEffect: SWAP_EFFECT, + AlphaMode: ALPHA_MODE, + Flags: u32, +} + +SWAP_CHAIN_FULLSCREEN_DESC :: struct { + RefreshRate: RATIONAL, + ScanlineOrdering: MODE_SCANLINE_ORDER, + Scaling: MODE_SCALING, + Windowed: BOOL, +} + +PRESENT_PARAMETERS :: struct { + DirtyRectsCount: u32, + + pDirtyRects: [^]RECT, + pScrollRect: ^RECT, + pScrollOffset: ^POINT, +} + + +ISwapChain1_UUID :: "790A45F7-0D42-4876-983A-0A55CFE6F4AA" +ISwapChain1 :: struct #raw_union { + #subtype idxgiswapchain: ISwapChain, + using idxgiswapchain1_vtable: ^ISwapChain1_VTable, +} +ISwapChain1_VTable :: struct { + using idxgiswapchain_vtable: ISwapChain_VTable, + GetDesc1: proc "stdcall" (this: ^ISwapChain1, pDesc: ^SWAP_CHAIN_DESC1) -> HRESULT, + GetFullscreenDesc: proc "stdcall" (this: ^ISwapChain1, pDesc: ^SWAP_CHAIN_FULLSCREEN_DESC) -> HRESULT, + GetHwnd: proc "stdcall" (this: ^ISwapChain1, pHwnd: ^HWND) -> HRESULT, + GetCoreWindow: proc "stdcall" (this: ^ISwapChain1, refiid: ^IID, ppUnk: ^rawptr) -> HRESULT, + Present1: proc "stdcall" (this: ^ISwapChain1, SyncInterval: u32, PresentFlags: u32, pPresentParameters: ^PRESENT_PARAMETERS) -> HRESULT, + IsTemporaryMonoSupported: proc "stdcall" (this: ^ISwapChain1) -> BOOL, + GetRestrictToOutput: proc "stdcall" (this: ^ISwapChain1, ppRestrictToOutput: ^^IOutput) -> HRESULT, + SetBackgroundColor: proc "stdcall" (this: ^ISwapChain1, pColor: ^RGBA) -> HRESULT, + GetBackgroundColor: proc "stdcall" (this: ^ISwapChain1, pColor: ^RGBA) -> HRESULT, + SetRotation: proc "stdcall" (this: ^ISwapChain1, Rotation: MODE_ROTATION) -> HRESULT, + GetRotation: proc "stdcall" (this: ^ISwapChain1, pRotation: ^MODE_ROTATION) -> HRESULT, +} + +IFactory2_UUID :: "50C83A1C-E072-4C48-87B0-3630FA36A6D0" +IFactory2 :: struct #raw_union { + #subtype idxgifactory1: IFactory1, + using idxgifactory2_vtable: ^IFactory2_VTable, +} +IFactory2_VTable :: struct { + using idxgifactory1_vtable: IFactory1_VTable, + IsWindowedStereoEnabled: proc "stdcall" (this: ^IFactory2) -> BOOL, + CreateSwapChainForHwnd: proc "stdcall" (this: ^IFactory2, pDevice: ^IUnknown, hWnd: HWND, pDesc: ^SWAP_CHAIN_DESC1, pFullscreenDesc: ^SWAP_CHAIN_FULLSCREEN_DESC, pRestrictToOutput: ^IOutput, ppSwapChain: ^^ISwapChain1) -> HRESULT, + CreateSwapChainForCoreWindow: proc "stdcall" (this: ^IFactory2, pDevice: ^IUnknown, pWindow: ^IUnknown, pDesc: ^SWAP_CHAIN_DESC1, pRestrictToOutput: ^IOutput, ppSwapChain: ^^ISwapChain1) -> HRESULT, + GetSharedResourceAdapterLuid: proc "stdcall" (this: ^IFactory2, hResource: HANDLE, pLuid: ^LUID) -> HRESULT, + RegisterStereoStatusWindow: proc "stdcall" (this: ^IFactory2, WindowHandle: HWND, wMsg: u32, pdwCookie: ^u32) -> HRESULT, + RegisterStereoStatusEvent: proc "stdcall" (this: ^IFactory2, hEvent: HANDLE, pdwCookie: ^u32) -> HRESULT, + UnregisterStereoStatus: proc "stdcall" (this: ^IFactory2, dwCookie: u32), + RegisterOcclusionStatusWindow: proc "stdcall" (this: ^IFactory2, WindowHandle: HWND, wMsg: u32, pdwCookie: ^u32) -> HRESULT, + RegisterOcclusionStatusEvent: proc "stdcall" (this: ^IFactory2, hEvent: HANDLE, pdwCookie: ^u32) -> HRESULT, + UnregisterOcclusionStatus: proc "stdcall" (this: ^IFactory2, dwCookie: u32), + CreateSwapChainForComposition: proc "stdcall" (this: ^IFactory2, pDevice: ^IUnknown, pDesc: ^SWAP_CHAIN_DESC1, pRestrictToOutput: ^IOutput, ppSwapChain: ^^ISwapChain1) -> HRESULT, +} +GRAPHICS_PREEMPTION_GRANULARITY :: enum i32 { + DMA_BUFFER_BOUNDARY = 0, + PRIMITIVE_BOUNDARY = 1, + TRIANGLE_BOUNDARY = 2, + PIXEL_BOUNDARY = 3, + INSTRUCTION_BOUNDARY = 4, +} + +COMPUTE_PREEMPTION_GRANULARITY :: enum i32 { + DMA_BUFFER_BOUNDARY = 0, + DISPATCH_BOUNDARY = 1, + THREAD_GROUP_BOUNDARY = 2, + THREAD_BOUNDARY = 3, + INSTRUCTION_BOUNDARY = 4, +} + +ADAPTER_DESC2 :: struct { + Description: [128]i16, + VendorId: u32, + DeviceId: u32, + SubSysId: u32, + Revision: u32, + DedicatedVideoMemory: SIZE_T, + DedicatedSystemMemory: SIZE_T, + SharedSystemMemory: SIZE_T, + AdapterLuid: LUID, + Flags: u32, + GraphicsPreemptionGranularity: GRAPHICS_PREEMPTION_GRANULARITY, + ComputePreemptionGranularity: COMPUTE_PREEMPTION_GRANULARITY, +} + + +IAdapter2_UUID :: "0AA1AE0A-FA0E-4B84-8644-E05FF8E5ACB5" +IAdapter2 :: struct #raw_union { + #subtype idxgiadapter1: IAdapter1, + using idxgiadapter2_vtable: ^IAdapter2_VTable, +} +IAdapter2_VTable :: struct { + using idxgiadapter1_vtable: IAdapter1_VTable, + GetDesc2: proc "stdcall" (this: ^IAdapter2, pDesc: ^ADAPTER_DESC2) -> HRESULT, +} + +IOutput1_UUID :: "00CDDEA8-939B-4B83-A340-A685226666CC" +IOutput1 :: struct #raw_union { + #subtype idxgioutput: IOutput, + using idxgioutput1_vtable: ^IOutput1_VTable, +} +IOutput1_VTable :: struct { + using idxgioutput_vtable: IOutput_VTable, + GetDisplayModeList1: proc "stdcall" (this: ^IOutput1, EnumFormat: FORMAT, Flags: u32, pNumModes: ^u32, pDesc: ^MODE_DESC1) -> HRESULT, + FindClosestMatchingMode1: proc "stdcall" (this: ^IOutput1, pModeToMatch: ^MODE_DESC1, pClosestMatch: ^MODE_DESC1, pConcernedDevice: ^IUnknown) -> HRESULT, + GetDisplaySurfaceData1: proc "stdcall" (this: ^IOutput1, pDestination: ^IResource) -> HRESULT, + DuplicateOutput: proc "stdcall" (this: ^IOutput1, pDevice: ^IUnknown, ppOutputDuplication: ^^IOutputDuplication) -> HRESULT, +} +IDevice3_UUID :: "6007896C-3244-4AFD-BF18-A6D3BEDA5023" +IDevice3 :: struct #raw_union { + #subtype idxgidevice2: IDevice2, + using idxgidevice3_vtable: ^IDevice3_VTable, +} +IDevice3_VTable :: struct { + using idxgidevice2_vtable: IDevice2_VTable, + Trim: proc "stdcall" (this: ^IDevice3), +} +MATRIX_3X2_F :: struct { + _11: f32, + _12: f32, + _21: f32, + _22: f32, + _31: f32, + _32: f32, +} + + +ISwapChain2_UUID :: "A8BE2AC4-199F-4946-B331-79599FB98DE7" +ISwapChain2 :: struct #raw_union { + #subtype idxgiswapchain1: ISwapChain1, + using idxgiswapchain2_vtable: ^ISwapChain2_VTable, +} +ISwapChain2_VTable :: struct { + using idxgiswapchain1_vtable: ISwapChain1_VTable, + SetSourceSize: proc "stdcall" (this: ^ISwapChain2, Width: u32, Height: u32) -> HRESULT, + GetSourceSize: proc "stdcall" (this: ^ISwapChain2, pWidth: ^u32, pHeight: ^u32) -> HRESULT, + SetMaximumFrameLatency: proc "stdcall" (this: ^ISwapChain2, MaxLatency: u32) -> HRESULT, + GetMaximumFrameLatency: proc "stdcall" (this: ^ISwapChain2, pMaxLatency: ^u32) -> HRESULT, + GetFrameLatencyWaitableObject: proc "stdcall" (this: ^ISwapChain2) -> HANDLE, + SetMatrixTransform: proc "stdcall" (this: ^ISwapChain2, pMatrix: ^MATRIX_3X2_F) -> HRESULT, + GetMatrixTransform: proc "stdcall" (this: ^ISwapChain2, pMatrix: ^MATRIX_3X2_F) -> HRESULT, +} + +IOutput2_UUID :: "595E39D1-2724-4663-99B1-DA969DE28364" +IOutput2 :: struct #raw_union { + #subtype idxgioutput1: IOutput1, + using idxgioutput2_vtable: ^IOutput2_VTable, +} +IOutput2_VTable :: struct { + using idxgioutput1_vtable: IOutput1_VTable, + SupportsOverlays: proc "stdcall" (this: ^IOutput2) -> BOOL, +} + +IFactory3_UUID :: "25483823-CD46-4C7D-86CA-47AA95B837BD" +IFactory3 :: struct #raw_union { + #subtype idxgifactory2: IFactory2, + using idxgifactory3_vtable: ^IFactory3_VTable, +} +IFactory3_VTable :: struct { + using idxgifactory2_vtable: IFactory2_VTable, + GetCreationFlags: proc "stdcall" (this: ^IFactory3) -> u32, +} +DECODE_SWAP_CHAIN_DESC :: struct { + Flags: u32, +} + +MULTIPLANE_OVERLAY_YCbCr_FLAGS :: enum u32 { // TODO: convert to bit_set + NOMINAL_RANGE = 0x1, + BT709 = 0x2, + xvYCC = 0x4, +} + + +IDecodeSwapChain_UUID :: "2633066B-4514-4C7A-8FD8-12EA98059D18" +IDecodeSwapChain :: struct #raw_union { + #subtype iunknown: IUnknown, + using idxgidecodeswapchain_vtable: ^IDecodeSwapChain_VTable, +} +IDecodeSwapChain_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + PresentBuffer: proc "stdcall" (this: ^IDecodeSwapChain, BufferToPresent: u32, SyncInterval: u32, Flags: u32) -> HRESULT, + SetSourceRect: proc "stdcall" (this: ^IDecodeSwapChain, pRect: ^RECT) -> HRESULT, + SetTargetRect: proc "stdcall" (this: ^IDecodeSwapChain, pRect: ^RECT) -> HRESULT, + SetDestSize: proc "stdcall" (this: ^IDecodeSwapChain, Width: u32, Height: u32) -> HRESULT, + GetSourceRect: proc "stdcall" (this: ^IDecodeSwapChain, pRect: ^RECT) -> HRESULT, + GetTargetRect: proc "stdcall" (this: ^IDecodeSwapChain, pRect: ^RECT) -> HRESULT, + GetDestSize: proc "stdcall" (this: ^IDecodeSwapChain, pWidth: ^u32, pHeight: ^u32) -> HRESULT, + SetColorSpace: proc "stdcall" (this: ^IDecodeSwapChain, ColorSpace: MULTIPLANE_OVERLAY_YCbCr_FLAGS) -> HRESULT, + GetColorSpace: proc "stdcall" (this: ^IDecodeSwapChain) -> MULTIPLANE_OVERLAY_YCbCr_FLAGS, +} + +IFactoryMedia_UUID :: "41E7D1F2-A591-4F7B-A2E5-FA9C843E1C12" +IFactoryMedia :: struct #raw_union { + #subtype iunknown: IUnknown, + using idxgifactorymedia_vtable: ^IFactoryMedia_VTable, +} +IFactoryMedia_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + CreateSwapChainForCompositionSurfaceHandle: proc "stdcall" (this: ^IFactoryMedia, pDevice: ^IUnknown, hSurface: HANDLE, pDesc: ^SWAP_CHAIN_DESC1, pRestrictToOutput: ^IOutput, ppSwapChain: ^^ISwapChain1) -> HRESULT, + CreateDecodeSwapChainForCompositionSurfaceHandle: proc "stdcall" (this: ^IFactoryMedia, pDevice: ^IUnknown, hSurface: HANDLE, pDesc: ^DECODE_SWAP_CHAIN_DESC, pYuvDecodeBuffers: ^IResource, pRestrictToOutput: ^IOutput, ppSwapChain: ^^IDecodeSwapChain) -> HRESULT, +} +FRAME_PRESENTATION_MODE :: enum i32 { + COMPOSED = 0, + OVERLAY = 1, + NONE = 2, + COMPOSITION_FAILURE = 3, +} + +FRAME_STATISTICS_MEDIA :: struct { + PresentCount: u32, + PresentRefreshCount: u32, + SyncRefreshCount: u32, + SyncQPCTime: LARGE_INTEGER, + SyncGPUTime: LARGE_INTEGER, + CompositionMode: FRAME_PRESENTATION_MODE, + ApprovedPresentDuration: u32, +} + + +ISwapChainMedia_UUID :: "DD95B90B-F05F-4F6A-BD65-25BFB264BD84" +ISwapChainMedia :: struct #raw_union { + #subtype iunknown: IUnknown, + using idxgiswapchainmedia_vtable: ^ISwapChainMedia_VTable, +} +ISwapChainMedia_VTable :: struct { + using iunknown_vtable: IUnknown_VTable, + GetFrameStatisticsMedia: proc "stdcall" (this: ^ISwapChainMedia, pStats: ^FRAME_STATISTICS_MEDIA) -> HRESULT, + SetPresentDuration: proc "stdcall" (this: ^ISwapChainMedia, Duration: u32) -> HRESULT, + CheckPresentDurationSupport: proc "stdcall" (this: ^ISwapChainMedia, DesiredPresentDuration: u32, pClosestSmallerPresentDuration: ^u32, pClosestLargerPresentDuration: ^u32) -> HRESULT, +} +OVERLAY_SUPPORT_FLAG :: enum u32 { // TODO: convert to bit_set + DIRECT = 0x1, + SCALING = 0x2, +} + + +IOutput3_UUID :: "8A6BB301-7E7E-41F4-A8E0-5B32F7F99B18" +IOutput3 :: struct #raw_union { + #subtype idxgioutput2: IOutput2, + using idxgioutput3_vtable: ^IOutput3_VTable, +} +IOutput3_VTable :: struct { + using idxgioutput2_vtable: IOutput2_VTable, + CheckOverlaySupport: proc "stdcall" (this: ^IOutput3, EnumFormat: FORMAT, pConcernedDevice: ^IUnknown, pFlags: ^u32) -> HRESULT, +} +SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG :: enum u32 { // TODO: convert to bit_set + PRESENT = 0x1, + OVERLAY_PRESENT = 0x2, +} + + +ISwapChain3_UUID :: "94D99BDB-F1F8-4AB0-B236-7DA0170EDAB1" +ISwapChain3 :: struct #raw_union { + #subtype idxgiswapchain2: ISwapChain2, + using idxgiswapchain3_vtable: ^ISwapChain3_VTable, +} +ISwapChain3_VTable :: struct { + using idxgiswapchain2_vtable: ISwapChain2_VTable, + GetCurrentBackBufferIndex: proc "stdcall" (this: ^ISwapChain3) -> u32, + CheckColorSpaceSupport: proc "stdcall" (this: ^ISwapChain3, ColorSpace: COLOR_SPACE_TYPE, pColorSpaceSupport: ^u32) -> HRESULT, + SetColorSpace1: proc "stdcall" (this: ^ISwapChain3, ColorSpace: COLOR_SPACE_TYPE) -> HRESULT, + ResizeBuffers1: proc "stdcall" (this: ^ISwapChain3, BufferCount: u32, Width: u32, Height: u32, Format: FORMAT, SwapChainFlags: u32, pCreationNodeMask: ^u32, ppPresentQueue: ^^IUnknown) -> HRESULT, +} +OVERLAY_COLOR_SPACE_SUPPORT_FLAG :: enum u32 { // TODO: convert to bit_set + PRESENT = 0x1, +} + + +IOutput4_UUID :: "DC7DCA35-2196-414D-9F53-617884032A60" +IOutput4 :: struct #raw_union { + #subtype idxgioutput3: IOutput3, + using idxgioutput4_vtable: ^IOutput4_VTable, +} +IOutput4_VTable :: struct { + using idxgioutput3_vtable: IOutput3_VTable, + CheckOverlayColorSpaceSupport: proc "stdcall" (this: ^IOutput4, Format: FORMAT, ColorSpace: COLOR_SPACE_TYPE, pConcernedDevice: ^IUnknown, pFlags: ^u32) -> HRESULT, +} + +IFactory4_UUID :: "1BC6EA02-EF36-464F-BF0C-21CA39E5168A" +IFactory4 :: struct #raw_union { + #subtype idxgifactory3: IFactory3, + using idxgifactory4_vtable: ^IFactory4_VTable, +} +IFactory4_VTable :: struct { + using idxgifactory3_vtable: IFactory3_VTable, + EnumAdapterByLuid: proc "stdcall" (this: ^IFactory4, AdapterLuid: LUID, riid: ^IID, ppvAdapter: ^rawptr) -> HRESULT, + EnumWarpAdapter: proc "stdcall" (this: ^IFactory4, riid: ^IID, ppvAdapter: ^rawptr) -> HRESULT, +} +MEMORY_SEGMENT_GROUP :: enum i32 { + LOCAL = 0, + NON_LOCAL = 1, +} + +QUERY_VIDEO_MEMORY_INFO :: struct { + Budget: u64, + CurrentUsage: u64, + AvailableForReservation: u64, + CurrentReservation: u64, +} + + +IAdapter3_UUID :: "645967A4-1392-4310-A798-8053CE3E93FD" +IAdapter3 :: struct #raw_union { + #subtype idxgiadapter2: IAdapter2, + using idxgiadapter3_vtable: ^IAdapter3_VTable, +} +IAdapter3_VTable :: struct { + using idxgiadapter2_vtable: IAdapter2_VTable, + RegisterHardwareContentProtectionTeardownStatusEvent: proc "stdcall" (this: ^IAdapter3, hEvent: HANDLE, pdwCookie: ^u32) -> HRESULT, + UnregisterHardwareContentProtectionTeardownStatus: proc "stdcall" (this: ^IAdapter3, dwCookie: u32), + QueryVideoMemoryInfo: proc "stdcall" (this: ^IAdapter3, NodeIndex: u32, MemorySegmentGroup: MEMORY_SEGMENT_GROUP, pVideoMemoryInfo: ^QUERY_VIDEO_MEMORY_INFO) -> HRESULT, + SetVideoMemoryReservation: proc "stdcall" (this: ^IAdapter3, NodeIndex: u32, MemorySegmentGroup: MEMORY_SEGMENT_GROUP, Reservation: u64) -> HRESULT, + RegisterVideoMemoryBudgetChangeNotificationEvent: proc "stdcall" (this: ^IAdapter3, hEvent: HANDLE, pdwCookie: ^u32) -> HRESULT, + UnregisterVideoMemoryBudgetChangeNotification: proc "stdcall" (this: ^IAdapter3, dwCookie: u32), +} \ No newline at end of file