diff --git a/src/Generator/Program.cs b/src/Generator/Program.cs index f07a502..1a575eb 100644 --- a/src/Generator/Program.cs +++ b/src/Generator/Program.cs @@ -3,6 +3,7 @@ using System.Text; using Newtonsoft.Json; +using Newtonsoft.Json.Linq; namespace Generator; @@ -33,6 +34,8 @@ public static class Program {"IntPtr", "nint" }, {"UIntPtr", "nuint" }, + {"Char", "ushort" }, + { "Foundation.BOOL", "Bool32" }, { "Foundation.HRESULT", "HResult" }, { "Foundation.LUID", "Luid" }, @@ -49,7 +52,12 @@ public static class Program private static readonly Dictionary s_knownTypesPrefixes = new() { { "DXGI_COLOR_SPACE_TYPE", "DXGI_COLOR_SPACE" }, + { "DXGI_GRAPHICS_PREEMPTION_GRANULARITY", "DXGI_GRAPHICS_PREEMPTION" }, { "DXGI_COMPUTE_PREEMPTION_GRANULARITY", "DXGI_COMPUTE_PREEMPTION" }, + { "DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS", "DXGI_MULTIPLANE_OVERLAY" }, + { "DXGI_RECLAIM_RESOURCE_RESULTS", "DXGI_RECLAIM_RESOURCE_RESULT" }, + { "DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAGS", "DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAG" }, + { "DXGI_DEBUG_RLO_FLAGS", "DXGI_DEBUG_RLO" }, }; private static readonly Dictionary s_knownEnumValueNames = new() @@ -64,6 +72,26 @@ public static class Program private static readonly HashSet s_preserveCaps = new(StringComparer.OrdinalIgnoreCase) { + "HW", + "YUV", + "GDI", + }; + + private static readonly Dictionary s_typesNameRemap = new() + { + { "DXGI_ADAPTER_FLAG", "AdapterFlags" }, + { "DXGI_ADAPTER_FLAG3", "AdapterFlags3" }, + { "DXGI_SWAP_CHAIN_FLAG", "SwapChainFlags" } + }; + + private static readonly Dictionary s_structFieldTypeRemap = new() + { + { "DXGI_ADAPTER_DESC1::Flags", "DXGI_ADAPTER_FLAG" }, + { "DXGI_ADAPTER_DESC3::Flags", "DXGI_ADAPTER_FLAG3" }, + { "DXGI_SWAP_CHAIN_DESC::BufferUsage", "Usage" }, + { "DXGI_SWAP_CHAIN_DESC::Flags", "DXGI_SWAP_CHAIN_FLAG" }, + { "DXGI_SWAP_CHAIN_DESC1::BufferUsage", "Usage" }, + { "DXGI_SWAP_CHAIN_DESC1::Flags", "DXGI_SWAP_CHAIN_FLAG" }, }; public static int Main(string[] args) @@ -109,7 +137,7 @@ public static class Program string fileName = string.Empty; for (int i = 1; i < splits.Length - 1; i++) { - if(string.IsNullOrEmpty(fileName) == false) + if (string.IsNullOrEmpty(fileName) == false) { fileName += "."; } @@ -220,6 +248,12 @@ public static class Program string fieldTypeName = GetTypeName(field.Type); //writer.WriteLine($"/// {field.Name}"); + string remapFieldLookUp = $"{structType.Name}::{field.Name}"; + if (s_structFieldTypeRemap.TryGetValue(remapFieldLookUp, out string? remapType)) + { + fieldTypeName = GetTypeName(remapType); + } + if (fieldTypeName == "Array") { bool canUseFixed = false; @@ -272,7 +306,7 @@ public static class Program { string unsafePrefix = string.Empty; fieldTypeName = NormalizeTypeName(writer.Api, fieldTypeName); - if(fieldTypeName.EndsWith("*")) + if (fieldTypeName.EndsWith("*")) { unsafePrefix += "unsafe "; } @@ -311,6 +345,11 @@ public static class Program prefix = knowPrefix!; } + if (s_typesNameRemap.TryGetValue(typeName, out string? remapName)) + { + return remapName!; + } + string[] parts = typeName.Split(new[] { '_' }, StringSplitOptions.RemoveEmptyEntries); var sb = new StringBuilder(); @@ -331,6 +370,18 @@ public static class Program { sb.Append("Description"); } + else if (part.Equals("DESC1", StringComparison.OrdinalIgnoreCase)) + { + sb.Append("Description1"); + } + else if (part.Equals("DESC2", StringComparison.OrdinalIgnoreCase)) + { + sb.Append("Description2"); + } + else if (part.Equals("DESC3", StringComparison.OrdinalIgnoreCase)) + { + sb.Append("Description3"); + } else { sb.Append(char.ToUpper(part[0])); @@ -449,10 +500,17 @@ public static class Program } else { - sb.Append(char.ToUpper(part[0])); - for (int i = 1; i < part.Length; i++) + if (part.Equals("NONPREROTATED", StringComparison.OrdinalIgnoreCase)) { - sb.Append(char.ToLower(part[i])); + sb.Append("NonPrerotated"); + } + else + { + sb.Append(char.ToUpper(part[0])); + for (int i = 1; i < part.Length; i++) + { + sb.Append(char.ToLower(part[i])); + } } } } @@ -507,9 +565,14 @@ public static class Program private static string GetTypeName(string name) { - if (s_csNameMappings.TryGetValue(name, out string? mappedName)) + string? mappedName; + if (s_csNameMappings.TryGetValue(name, out mappedName)) { - return mappedName; + return mappedName!; + } + else if (s_typesNameRemap.TryGetValue(name, out mappedName)) + { + return mappedName!; } return name; diff --git a/src/Vortice.Win32/Generated/Graphics/Dxgi.cs b/src/Vortice.Win32/Generated/Graphics/Dxgi.cs index 448a0fd..a6e4266 100644 --- a/src/Vortice.Win32/Generated/Graphics/Dxgi.cs +++ b/src/Vortice.Win32/Generated/Graphics/Dxgi.cs @@ -132,14 +132,14 @@ public enum SwapEffect : int } /// DXGI_SWAP_CHAIN_FLAG -public enum SwapChainFlag : int +public enum SwapChainFlags : int { /// DXGI_SWAP_CHAIN_FLAG_NONPREROTATED - Nonprerotated = 1, + NonPrerotated = 1, /// DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH AllowModeSwitch = 2, /// DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE - GdiCompatible = 4, + GDICompatible = 4, /// DXGI_SWAP_CHAIN_FLAG_RESTRICTED_CONTENT RestrictedContent = 8, /// DXGI_SWAP_CHAIN_FLAG_RESTRICT_SHARED_RESOURCE_DRIVER @@ -153,9 +153,9 @@ public enum SwapChainFlag : int /// DXGI_SWAP_CHAIN_FLAG_FULLSCREEN_VIDEO FullscreenVideo = 256, /// DXGI_SWAP_CHAIN_FLAG_YUV_VIDEO - YuvVideo = 512, + YUVVideo = 512, /// DXGI_SWAP_CHAIN_FLAG_HW_PROTECTED - HwProtected = 1024, + HWProtected = 1024, /// DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING AllowTearing = 2048, /// DXGI_SWAP_CHAIN_FLAG_RESTRICTED_TO_ALL_HOLOGRAPHIC_DISPLAYS @@ -164,7 +164,7 @@ public enum SwapChainFlag : int /// DXGI_ADAPTER_FLAG [Flags] -public enum AdapterFlag : uint +public enum AdapterFlags : uint { /// DXGI_ADAPTER_FLAG_NONE None = 0, @@ -211,15 +211,15 @@ public enum Scaling : int public enum GraphicsPreemptionGranularity : int { /// DXGI_GRAPHICS_PREEMPTION_DMA_BUFFER_BOUNDARY - DXGI_GRAPHICS_PREEMPTION_DMA_BUFFER_BOUNDARY = 0, + DmaBufferBoundary = 0, /// DXGI_GRAPHICS_PREEMPTION_PRIMITIVE_BOUNDARY - DXGI_GRAPHICS_PREEMPTION_PRIMITIVE_BOUNDARY = 1, + PrimitiveBoundary = 1, /// DXGI_GRAPHICS_PREEMPTION_TRIANGLE_BOUNDARY - DXGI_GRAPHICS_PREEMPTION_TRIANGLE_BOUNDARY = 2, + TriangleBoundary = 2, /// DXGI_GRAPHICS_PREEMPTION_PIXEL_BOUNDARY - DXGI_GRAPHICS_PREEMPTION_PIXEL_BOUNDARY = 3, + PixelBoundary = 3, /// DXGI_GRAPHICS_PREEMPTION_INSTRUCTION_BOUNDARY - DXGI_GRAPHICS_PREEMPTION_INSTRUCTION_BOUNDARY = 4, + InstructionBoundary = 4, } /// DXGI_COMPUTE_PREEMPTION_GRANULARITY @@ -241,11 +241,11 @@ public enum ComputePreemptionGranularity : int public enum MultiplaneOverlayYcbcrFlags : int { /// DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_NOMINAL_RANGE - DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_NOMINAL_RANGE = 1, + YcbcrFlagNominalRange = 1, /// DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_BT709 - DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_BT709 = 2, + YcbcrFlagBt709 = 2, /// DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_xvYCC - DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_xvYCC = 4, + YcbcrFlagXvycc = 4, } /// DXGI_FRAME_PRESENTATION_MODE @@ -324,11 +324,11 @@ public enum OfferResourceFlags : int public enum ReclaimResourceResults : int { /// DXGI_RECLAIM_RESOURCE_RESULT_OK - DXGI_RECLAIM_RESOURCE_RESULT_OK = 0, + Ok = 0, /// DXGI_RECLAIM_RESOURCE_RESULT_DISCARDED - DXGI_RECLAIM_RESOURCE_RESULT_DISCARDED = 1, + Discarded = 1, /// DXGI_RECLAIM_RESOURCE_RESULT_NOT_COMMITTED - DXGI_RECLAIM_RESOURCE_RESULT_NOT_COMMITTED = 2, + NotCommitted = 2, } /// DXGI_FEATURE @@ -340,7 +340,7 @@ public enum Feature : int /// DXGI_ADAPTER_FLAG3 [Flags] -public enum AdapterFlag3 : uint +public enum AdapterFlags3 : uint { /// DXGI_ADAPTER_FLAG3_NONE None = 0, @@ -363,11 +363,11 @@ public enum AdapterFlag3 : uint public enum HardwareCompositionSupportFlags : uint { /// DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAG_FULLSCREEN - DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAG_FULLSCREEN = 1, + Fullscreen = 1, /// DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAG_WINDOWED - DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAG_WINDOWED = 2, + Windowed = 2, /// DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAG_CURSOR_STRETCHED - DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAG_CURSOR_STRETCHED = 4, + CursorStretched = 4, } /// DXGI_GPU_PREFERENCE @@ -386,13 +386,13 @@ public enum GpuPreference : int public enum DebugRloFlags : uint { /// DXGI_DEBUG_RLO_SUMMARY - DXGI_DEBUG_RLO_SUMMARY = 1, + Summary = 1, /// DXGI_DEBUG_RLO_DETAIL - DXGI_DEBUG_RLO_DETAIL = 2, + Detail = 2, /// DXGI_DEBUG_RLO_IGNORE_INTERNAL - DXGI_DEBUG_RLO_IGNORE_INTERNAL = 4, + IgnoreInternal = 4, /// DXGI_DEBUG_RLO_ALL - DXGI_DEBUG_RLO_ALL = 7, + All = 7, } /// DXGI_INFO_QUEUE_MESSAGE_CATEGORY @@ -1136,7 +1136,7 @@ public partial struct MappedRect /// DXGI_ADAPTER_DESC public partial struct AdapterDescription { - public unsafe fixed Char Description[128]; + public unsafe fixed ushort Description[128]; public uint VendorId; public uint DeviceId; public uint SubSysId; @@ -1150,7 +1150,7 @@ public partial struct AdapterDescription /// DXGI_OUTPUT_DESC public partial struct OutputDescription { - public unsafe fixed Char DeviceName[32]; + public unsafe fixed ushort DeviceName[32]; public RawRect DesktopCoordinates; public Bool32 AttachedToDesktop; public Common.ModeRotation Rotation; @@ -1177,18 +1177,18 @@ public partial struct SwapChainDescription { public Common.ModeDescription BufferDesc; public Common.SampleDescription SampleDesc; - public uint BufferUsage; + public Usage BufferUsage; public uint BufferCount; public IntPtr OutputWindow; public Bool32 Windowed; public SwapEffect SwapEffect; - public uint Flags; + public SwapChainFlags Flags; } /// DXGI_ADAPTER_DESC1 -public partial struct AdapterDesc1 +public partial struct AdapterDescription1 { - public unsafe fixed Char Description[128]; + public unsafe fixed ushort Description[128]; public uint VendorId; public uint DeviceId; public uint SubSysId; @@ -1197,7 +1197,7 @@ public partial struct AdapterDesc1 public nuint DedicatedSystemMemory; public nuint SharedSystemMemory; public Luid AdapterLuid; - public uint Flags; + public AdapterFlags Flags; } /// DXGI_DISPLAY_COLOR_SPACE @@ -1253,7 +1253,7 @@ public partial struct OutduplFrameInfo } /// DXGI_MODE_DESC1 -public partial struct ModeDesc1 +public partial struct ModeDescription1 { public uint Width; public uint Height; @@ -1265,19 +1265,19 @@ public partial struct ModeDesc1 } /// DXGI_SWAP_CHAIN_DESC1 -public partial struct SwapChainDesc1 +public partial struct SwapChainDescription1 { public uint Width; public uint Height; public Common.Format Format; public Bool32 Stereo; public Common.SampleDescription SampleDesc; - public uint BufferUsage; + public Usage BufferUsage; public uint BufferCount; public Scaling Scaling; public SwapEffect SwapEffect; public Common.AlphaMode AlphaMode; - public uint Flags; + public SwapChainFlags Flags; } /// DXGI_SWAP_CHAIN_FULLSCREEN_DESC @@ -1299,9 +1299,9 @@ public partial struct PresentParameters } /// DXGI_ADAPTER_DESC2 -public partial struct AdapterDesc2 +public partial struct AdapterDescription2 { - public unsafe fixed Char Description[128]; + public unsafe fixed ushort Description[128]; public uint VendorId; public uint DeviceId; public uint SubSysId; @@ -1373,9 +1373,9 @@ public partial struct HdrMetadataHdr10plus } /// DXGI_ADAPTER_DESC3 -public partial struct AdapterDesc3 +public partial struct AdapterDescription3 { - public unsafe fixed Char Description[128]; + public unsafe fixed ushort Description[128]; public uint VendorId; public uint DeviceId; public uint SubSysId; @@ -1384,15 +1384,15 @@ public partial struct AdapterDesc3 public nuint DedicatedSystemMemory; public nuint SharedSystemMemory; public Luid AdapterLuid; - public AdapterFlag3 Flags; + public AdapterFlags3 Flags; public GraphicsPreemptionGranularity GraphicsPreemptionGranularity; public ComputePreemptionGranularity ComputePreemptionGranularity; } /// DXGI_OUTPUT_DESC1 -public partial struct OutputDesc1 +public partial struct OutputDescription1 { - public unsafe fixed Char DeviceName[32]; + public unsafe fixed ushort DeviceName[32]; public RawRect DesktopCoordinates; public Bool32 AttachedToDesktop; public Common.ModeRotation Rotation; diff --git a/src/Vortice.Win32/Graphics/Dxgi.Manual.cs b/src/Vortice.Win32/Graphics/Dxgi.Manual.cs new file mode 100644 index 0000000..1819729 --- /dev/null +++ b/src/Vortice.Win32/Graphics/Dxgi.Manual.cs @@ -0,0 +1,26 @@ +// Copyright © Amer Koleci and Contributors. +// Licensed under the MIT License (MIT). See LICENSE in the repository root for more information. + +using static Win32.Graphics.Dxgi.Apis; + +namespace Win32.Graphics.Dxgi; + +[Flags] +public enum Usage : uint +{ + ShaderInput = DXGI_USAGE_SHADER_INPUT, + RenderTargetOutput = DXGI_USAGE_RENDER_TARGET_OUTPUT, + Backbuffer = DXGI_USAGE_BACK_BUFFER, + Shared = DXGI_USAGE_SHARED, + ReadOnly = DXGI_USAGE_READ_ONLY, + DiscardOnPresent = DXGI_USAGE_DISCARD_ON_PRESENT, + UnorderedAccess = DXGI_USAGE_UNORDERED_ACCESS +} + +[Flags] +public enum MapFlags : uint +{ + Read = DXGI_MAP_READ, + Write = DXGI_MAP_WRITE, + Discard = DXGI_MAP_DISCARD +}