Add SharedBufferMemoryD3D12Resource External Interface
Adds SharedBufferMemoryD3D12Resource chained struct for the
SharedBufferMemory feature. Added stubs for implementation.
Bug: dawn:2382
Change-Id: Idcbc8ffa67775df3317ef2e73c1a91db5bbc884a
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/176540
Commit-Queue: Brandon1 Jones <brandon1.jones@intel.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Austin Eng <enga@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
diff --git a/include/dawn/native/D3D12Backend.h b/include/dawn/native/D3D12Backend.h
index 42e0947..31faf6c 100644
--- a/include/dawn/native/D3D12Backend.h
+++ b/include/dawn/native/D3D12Backend.h
@@ -53,6 +53,17 @@
uint64_t requestedReservationSize,
MemorySegment memorySegment);
+// May be chained on SharedBufferMemoryDescriptor
+struct DAWN_NATIVE_EXPORT SharedBufferMemoryD3D12ResourceDescriptor : wgpu::ChainedStruct {
+ SharedBufferMemoryD3D12ResourceDescriptor() {
+ sType = static_cast<wgpu::SType>(WGPUSType_SharedBufferMemoryD3D12ResourceDescriptor);
+ }
+
+ // This ID3D12Resource object must be created from the same ID3D12Device used in the
+ // WGPUDevice.
+ Microsoft::WRL::ComPtr<ID3D12Resource> resource;
+};
+
} // namespace dawn::native::d3d12
#endif // INCLUDE_DAWN_NATIVE_D3D12BACKEND_H_
diff --git a/src/dawn/dawn.json b/src/dawn/dawn.json
index e4af3ed..aba2cd4 100644
--- a/src/dawn/dawn.json
+++ b/src/dawn/dawn.json
@@ -2203,7 +2203,8 @@
{"value": 1201, "name": "shared fence vk semaphore sync FD", "tags": ["dawn", "native"]},
{"value": 1202, "name": "shared fence vk semaphore zircon handle", "tags": ["dawn", "native"]},
{"value": 1203, "name": "shared fence DXGI shared handle", "tags": ["dawn", "native"]},
- {"value": 1204, "name": "shared fence MTL shared event", "tags": ["dawn", "native"]}
+ {"value": 1204, "name": "shared fence MTL shared event", "tags": ["dawn", "native"]},
+ {"value": 1205, "name": "shared buffer memory D3D12 resource", "tags": ["dawn", "native"]}
]
},
"filter mode": {
@@ -3637,7 +3638,8 @@
{"value": 1210, "name": "shared fence DXGI shared handle descriptor", "tags": ["dawn", "native"]},
{"value": 1211, "name": "shared fence DXGI shared handle export info", "tags": ["dawn", "native"]},
{"value": 1212, "name": "shared fence MTL shared event descriptor", "tags": ["dawn", "native"]},
- {"value": 1213, "name": "shared fence MTL shared event export info", "tags": ["dawn", "native"]}
+ {"value": 1213, "name": "shared fence MTL shared event export info", "tags": ["dawn", "native"]},
+ {"value": 1214, "name": "shared buffer memory D3D12 resource descriptor", "tags": ["dawn", "native"]}
]
},
"texture": {
diff --git a/src/dawn/native/BUILD.gn b/src/dawn/native/BUILD.gn
index aafeb9f..1fa418c 100644
--- a/src/dawn/native/BUILD.gn
+++ b/src/dawn/native/BUILD.gn
@@ -585,6 +585,8 @@
"d3d12/ShaderModuleD3D12.h",
"d3d12/ShaderVisibleDescriptorAllocatorD3D12.cpp",
"d3d12/ShaderVisibleDescriptorAllocatorD3D12.h",
+ "d3d12/SharedBufferMemoryD3D12.cpp",
+ "d3d12/SharedBufferMemoryD3D12.h",
"d3d12/SharedFenceD3D12.cpp",
"d3d12/SharedFenceD3D12.h",
"d3d12/SharedTextureMemoryD3D12.cpp",
diff --git a/src/dawn/native/CMakeLists.txt b/src/dawn/native/CMakeLists.txt
index 94e91a6..0628689 100644
--- a/src/dawn/native/CMakeLists.txt
+++ b/src/dawn/native/CMakeLists.txt
@@ -456,6 +456,8 @@
"d3d12/ShaderVisibleDescriptorAllocatorD3D12.h"
"d3d12/StagingDescriptorAllocatorD3D12.cpp"
"d3d12/StagingDescriptorAllocatorD3D12.h"
+ "d3d12/SharedBufferMemoryD3D12.cpp"
+ "d3d12/SharedBufferMemoryD3D12.h"
"d3d12/SharedFenceD3D12.cpp"
"d3d12/SharedFenceD3D12.h"
"d3d12/SharedTextureMemoryD3D12.cpp"
diff --git a/src/dawn/native/ChainUtilsImpl.inl b/src/dawn/native/ChainUtilsImpl.inl
index 5d28c58..c124da9 100644
--- a/src/dawn/native/ChainUtilsImpl.inl
+++ b/src/dawn/native/ChainUtilsImpl.inl
@@ -41,6 +41,10 @@
struct SharedTextureMemoryD3D11Texture2DDescriptor;
}
+namespace d3d12 {
+struct SharedBufferMemoryD3D12ResourceDescriptor;
+}
+
namespace opengl {
struct RequestAdapterOptionsGetGLProc;
}
@@ -85,6 +89,16 @@
AdditionalExtensionsList<const d3d11::SharedTextureMemoryD3D11Texture2DDescriptor*>;
};
+template <>
+constexpr inline wgpu::SType STypeForImpl<d3d12::SharedBufferMemoryD3D12ResourceDescriptor> =
+ wgpu::SType(WGPUSType_SharedBufferMemoryD3D12ResourceDescriptor);
+
+template <>
+struct AdditionalExtensions<SharedBufferMemoryDescriptor> {
+ using List =
+ AdditionalExtensionsList<const d3d12::SharedBufferMemoryD3D12ResourceDescriptor*>;
+};
+
} // namespace detail
} // namespace dawn::native
diff --git a/src/dawn/native/Features.cpp b/src/dawn/native/Features.cpp
index ce5b730..d2b9b06 100644
--- a/src/dawn/native/Features.cpp
+++ b/src/dawn/native/Features.cpp
@@ -295,6 +295,10 @@
"https://dawn.googlesource.com/dawn/+/refs/heads/main/docs/dawn/features/"
"adapter_properties.md",
FeatureInfo::FeatureState::Stable}},
+ {Feature::SharedBufferMemoryD3D12Resource,
+ {"Support importing ID3D12Resource as shared buffer memory.",
+ "https://dawn.googlesource.com/dawn/+/refs/heads/main/docs/dawn/features/shared_buffer.md",
+ FeatureInfo::FeatureState::Experimental}},
};
} // anonymous namespace
diff --git a/src/dawn/native/d3d12/DeviceD3D12.cpp b/src/dawn/native/d3d12/DeviceD3D12.cpp
index f8f8c5a..23adbf8 100644
--- a/src/dawn/native/d3d12/DeviceD3D12.cpp
+++ b/src/dawn/native/d3d12/DeviceD3D12.cpp
@@ -57,6 +57,7 @@
#include "dawn/native/d3d12/SamplerHeapCacheD3D12.h"
#include "dawn/native/d3d12/ShaderModuleD3D12.h"
#include "dawn/native/d3d12/ShaderVisibleDescriptorAllocatorD3D12.h"
+#include "dawn/native/d3d12/SharedBufferMemoryD3D12.h"
#include "dawn/native/d3d12/SharedFenceD3D12.h"
#include "dawn/native/d3d12/SharedTextureMemoryD3D12.h"
#include "dawn/native/d3d12/StagingDescriptorAllocatorD3D12.h"
@@ -406,6 +407,27 @@
RenderPipeline::InitializeAsync(std::move(renderPipeline), callback, userdata);
}
+ResultOrError<Ref<SharedBufferMemoryBase>> Device::ImportSharedBufferMemoryImpl(
+ const SharedBufferMemoryDescriptor* descriptor) {
+ UnpackedPtr<SharedBufferMemoryDescriptor> unpacked;
+ DAWN_TRY_ASSIGN(unpacked, ValidateAndUnpack(descriptor));
+
+ wgpu::SType type;
+ DAWN_TRY_ASSIGN(
+ type, (unpacked.ValidateBranches<Branch<SharedBufferMemoryD3D12ResourceDescriptor>>()));
+
+ switch (type) {
+ case wgpu::SType::SharedBufferMemoryD3D12ResourceDescriptor:
+ DAWN_INVALID_IF(!HasFeature(Feature::SharedBufferMemoryD3D12Resource),
+ "%s is not enabled.",
+ wgpu::FeatureName::SharedBufferMemoryD3D12Resource);
+ return SharedBufferMemory::Create(
+ this, descriptor->label, unpacked.Get<SharedBufferMemoryD3D12ResourceDescriptor>());
+ default:
+ DAWN_UNREACHABLE();
+ }
+}
+
ResultOrError<Ref<SharedTextureMemoryBase>> Device::ImportSharedTextureMemoryImpl(
const SharedTextureMemoryDescriptor* descriptor) {
UnpackedPtr<SharedTextureMemoryDescriptor> unpacked;
diff --git a/src/dawn/native/d3d12/DeviceD3D12.h b/src/dawn/native/d3d12/DeviceD3D12.h
index 05bfd12..c908ab9 100644
--- a/src/dawn/native/d3d12/DeviceD3D12.h
+++ b/src/dawn/native/d3d12/DeviceD3D12.h
@@ -222,6 +222,8 @@
WGPUCreateRenderPipelineAsyncCallback callback,
void* userdata) override;
+ ResultOrError<Ref<SharedBufferMemoryBase>> ImportSharedBufferMemoryImpl(
+ const SharedBufferMemoryDescriptor* descriptor) override;
ResultOrError<Ref<SharedTextureMemoryBase>> ImportSharedTextureMemoryImpl(
const SharedTextureMemoryDescriptor* descriptor) override;
ResultOrError<Ref<SharedFenceBase>> ImportSharedFenceImpl(
diff --git a/src/dawn/native/d3d12/SharedBufferMemoryD3D12.cpp b/src/dawn/native/d3d12/SharedBufferMemoryD3D12.cpp
new file mode 100644
index 0000000..d486c17
--- /dev/null
+++ b/src/dawn/native/d3d12/SharedBufferMemoryD3D12.cpp
@@ -0,0 +1,40 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include "dawn/native/d3d12/SharedBufferMemoryD3D12.h"
+
+namespace dawn::native::d3d12 {
+
+// static
+ResultOrError<Ref<SharedBufferMemory>> SharedBufferMemory::Create(
+ Device* device,
+ const char* label,
+ const SharedBufferMemoryD3D12ResourceDescriptor* descriptor) {
+ return DAWN_UNIMPLEMENTED_ERROR("Not implemented");
+}
+
+} // namespace dawn::native::d3d12
diff --git a/src/dawn/native/d3d12/SharedBufferMemoryD3D12.h b/src/dawn/native/d3d12/SharedBufferMemoryD3D12.h
new file mode 100644
index 0000000..cae0327
--- /dev/null
+++ b/src/dawn/native/d3d12/SharedBufferMemoryD3D12.h
@@ -0,0 +1,49 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#ifndef SRC_DAWN_NATIVE_D3D12_SHARED_BUFFER_MEMORY_D3D12_H_
+#define SRC_DAWN_NATIVE_D3D12_SHARED_BUFFER_MEMORY_D3D12_H_
+
+#include "dawn/native/D3D12Backend.h"
+#include "dawn/native/Error.h"
+#include "dawn/native/SharedBufferMemory.h"
+#include "dawn/native/d3d12/d3d12_platform.h"
+
+namespace dawn::native::d3d12 {
+class Device;
+
+class SharedBufferMemory final : public SharedBufferMemoryBase {
+ public:
+ static ResultOrError<Ref<SharedBufferMemory>> Create(
+ Device* device,
+ const char* label,
+ const SharedBufferMemoryD3D12ResourceDescriptor* descriptor);
+};
+
+} // namespace dawn::native::d3d12
+
+#endif // SRC_DAWN_NATIVE_D3D12_SHARED_BUFFER_MEMORY_D3D12_H_
diff --git a/src/dawn/wire/SupportedFeatures.cpp b/src/dawn/wire/SupportedFeatures.cpp
index 1a9a893..6f72263 100644
--- a/src/dawn/wire/SupportedFeatures.cpp
+++ b/src/dawn/wire/SupportedFeatures.cpp
@@ -63,6 +63,7 @@
case WGPUFeatureName_SharedFenceVkSemaphoreZirconHandle:
case WGPUFeatureName_SharedFenceDXGISharedHandle:
case WGPUFeatureName_SharedFenceMTLSharedEvent:
+ case WGPUFeatureName_SharedBufferMemoryD3D12Resource:
case WGPUFeatureName_Depth32FloatStencil8:
case WGPUFeatureName_TimestampQuery: