From 494532edfcdb649795295b204b898f2a15d7e728 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 26 Oct 2026 04:14:12 +0000 Subject: [PATCH 1/4] Initial plan From 5da57b8318e4e7442b25b346f68530247992a4b0 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 26 Oct 2026 04:16:55 +0000 Subject: [PATCH 2/4] Fix DCompositionGetStatistics array count metadata Co-authored-by: jevansaks <20667023+jevansaks@users.noreply.github.com> --- .../WinSDK/RecompiledIdlHeaders/um/dcomp.h | 3 +- generation/WinSDK/emitter.settings.rsp | 1 - tests/Windows.Win32.Tests/CompositionTests.cs | 28 +++++++++++++++++++ 3 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 tests/Windows.Win32.Tests/CompositionTests.cs diff --git a/generation/WinSDK/RecompiledIdlHeaders/um/dcomp.h b/generation/WinSDK/RecompiledIdlHeaders/um/dcomp.h index 0181947e8..4e0153f8f 100644 --- a/generation/WinSDK/RecompiledIdlHeaders/um/dcomp.h +++ b/generation/WinSDK/RecompiledIdlHeaders/um/dcomp.h @@ -190,7 +190,7 @@ STDAPI DCompositionGetStatistics( _In_ COMPOSITION_FRAME_ID frameId, _Out_ COMPOSITION_FRAME_STATS* frameStats, _In_ UINT targetIdCount, - _Out_writes_opt_(targetCount) COMPOSITION_TARGET_ID* targetIds, + _Out_writes_opt_(targetIdCount) COMPOSITION_TARGET_ID* targetIds, _Out_opt_ UINT* actualTargetIdCount); //+----------------------------------------------------------------------------- @@ -2526,4 +2526,3 @@ DECLARE_INTERFACE_IID_(IDCompositionDevice5, IDCompositionDevice4, "2C6BEBFE-A60 #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */ #pragma endregion - diff --git a/generation/WinSDK/emitter.settings.rsp b/generation/WinSDK/emitter.settings.rsp index a92476732..27b18f9d0 100644 --- a/generation/WinSDK/emitter.settings.rsp +++ b/generation/WinSDK/emitter.settings.rsp @@ -1183,7 +1183,6 @@ IWICImagingFactory::CreateDecoderFromFilename::pguidVendor=[Optional] DCompositionCreateDevice::dcompositionDevice=[ComOutPtr] DCompositionCreateDevice2::dcompositionDevice=[ComOutPtr] DCompositionCreateDevice3::dcompositionDevice=[ComOutPtr] -DCompositionGetStatistics::targetIds=[NativeArrayInfo(CountFieldName = "targetIdCount")] DCompositionGetTargetStatistics::targetStats=[RetVal] CreatePresentationFactory::presentationFactory=[ComOutPtr] IPresentationManager::GetPresentRetiringFence::fence=[ComOutPtr] diff --git a/tests/Windows.Win32.Tests/CompositionTests.cs b/tests/Windows.Win32.Tests/CompositionTests.cs new file mode 100644 index 000000000..72b131c9a --- /dev/null +++ b/tests/Windows.Win32.Tests/CompositionTests.cs @@ -0,0 +1,28 @@ +using System; +using System.Linq; +using MetadataUtils; +using Xunit; + +namespace Windows.Win32.Tests +{ + public class CompositionTests + { + [Fact] + public void DCompositionGetStatisticsUsesCountParameter() + { + var typeSystem = DecompilerUtils.LoadDecompilerTypeSystem(TestCommon.TestUtils.Win32WinmdPath); + var method = DecompilerUtils.GetSelfDefinedWinmdToplevelTypes(typeSystem) + .SelectMany(type => type.Methods) + .Single(method => method.Name == "DCompositionGetStatistics"); + var parameter = method.Parameters.Single(parameter => parameter.Name == "targetIds"); + var attribute = Assert.Single(parameter.GetAttributes() + .Where(attribute => attribute.AttributeType.FullName == "Windows.Win32.Foundation.Metadata.NativeArrayInfoAttribute")); + var countArgument = Assert.Single(attribute.NamedArguments + .Where(argument => argument.Name == "CountParamIndex")); + + Assert.Equal(2, Convert.ToInt32(countArgument.Value)); + Assert.Equal("targetIdCount", method.Parameters[2].Name); + Assert.DoesNotContain(attribute.NamedArguments, argument => argument.Name == "CountFieldName"); + } + } +} From 408ca8eabaecf225d1f976956d155a5c704bda50 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 26 Oct 2026 04:20:21 +0000 Subject: [PATCH 3/4] Preserve original SDK header trailing whitespace Co-authored-by: jevansaks <20667023+jevansaks@users.noreply.github.com> --- generation/WinSDK/RecompiledIdlHeaders/um/dcomp.h | 1 + 1 file changed, 1 insertion(+) diff --git a/generation/WinSDK/RecompiledIdlHeaders/um/dcomp.h b/generation/WinSDK/RecompiledIdlHeaders/um/dcomp.h index 4e0153f8f..9b2394de4 100644 --- a/generation/WinSDK/RecompiledIdlHeaders/um/dcomp.h +++ b/generation/WinSDK/RecompiledIdlHeaders/um/dcomp.h @@ -2526,3 +2526,4 @@ DECLARE_INTERFACE_IID_(IDCompositionDevice5, IDCompositionDevice4, "2C6BEBFE-A60 #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */ #pragma endregion + From 17dcc5195c6fa9e5cf38cf7b623cd43756e0a339 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 26 Oct 2026 04:25:11 +0000 Subject: [PATCH 4/4] Limit DCompositionGetStatistics fix to emitter response file Co-authored-by: jevansaks <20667023+jevansaks@users.noreply.github.com> --- .../WinSDK/RecompiledIdlHeaders/um/dcomp.h | 2 +- generation/WinSDK/emitter.settings.rsp | 1 + tests/Windows.Win32.Tests/CompositionTests.cs | 28 ------------------- 3 files changed, 2 insertions(+), 29 deletions(-) delete mode 100644 tests/Windows.Win32.Tests/CompositionTests.cs diff --git a/generation/WinSDK/RecompiledIdlHeaders/um/dcomp.h b/generation/WinSDK/RecompiledIdlHeaders/um/dcomp.h index 9b2394de4..0181947e8 100644 --- a/generation/WinSDK/RecompiledIdlHeaders/um/dcomp.h +++ b/generation/WinSDK/RecompiledIdlHeaders/um/dcomp.h @@ -190,7 +190,7 @@ STDAPI DCompositionGetStatistics( _In_ COMPOSITION_FRAME_ID frameId, _Out_ COMPOSITION_FRAME_STATS* frameStats, _In_ UINT targetIdCount, - _Out_writes_opt_(targetIdCount) COMPOSITION_TARGET_ID* targetIds, + _Out_writes_opt_(targetCount) COMPOSITION_TARGET_ID* targetIds, _Out_opt_ UINT* actualTargetIdCount); //+----------------------------------------------------------------------------- diff --git a/generation/WinSDK/emitter.settings.rsp b/generation/WinSDK/emitter.settings.rsp index 27b18f9d0..7c7801ff4 100644 --- a/generation/WinSDK/emitter.settings.rsp +++ b/generation/WinSDK/emitter.settings.rsp @@ -1183,6 +1183,7 @@ IWICImagingFactory::CreateDecoderFromFilename::pguidVendor=[Optional] DCompositionCreateDevice::dcompositionDevice=[ComOutPtr] DCompositionCreateDevice2::dcompositionDevice=[ComOutPtr] DCompositionCreateDevice3::dcompositionDevice=[ComOutPtr] +DCompositionGetStatistics::targetIds=[NativeArrayInfo(CountParamIndex = 2)] DCompositionGetTargetStatistics::targetStats=[RetVal] CreatePresentationFactory::presentationFactory=[ComOutPtr] IPresentationManager::GetPresentRetiringFence::fence=[ComOutPtr] diff --git a/tests/Windows.Win32.Tests/CompositionTests.cs b/tests/Windows.Win32.Tests/CompositionTests.cs deleted file mode 100644 index 72b131c9a..000000000 --- a/tests/Windows.Win32.Tests/CompositionTests.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Linq; -using MetadataUtils; -using Xunit; - -namespace Windows.Win32.Tests -{ - public class CompositionTests - { - [Fact] - public void DCompositionGetStatisticsUsesCountParameter() - { - var typeSystem = DecompilerUtils.LoadDecompilerTypeSystem(TestCommon.TestUtils.Win32WinmdPath); - var method = DecompilerUtils.GetSelfDefinedWinmdToplevelTypes(typeSystem) - .SelectMany(type => type.Methods) - .Single(method => method.Name == "DCompositionGetStatistics"); - var parameter = method.Parameters.Single(parameter => parameter.Name == "targetIds"); - var attribute = Assert.Single(parameter.GetAttributes() - .Where(attribute => attribute.AttributeType.FullName == "Windows.Win32.Foundation.Metadata.NativeArrayInfoAttribute")); - var countArgument = Assert.Single(attribute.NamedArguments - .Where(argument => argument.Name == "CountParamIndex")); - - Assert.Equal(2, Convert.ToInt32(countArgument.Value)); - Assert.Equal("targetIdCount", method.Parameters[2].Name); - Assert.DoesNotContain(attribute.NamedArguments, argument => argument.Name == "CountFieldName"); - } - } -}