diff --git a/downstream-pins.json b/downstream-pins.json index 00afc2302c..8244e15cd7 100644 --- a/downstream-pins.json +++ b/downstream-pins.json @@ -71,7 +71,8 @@ "src/xrt/include/xrt/xrt_display_processor_d3d12.h", "src/xrt/include/xrt/xrt_display_processor_gl.h", "src/xrt/include/xrt/xrt_display_processor_metal.h", - "src/xrt/include/xrt/xrt_display_processor_vk.h" + "src/xrt/include/xrt/xrt_display_processor_vk.h", + "src/xrt/include/xrt/xrt_dp_lift.h" ] }, @@ -81,14 +82,15 @@ "tracks": { "windows": { "bump_when": "features", - "reason": "The Windows plug-in guards new code on DP feature macros (XRT_DP_D3D11_HAS_*, XRT_DP_D3D12_HAS_*, ...), and ADR-020 appends a slot + macro WITHOUT bumping the plug-in ABI -- so the abi gate is blind to the change this track needs. Real case: runtime v2.25.2 appended set_overlay_2d (XRT_DP_D3D11_HAS_OVERLAY_2D, #1814) at ABI 5; at the then-pin v2.24.0 the plug-in's SR weaver 2D-compose forward compiled out and was repinned by hand (leia-plugin#295) -- the Linux track's #264 story again. Feature headers are every DP variant the Windows build compiles (D3D11, D3D12, GL, VK). Still gated, not tag-chasing: the installer's MIN_RUNTIME_VERSION follows this pin, so it moves only when the plug-in-facing feature surface did.", + "reason": "The Windows plug-in guards new code on DP feature macros (XRT_DP_D3D11_HAS_*, XRT_DP_D3D12_HAS_*, ...), and ADR-020 appends a slot + macro WITHOUT bumping the plug-in ABI -- so the abi gate is blind to the change this track needs. Real case: runtime v2.25.2 appended set_overlay_2d (XRT_DP_D3D11_HAS_OVERLAY_2D, #1814) at ABI 5; at the then-pin v2.24.0 the plug-in's SR weaver 2D-compose forward compiled out and was repinned by hand (leia-plugin#295) -- the Linux track's #264 story again. Feature headers are every DP variant the Windows build compiles (D3D11, D3D12, GL, VK) plus xrt_dp_lift.h, the lift contract the D3D11 DP implements (its XRT_DP_LIFT_HAS_* macros gate plug-in code too; v2.31.0 shipped XRT_DP_LIFT_HAS_VIEWPOINT_POLICY there and the gate skipped the repin, leia-plugin#317). Still gated, not tag-chasing: the installer's MIN_RUNTIME_VERSION follows this pin, so it moves only when the plug-in-facing feature surface did.", "feature_headers": [ "src/xrt/include/xrt/xrt_plugin.h", "src/xrt/include/xrt/xrt_display_processor.h", "src/xrt/include/xrt/xrt_display_processor_d3d11.h", "src/xrt/include/xrt/xrt_display_processor_d3d12.h", "src/xrt/include/xrt/xrt_display_processor_gl.h", - "src/xrt/include/xrt/xrt_display_processor_vk.h" + "src/xrt/include/xrt/xrt_display_processor_vk.h", + "src/xrt/include/xrt/xrt_dp_lift.h" ], "locations": [ { "file": "CMakeLists.txt", "kind": "cmake_set", "key": "DXR_RUNTIME_GIT_TAG" }, diff --git a/scripts/tests/test_downstream_pin_bump.py b/scripts/tests/test_downstream_pin_bump.py index 4ecba044db..849d0eca11 100644 --- a/scripts/tests/test_downstream_pin_bump.py +++ b/scripts/tests/test_downstream_pin_bump.py @@ -129,8 +129,11 @@ def test_feature_headers_exist(self): def test_default_surface_covers_every_dp_header(self): # A new graphics-API DP header that is not listed would be invisible to # the features gate -- its new slots would never trigger a repin. + # xrt_dp_*.h are DP-side contracts (e.g. xrt_dp_lift.h) whose XRT_DP_*_HAS_* + # macros gate plug-in code exactly like the per-API vtable headers. + inc = REPO_ROOT / "src/xrt/include/xrt" on_disk = {"src/xrt/include/xrt/" + p.name - for p in (REPO_ROOT / "src/xrt/include/xrt").glob("xrt_display_processor*.h")} + for pat in ("xrt_display_processor*.h", "xrt_dp_*.h") for p in inc.glob(pat)} missing = on_disk - set(self.man["feature_surface"]["headers"]) self.assertFalse(missing, "add to downstream-pins.json feature_surface.headers: %s" % sorted(missing))