D3D12: derive T2T workaround from TextureCopyBetweenDimensionsSupported
Query D3D12_FEATURE_DATA_D3D12_OPTIONS13 to determine whether the device
supports copies between textures of different dimensions. If it does
not, or if D3D12_FEATURE_D3D12_OPTIONS13 is not supported, force enable
toggle
D3D12UseTempBufferInTextureToTextureCopyBetweenDifferentDimensions.
Fixed: dawn:1216
Change-Id: I976e7fad291126f8dcee31ce6b681314d38e69e7
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/120882
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Austin Eng <enga@chromium.org>
Kokoro: Kokoro <noreply+kokoro@google.com>
Auto-Submit: Austin Eng <enga@chromium.org>
diff --git a/src/dawn/native/d3d12/AdapterD3D12.cpp b/src/dawn/native/d3d12/AdapterD3D12.cpp
index e7808cb..0478b8c 100644
--- a/src/dawn/native/d3d12/AdapterD3D12.cpp
+++ b/src/dawn/native/d3d12/AdapterD3D12.cpp
@@ -554,10 +554,18 @@
deviceToggles->ForceSet(Toggle::NoWorkaroundDstAlphaBlendDoesNotWork, true);
}
- // TODO(http://crbug.com/dawn/1216): Actually query D3D12_FEATURE_DATA_D3D12_OPTIONS13.
- // This is blocked on updating the Windows SDK.
- deviceToggles->ForceSet(
- Toggle::D3D12UseTempBufferInTextureToTextureCopyBetweenDifferentDimensions, true);
+ D3D12_FEATURE_DATA_D3D12_OPTIONS13 featureData13;
+ if (FAILED(mD3d12Device->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS13, &featureData13,
+ sizeof(featureData13)))) {
+ // If the platform doesn't support D3D12_FEATURE_D3D12_OPTIONS13, default initialize the
+ // struct to set all features to false.
+ featureData13 = {};
+ }
+
+ if (!featureData13.TextureCopyBetweenDimensionsSupported) {
+ deviceToggles->ForceSet(
+ Toggle::D3D12UseTempBufferInTextureToTextureCopyBetweenDifferentDimensions, true);
+ }
}
ResultOrError<Ref<DeviceBase>> Adapter::CreateDeviceImpl(const DeviceDescriptor* descriptor,