From a5f8c3f692ff802104b81416513396981409c2f3 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 23 Oct 2022 13:17:37 +0100 Subject: [PATCH] Update many `enum`s to `bit_set`s for D3D11 --- vendor/directx/d3d11/d3d11.odin | 312 ++++++++++++++++++-------------- 1 file changed, 177 insertions(+), 135 deletions(-) diff --git a/vendor/directx/d3d11/d3d11.odin b/vendor/directx/d3d11/d3d11.odin index a41ce1190..42a860c4b 100644 --- a/vendor/directx/d3d11/d3d11.odin +++ b/vendor/directx/d3d11/d3d11.odin @@ -30,7 +30,7 @@ foreign d3d11 { DriverType: DRIVER_TYPE, Software: HMODULE, Flags: CREATE_DEVICE_FLAGS, - pFeatureLevels: ^FEATURE_LEVEL, + pFeatureLevels: [^]FEATURE_LEVEL, FeatureLevels: u32, SDKVersion: u32, ppDevice: ^^IDevice, @@ -41,8 +41,8 @@ foreign d3d11 { pAdapter: ^dxgi.IAdapter, DriverType: DRIVER_TYPE, Software: HMODULE, - Flags: u32, - pFeatureLevels: ^FEATURE_LEVEL, + Flags: CREATE_DEVICE_FLAGS, + pFeatureLevels: [^]FEATURE_LEVEL, FeatureLevels: u32, SDKVersion: u32, pSwapChainDesc: ^dxgi.SWAP_CHAIN_DESC, @@ -539,25 +539,37 @@ ANISOTROPIC_FILTERING_BIT :: 0x40 SDK_VERSION :: 7 RETURN_PARAMETER_INDEX :: -1 -COMPONENT_MASK :: enum u32 { // TODO: make bit_set +COMPONENT_MASK :: distinct bit_set[COMPONENT_MASK_ELEMENT; u32] +COMPONENT_MASK_ELEMENT :: enum u32 { 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, +SHADER_REQUIRES_FLAGS :: distinct bit_set[SHADER_REQUIRES_FLAG; u64] +SHADER_REQUIRES_FLAG :: enum u64 { + DOUBLES = 0, + EARLY_DEPTH_STENCIL = 1, + UAVS_AT_EVERY_STAGE = 2, + _64_UAVS = 3, + MINIMUM_PRECISION = 4, + _11_1_DOUBLE_EXTENSIONS = 5, + _11_1_SHADER_EXTENSIONS = 6, + LEVEL_9_COMPARISON_FILTERING = 7, + TILED_RESOURCES = 8, } +SHADER_REQUIRES_DOUBLES :: SHADER_REQUIRES_FLAGS{.DOUBLES} +SHADER_REQUIRES_EARLY_DEPTH_STENCIL :: SHADER_REQUIRES_FLAGS{.EARLY_DEPTH_STENCIL} +SHADER_REQUIRES_UAVS_AT_EVERY_STAGE :: SHADER_REQUIRES_FLAGS{.UAVS_AT_EVERY_STAGE} +SHADER_REQUIRES_64_UAVS :: SHADER_REQUIRES_FLAGS{._64_UAVS} +SHADER_REQUIRES_MINIMUM_PRECISION :: SHADER_REQUIRES_FLAGS{.MINIMUM_PRECISION} +SHADER_REQUIRES_11_1_DOUBLE_EXTENSIONS :: SHADER_REQUIRES_FLAGS{._11_1_DOUBLE_EXTENSIONS} +SHADER_REQUIRES_11_1_SHADER_EXTENSIONS :: SHADER_REQUIRES_FLAGS{._11_1_SHADER_EXTENSIONS} +SHADER_REQUIRES_LEVEL_9_COMPARISON_FILTERING :: SHADER_REQUIRES_FLAGS{.LEVEL_9_COMPARISON_FILTERING} +SHADER_REQUIRES_TILED_RESOURCES :: SHADER_REQUIRES_FLAGS{.TILED_RESOURCES} + DRIVER_TYPE :: enum i32 { UNKNOWN = 0, HARDWARE = 1, @@ -708,11 +720,12 @@ SHADER_VARIABLE_CLASS :: enum i32 { INTERFACE_POINTER = 7, } -SHADER_VARIABLE_FLAGS :: enum u32 { // TODO: make bit_set - USERPACKED = 0x1, - USED = 0x2, - INTERFACE_POINTER = 0x4, - INTERFACE_PARAMETER = 0x8, +SHADER_VARIABLE_FLAGS :: distinct bit_set[SHADER_VARIABLE_FLAG; u32] +SHADER_VARIABLE_FLAG :: enum u32 { + USERPACKED = 0, + USED = 1, + INTERFACE_POINTER = 2, + INTERFACE_PARAMETER = 3, } SHADER_VARIABLE_TYPE :: enum i32 { @@ -776,14 +789,21 @@ SHADER_VARIABLE_TYPE :: enum i32 { MIN16UINT = 57, } -SHADER_INPUT_FLAGS :: enum u32 { // TODO: make bit_set - USERPACKED = 0x1, - COMPARISON_SAMPLER = 0x2, - TEXTURE_COMPONENT_0 = 0x4, - TEXTURE_COMPONENT_1 = 0x8, +SHADER_INPUT_FLAGS :: distinct bit_set[SHADER_INPUT_FLAG; u32] +SHADER_INPUT_FLAG :: enum u32 { + USERPACKED = 0, + COMPARISON_SAMPLER = 1, + TEXTURE_COMPONENT_0 = 2, + TEXTURE_COMPONENT_1 = 3, TEXTURE_COMPONENTS = 0xc, - UNUSED = 0x10, + UNUSED = 4, } +SHADER_INPUT_FLAG_USERPACKED :: SHADER_INPUT_FLAGS{.USERPACKED} +SHADER_INPUT_FLAG_COMPARISON_SAMPLER :: SHADER_INPUT_FLAGS{.COMPARISON_SAMPLER} +SHADER_INPUT_FLAG_TEXTURE_COMPONENT_0 :: SHADER_INPUT_FLAGS{.TEXTURE_COMPONENT_0} +SHADER_INPUT_FLAG_TEXTURE_COMPONENT_1 :: SHADER_INPUT_FLAGS{.TEXTURE_COMPONENT_1} +SHADER_INPUT_FLAG_TEXTURE_COMPONENTS :: SHADER_INPUT_FLAGS{.TEXTURE_COMPONENT_0, .TEXTURE_COMPONENT_1} +SHADER_INPUT_FLAG_UNUSED :: SHADER_INPUT_FLAGS{.UNUSED} SHADER_INPUT_TYPE :: enum i32 { CBUFFER = 0, @@ -802,8 +822,9 @@ SHADER_INPUT_TYPE :: enum i32 { UAV_FEEDBACKTEXTURE = 13, } -SHADER_CBUFFER_FLAGS :: enum u32 { // TODO: make bit_set - USERPACKED = 0x1, +SHADER_CBUFFER_FLAGS :: distinct bit_set[SHADER_CBUFFER_FLAG; u32] +SHADER_CBUFFER_FLAG :: enum u32 { + USERPACKED = 0, } CBUFFER_TYPE :: enum i32 { @@ -906,10 +927,10 @@ INTERPOLATION_MODE :: enum i32 { LINEAR_NOPERSPECTIVE_SAMPLE = 7, } -PARAMETER_FLAGS :: enum u32 { // TODO: make bit_set - NONE = 0x0, - IN = 0x1, - OUT = 0x2, +PARAMETER_FLAGS :: distinct bit_set[PARAMETER_FLAG; u32] +PARAMETER_FLAG :: enum u32 { + IN = 0, + OUT = 1, } CDEFAULT :: struct { @@ -1022,43 +1043,46 @@ USAGE :: enum i32 { 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, +BIND_FLAGS :: distinct bit_set[BIND_FLAG; u32] +BIND_FLAG :: enum u32 { + VERTEX_BUFFER = 0, + INDEX_BUFFER = 1, + CONSTANT_BUFFER = 2, + SHADER_RESOURCE = 3, + STREAM_OUTPUT = 4, + RENDER_TARGET = 5, + DEPTH_STENCIL = 6, + UNORDERED_ACCESS = 7, + DECODER = 9, + VIDEO_ENCODER = 10, } -CPU_ACCESS_FLAG :: enum u32 { // TODO: make bit_set - WRITE = 0x10000, - READ = 0x20000, +CPU_ACCESS_FLAGS :: distinct bit_set[CPU_ACCESS_FLAG; u32] +CPU_ACCESS_FLAG :: enum u32 { + WRITE = 16, + READ = 17, } -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, +RESOURCE_MISC_FLAGS :: distinct bit_set[RESOURCE_MISC_FLAG; u32] +RESOURCE_MISC_FLAG :: enum u32 { + GENERATE_MIPS = 0, + SHARED = 1, + TEXTURECUBE = 2, + DRAWINDIRECT_ARGS = 4, + BUFFER_ALLOW_RAW_VIEWS = 5, + BUFFER_STRUCTURED = 6, + RESOURCE_CLAMP = 7, + SHARED_KEYEDMUTEX = 8, + GDI_COMPATIBLE = 9, + SHARED_NTHANDLE = 11, + RESTRICTED_CONTENT = 12, + RESTRICT_SHARED_RESOURCE = 13, + RESTRICT_SHARED_RESOURCE_DRIVER = 14, + GUARDED = 15, + TILE_POOL = 17, + TILED = 18, + HW_PROTECTED = 19, } MAP :: enum i32 { @@ -1069,17 +1093,20 @@ MAP :: enum i32 { WRITE_NO_OVERWRITE = 5, } -MAP_FLAG :: enum u32 { // TODO: make bit_set - DO_NOT_WAIT = 0x100000, +MAP_FLAGS :: distinct bit_set[MAP_FLAG; u32] +MAP_FLAG :: enum u32 { + DO_NOT_WAIT = 20, } -RAISE_FLAG :: enum u32 { // TODO: make bit_set - DRIVER_INTERNAL_ERROR = 0x1, +RAISE_FLAGS :: distinct bit_set[RAISE_FLAG; u32] +RAISE_FLAG :: enum u32 { + DRIVER_INTERNAL_ERROR = 0, } -CLEAR_FLAG :: enum u32 { // TODO: make bit_set - DEPTH = 0x1, - STENCIL = 0x2, +CLEAR_FLAGS :: distinct bit_set[CLEAR_FLAG; u32] +CLEAR_FLAG :: enum u32 { + DEPTH = 0, + STENCIL = 1, } @@ -1206,7 +1233,15 @@ BLEND_OP :: enum i32 { MAX = 5, } -COLOR_WRITE_ENABLE :: enum i32 { // TODO: make bit_set +COLOR_WRITE_ENABLE_MASK :: distinct bit_set[COLOR_WRITE_ENABLE; u32] + +COLOR_WRITE_ENABLE_RED :: COLOR_WRITE_ENABLE_MASK{.RED} +COLOR_WRITE_ENABLE_GREEN :: COLOR_WRITE_ENABLE_MASK{.GREEN} +COLOR_WRITE_ENABLE_BLUE :: COLOR_WRITE_ENABLE_MASK{.BLUE} +COLOR_WRITE_ENABLE_ALPHA :: COLOR_WRITE_ENABLE_MASK{.ALPHA} +COLOR_WRITE_ENABLE_ALL :: COLOR_WRITE_ENABLE_MASK{.RED, .GREEN, .BLUE, .ALPHA} + +COLOR_WRITE_ENABLE :: enum i32 { RED = 1, GREEN = 2, BLUE = 4, @@ -1308,9 +1343,9 @@ IResource_VTable :: struct { BUFFER_DESC :: struct { ByteWidth: u32, Usage: USAGE, - BindFlags: BIND_FLAG, - CPUAccessFlags: CPU_ACCESS_FLAG, - MiscFlags: RESOURCE_MISC_FLAG, + BindFlags: BIND_FLAGS, + CPUAccessFlags: CPU_ACCESS_FLAGS, + MiscFlags: RESOURCE_MISC_FLAGS, StructureByteStride: u32, } @@ -1337,9 +1372,9 @@ TEXTURE1D_DESC :: struct { ArraySize: u32, Format: dxgi.FORMAT, Usage: USAGE, - BindFlags: BIND_FLAG, - CPUAccessFlags: CPU_ACCESS_FLAG, - MiscFlags: RESOURCE_MISC_FLAG, + BindFlags: BIND_FLAGS, + CPUAccessFlags: CPU_ACCESS_FLAGS, + MiscFlags: RESOURCE_MISC_FLAGS, } CTEXTURE1D_DESC :: struct { @@ -1367,9 +1402,9 @@ TEXTURE2D_DESC :: struct { Format: dxgi.FORMAT, SampleDesc: dxgi.SAMPLE_DESC, Usage: USAGE, - BindFlags: BIND_FLAG, - CPUAccessFlags: CPU_ACCESS_FLAG, - MiscFlags: RESOURCE_MISC_FLAG, + BindFlags: BIND_FLAGS, + CPUAccessFlags: CPU_ACCESS_FLAGS, + MiscFlags: RESOURCE_MISC_FLAGS, } CTEXTURE2D_DESC :: struct { @@ -1396,9 +1431,9 @@ TEXTURE3D_DESC :: struct { MipLevels: u32, Format: dxgi.FORMAT, Usage: USAGE, - BindFlags: BIND_FLAG, - CPUAccessFlags: CPU_ACCESS_FLAG, - MiscFlags: RESOURCE_MISC_FLAG, + BindFlags: BIND_FLAGS, + CPUAccessFlags: CPU_ACCESS_FLAGS, + MiscFlags: RESOURCE_MISC_FLAGS, } CTEXTURE3D_DESC :: struct { @@ -1451,14 +1486,15 @@ BUFFER_SRV :: struct { }, } -BUFFEREX_SRV_FLAG :: enum u32 { // TODO: make bit_set - RAW = 0x1, +BUFFEREX_SRV_FLAGS :: distinct bit_set[BUFFEREX_SRV_FLAG; u32] +BUFFEREX_SRV_FLAG :: enum u32 { + RAW = 0, } BUFFEREX_SRV :: struct { FirstElement: u32, NumElements: u32, - Flags: u32, + Flags: BUFFEREX_SRV_FLAGS, } TEX1D_SRV :: struct { @@ -1657,15 +1693,16 @@ TEX2DMS_ARRAY_DSV :: struct { ArraySize: u32, } -DSV_FLAG :: enum u32 { // TODO: make bit_set - DEPTH = 0x1, - STENCIL = 0x2, +DSV_FLAGS :: distinct bit_set[DSV_FLAG; u32] +DSV_FLAG :: enum u32 { + DEPTH = 0, + STENCIL = 1, } DEPTH_STENCIL_VIEW_DESC :: struct { Format: dxgi.FORMAT, ViewDimension: DSV_DIMENSION, - Flags: u32, + Flags: DSV_FLAGS, using _: struct #raw_union { Texture1D: TEX1D_DSV, Texture1DArray: TEX1D_ARRAY_DSV, @@ -1693,16 +1730,17 @@ IDepthStencilView_VTable :: struct { } -BUFFER_UAV_FLAG :: enum u32 { // TODO: make bit_set - RAW = 0x1, - APPEND = 0x2, - COUNTER = 0x4, +BUFFER_UAV_FLAGS :: distinct bit_set[BUFFER_UAV_FLAG; u32] +BUFFER_UAV_FLAG :: enum u32 { + RAW = 0, + APPEND = 1, + COUNTER = 2, } BUFFER_UAV :: struct { FirstElement: u32, NumElements: u32, - Flags: u32, + Flags: BUFFER_UAV_FLAGS, } TEX1D_UAV :: struct { @@ -1961,8 +1999,9 @@ IAsynchronous_VTable :: struct { } -ASYNC_GETDATA_FLAG :: enum u32 { // TODO: make bit_set - DONOTFLUSH = 0x1, +ASYNC_GETDATA_FLAGS :: distinct bit_set[ASYNC_GETDATA_FLAG; u32] +ASYNC_GETDATA_FLAG :: enum u32 { + DONOTFLUSH = 0, } QUERY :: enum i32 { @@ -1984,13 +2023,14 @@ QUERY :: enum i32 { SO_OVERFLOW_PREDICATE_STREAM3 = 15, } -QUERY_MISC_FLAG :: enum u32 { // TODO: make bit_set - QUERY_MISC_PREDICATEHINT = 0x1, +QUERY_MISC_FLAGS :: distinct bit_set[QUERY_MISC_FLAG; u32] +QUERY_MISC_FLAG :: enum u32 { + PREDICATEHINT = 0, } QUERY_DESC :: struct { Query: QUERY, - MiscFlags: RESOURCE_MISC_FLAG, + MiscFlags: QUERY_MISC_FLAGS, } CQUERY_DESC :: struct { @@ -2054,7 +2094,7 @@ COUNTER_TYPE :: enum i32 { COUNTER_DESC :: struct { Counter: COUNTER, - MiscFlags: RESOURCE_MISC_FLAG, + MiscFlags: RESOURCE_MISC_FLAGS, } CCOUNTER_DESC :: struct { @@ -2150,21 +2190,21 @@ FEATURE :: enum i32 { FORMAT_SUPPORT = 2, FORMAT_SUPPORT2 = 3, D3D10_X_HARDWARE_OPTIONS = 4, - OPTIONS = 5, + OPTIONS = 5, ARCHITECTURE_INFO = 6, D3D9_OPTIONS = 7, SHADER_MIN_PRECISION_SUPPORT = 8, D3D9_SHADOW_SUPPORT = 9, - OPTIONS1 = 10, + OPTIONS1 = 10, D3D9_SIMPLE_INSTANCING_SUPPORT = 11, MARKER_SUPPORT = 12, D3D9_OPTIONS1 = 13, - OPTIONS2 = 14, - OPTIONS3 = 15, + OPTIONS2 = 14, + OPTIONS3 = 15, GPU_VIRTUAL_ADDRESS_SUPPORT = 16, - OPTIONS4 = 17, + OPTIONS4 = 17, SHADER_CACHE = 18, - OPTIONS5 = 19, + OPTIONS5 = 19, } FEATURE_DATA_THREADING :: struct { @@ -2285,14 +2325,14 @@ FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT :: struct { MaxGPUVirtualAddressBitsPerProcess: u32, } -SHADER_CACHE_SUPPORT_FLAGS :: enum u32 { // TODO: make bit_set - NONE = 0x0, - AUTOMATIC_INPROC_CACHE = 0x1, - AUTOMATIC_DISK_CACHE = 0x2, +SHADER_CACHE_SUPPORT_FLAGS :: distinct bit_set[SHADER_CACHE_SUPPORT_FLAG; u32] +SHADER_CACHE_SUPPORT_FLAG :: enum u32 { + AUTOMATIC_INPROC_CACHE = 0, + AUTOMATIC_DISK_CACHE = 1, } FEATURE_DATA_SHADER_CACHE :: struct { - SupportFlags: u32, + SupportFlags: SHADER_CACHE_SUPPORT_FLAGS, } SHARED_RESOURCE_TIER :: enum i32 { @@ -2322,7 +2362,7 @@ IDeviceContext_VTable :: struct { 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, + Map: proc "stdcall" (this: ^IDeviceContext, pResource: ^IResource, Subresource: u32, MapType: MAP, MapFlags: MAP_FLAGS, 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), @@ -2343,7 +2383,7 @@ IDeviceContext_VTable :: struct { 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), + OMSetBlendState: proc "stdcall" (this: ^IDeviceContext, pBlendState: ^IBlendState, BlendFactor: ^[4]f32, SampleMask: COLOR_WRITE_ENABLE_MASK), 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), @@ -2399,7 +2439,7 @@ IDeviceContext_VTable :: struct { 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), + OMGetBlendState: proc "stdcall" (this: ^IDeviceContext, ppBlendState: ^^IBlendState, BlendFactor: ^[4]f32, pSampleMask: ^COLOR_WRITE_ENABLE_MASK), 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), @@ -3315,13 +3355,13 @@ IDevice_VTable :: struct { 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, + SetExceptionMode: proc "stdcall" (this: ^IDevice, RaiseFlags: RAISE_FLAGS) -> HRESULT, GetExceptionMode: proc "stdcall" (this: ^IDevice) -> u32, } CREATE_DEVICE_FLAGS :: distinct bit_set[CREATE_DEVICE_FLAG; u32] -CREATE_DEVICE_FLAG :: enum u32 { // TODO: make bit_set +CREATE_DEVICE_FLAG :: enum u32 { SINGLETHREADED = 0, DEBUG = 1, SWITCH_TO_REF = 2, @@ -3367,14 +3407,14 @@ SHADER_BUFFER_DESC :: struct { Type: CBUFFER_TYPE, Variables: u32, Size: u32, - uFlags: u32, + uFlags: SHADER_CBUFFER_FLAGS, } SHADER_VARIABLE_DESC :: struct { Name: cstring, StartOffset: u32, Size: u32, - uFlags: u32, + uFlags: SHADER_VARIABLE_FLAGS, DefaultValue: rawptr, StartTexture: u32, TextureSize: u32, @@ -3443,7 +3483,7 @@ SHADER_INPUT_BIND_DESC :: struct { BindPoint: u32, BindCount: u32, - uFlags: u32, + uFlags: SHADER_INPUT_FLAGS, ReturnType: RESOURCE_RETURN_TYPE, Dimension: SRV_DIMENSION, NumSamples: u32, @@ -3485,7 +3525,7 @@ FUNCTION_DESC :: struct { ConversionInstructionCount: u32, BitwiseInstructionCount: u32, MinFeatureLevel: FEATURE_LEVEL, - RequiredFeatureFlags: u64, + RequiredFeatureFlags: SHADER_REQUIRES_FLAGS, Name: cstring, FunctionParameterCount: i32, @@ -3571,7 +3611,7 @@ IShaderReflection_VTable :: struct { 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, + GetRequiresFlags: proc "stdcall" (this: ^IShaderReflection) -> SHADER_REQUIRES_FLAGS, } @@ -3634,22 +3674,24 @@ IDebug :: struct #raw_union { using id3d11debug_vtable: ^IDebug_VTable, } -RLDO_FLAGS :: enum u32 { // TODO: make bit_set - SUMMARY = 0x1, - DETAIL = 0x2, - IGNORE_INTERNAL = 0x4, +RLDO_FLAGS :: distinct bit_set[RLDO_FLAG; u32] +RLDO_FLAG :: enum u32 { + SUMMARY = 0, + DETAIL = 1, + IGNORE_INTERNAL = 2, } -DEBUG_FEATURE :: enum u32 { // TODO: make bit_set - FLUSH_PER_RENDER_OP = 0x1, - FINISH_PER_RENDER_OP = 0x2, - FEATURE_PRESENT_PER_RENDER_OP = 0x4, +DEBUG_FEATURES :: distinct bit_set[DEBUG_FEATURE; u32] +DEBUG_FEATURE :: enum u32 { + FLUSH_PER_RENDER_OP = 0, + FINISH_PER_RENDER_OP = 1, + FEATURE_PRESENT_PER_RENDER_OP = 2, } IDebug_VTable :: struct { using iunkown_vtable: IUnknown_VTable, - SetFeatureMask: proc "stdcall" (this: ^IDebug, mask: DEBUG_FEATURE) -> HRESULT, - GetFeatureMask: proc "stdcall" (this: ^IDebug) -> DEBUG_FEATURE, + SetFeatureMask: proc "stdcall" (this: ^IDebug, mask: DEBUG_FEATURES) -> HRESULT, + GetFeatureMask: proc "stdcall" (this: ^IDebug) -> DEBUG_FEATURES, SetPresentPerRenderOpDelay: proc "stdcall" (this: ^IDebug, Milliseconds: u32) -> HRESULT, GetPresentPerRenderOpDelay: proc "stdcall" (this: ^IDebug) -> u32, SetSwapChain: proc "stdcall" (this: ^IDebug, pSwapChain: ^dxgi.ISwapChain) -> HRESULT, @@ -3667,7 +3709,7 @@ IInfoQueue :: struct #raw_union { using id3d11infoqueue_vtable: ^IInfoQueue_VTable, } -MESSAGE_SEVERITY :: enum u32 { // TODO: make bit_set +MESSAGE_SEVERITY :: enum u32 { CORRUPTION = 0, ERROR, WARNING, @@ -3675,7 +3717,7 @@ MESSAGE_SEVERITY :: enum u32 { // TODO: make bit_set MESSAGE, // Not supported until D3D 11.1 } -MESSAGE_CATEGORY :: enum u32 { // TODO: make bit_set +MESSAGE_CATEGORY :: enum u32 { APPLICATION_DEFINED = 0, MISCELLANEOUS, INITIALIZATION, @@ -3750,7 +3792,7 @@ IInfoQueue_VTable :: struct { SetMuteDebugOutput: proc "stdcall" (this: ^IInfoQueue, bMute: BOOL), } -MESSAGE_ID :: enum u32 { // TODO: make bit_set +MESSAGE_ID :: enum u32 { UNKNOWN = 0, DEVICE_IASETVERTEXBUFFERS_HAZARD, DEVICE_IASETINDEXBUFFER_HAZARD,