Removes unnecessary UnpackedBase in favor of just Unpacked. - This change also allows moving the massive header include into the cpp files on a need-to basis since we can add Unpacked<T> to Forward.h. Bug: dawn:1955 Change-Id: I392326bafaa23e7acad7fc12aac5a7d6a68362b7 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/165101 Commit-Queue: Loko Kung <lokokung@google.com> Reviewed-by: Corentin Wallez <cwallez@chromium.org> Kokoro: Kokoro <noreply+kokoro@google.com> Reviewed-by: Austin Eng <enga@chromium.org>
diff --git a/src/dawn/native/Adapter.cpp b/src/dawn/native/Adapter.cpp index 6bbed1a..da6f63f 100644 --- a/src/dawn/native/Adapter.cpp +++ b/src/dawn/native/Adapter.cpp
@@ -35,7 +35,6 @@ #include "dawn/native/ChainUtils.h" #include "dawn/native/Device.h" -#include "dawn/native/Error.h" #include "dawn/native/Instance.h" #include "dawn/native/PhysicalDevice.h"
diff --git a/src/dawn/native/ChainUtils.h b/src/dawn/native/ChainUtils.h index e896167..00a0052 100644 --- a/src/dawn/native/ChainUtils.h +++ b/src/dawn/native/ChainUtils.h
@@ -49,10 +49,8 @@ }; } // namespace detail -template <typename T, typename ChainType> -class UnpackedBase; template <typename T> -using Unpacked = UnpackedBase<T, typename detail::ChainTypeFor<T>::Type>; +class Unpacked; namespace detail { // Converts to the expected pointer types depending on the extensibility of the structure. @@ -88,15 +86,18 @@ // Wrapper class for unpacked pointers. The classes essentially acts like a const T* or T* with // the additional capabilities to validate and retrieve chained structures. // -template <typename T, typename ChainT> -class UnpackedBase { +template <typename T> +class Unpacked { public: - using ChainType = ChainT; - using PtrType = typename detail::PtrTypeFor<UnpackedBase<T, ChainType>, T>::Type; + using ChainType = + typename std::conditional_t<detail::ExtensibilityFor<T> == detail::Extensibility::In, + const wgpu::ChainedStruct*, + wgpu::ChainedStructOut*>; + using PtrType = typename detail::PtrTypeFor<Unpacked<T>, T>::Type; using TupleType = typename detail::UnpackedTypeFor<T>::Type; using BitsetType = typename std::bitset<std::tuple_size_v<TupleType>>; - UnpackedBase() : mStruct(nullptr) {} + Unpacked() : mStruct(nullptr) {} operator bool() const { return mStruct != nullptr; } PtrType operator->() const { return mStruct; } @@ -117,10 +118,10 @@ MaybeError ValidateSubset() const; private: - friend UnpackedBase<T, ChainType> Unpack<T>(PtrType chain); - friend ResultOrError<UnpackedBase<T, ChainType>> ValidateAndUnpack<T>(PtrType chain); + friend Unpacked<T> Unpack<T>(PtrType chain); + friend ResultOrError<Unpacked<T>> ValidateAndUnpack<T>(PtrType chain); - explicit UnpackedBase(PtrType packed) : mStruct(packed) {} + explicit Unpacked(PtrType packed) : mStruct(packed) {} PtrType mStruct = nullptr; TupleType mUnpacked; @@ -234,19 +235,19 @@ } // namespace detail -template <typename T, typename ChainType> +template <typename T> template <typename In> -auto UnpackedBase<T, ChainType>::Get() const { - return std::get<typename detail::PtrTypeFor<UnpackedBase<T, ChainType>, In>::Type>(mUnpacked); +auto Unpacked<T>::Get() const { + return std::get<typename detail::PtrTypeFor<Unpacked<T>, In>::Type>(mUnpacked); } -template <typename T, typename ChainType> -bool UnpackedBase<T, ChainType>::Empty() const { +template <typename T> +bool Unpacked<T>::Empty() const { return mBitset.none(); } -template <typename T, typename ChainType> -std::string UnpackedBase<T, ChainType>::ToString() const { +template <typename T> +std::string Unpacked<T>::ToString() const { std::string result = "( "; std::apply( [&](auto*... args) { @@ -297,10 +298,10 @@ // - only a Root1 extension // - or a Root2 extension with an optional R2Ext1 extension // Any other configuration is deemed invalid. -template <typename T, typename ChainType> +template <typename T> template <typename... Branches> -ResultOrError<wgpu::SType> UnpackedBase<T, ChainType>::ValidateBranches() const { - using Validator = detail::BranchesValidator<UnpackedBase<T, ChainType>, Branches...>; +ResultOrError<wgpu::SType> Unpacked<T>::ValidateBranches() const { + using Validator = detail::BranchesValidator<Unpacked<T>, Branches...>; wgpu::SType match = wgpu::SType::Invalid; if (Validator::Validate(*this, mBitset, match)) { @@ -322,11 +323,10 @@ // // Even though "valid" extensions on descriptor may include both Ext1 and Ext2, ValidateSubset // will further enforce that Ext2 is not on the chain in the example above. -template <typename T, typename ChainType> +template <typename T> template <typename... Allowed> -MaybeError UnpackedBase<T, ChainType>::ValidateSubset() const { - return detail::SubsetValidator<UnpackedBase<T, ChainType>, Allowed...>::Validate(*this, - mBitset); +MaybeError Unpacked<T>::ValidateSubset() const { + return detail::SubsetValidator<Unpacked<T>, Allowed...>::Validate(*this, mBitset); } } // namespace dawn::native
diff --git a/src/dawn/native/Device.h b/src/dawn/native/Device.h index d2f383bd..5f2d4735 100644 --- a/src/dawn/native/Device.h +++ b/src/dawn/native/Device.h
@@ -37,7 +37,6 @@ #include "dawn/common/ContentLessObjectCache.h" #include "dawn/common/Mutex.h" #include "dawn/native/CacheKey.h" -#include "dawn/native/ChainUtils.h" #include "dawn/native/Commands.h" #include "dawn/native/ComputePipeline.h" #include "dawn/native/Error.h"
diff --git a/src/dawn/native/EventManager.cpp b/src/dawn/native/EventManager.cpp index aa322e5..3996ca0 100644 --- a/src/dawn/native/EventManager.cpp +++ b/src/dawn/native/EventManager.cpp
@@ -34,6 +34,7 @@ #include "dawn/common/Assert.h" #include "dawn/common/FutureUtils.h" +#include "dawn/native/ChainUtils.h" #include "dawn/native/Device.h" #include "dawn/native/IntegerTypes.h" #include "dawn/native/Queue.h"
diff --git a/src/dawn/native/EventManager.h b/src/dawn/native/EventManager.h index aeac7f2..f743e15 100644 --- a/src/dawn/native/EventManager.h +++ b/src/dawn/native/EventManager.h
@@ -39,8 +39,8 @@ #include "dawn/common/MutexProtected.h" #include "dawn/common/NonCopyable.h" #include "dawn/common/Ref.h" -#include "dawn/native/ChainUtils.h" #include "dawn/native/Error.h" +#include "dawn/native/Forward.h" #include "dawn/native/IntegerTypes.h" #include "dawn/native/SystemEvent.h"
diff --git a/src/dawn/native/Forward.h b/src/dawn/native/Forward.h index 81a8c7d..832ed55 100644 --- a/src/dawn/native/Forward.h +++ b/src/dawn/native/Forward.h
@@ -77,6 +77,9 @@ struct Format; +template <typename T> +class Unpacked; + // Aliases for frontend-only types. using CommandEncoderBase = CommandEncoder; using ComputePassEncoderBase = ComputePassEncoder;
diff --git a/src/dawn/native/Instance.cpp b/src/dawn/native/Instance.cpp index 5237268..3ff2ab4 100644 --- a/src/dawn/native/Instance.cpp +++ b/src/dawn/native/Instance.cpp
@@ -214,7 +214,7 @@ } // TODO(crbug.com/dawn/832): make the platform an initialization parameter of the instance. -MaybeError InstanceBase::Initialize(const Unpacked<InstanceDescriptor> descriptor) { +MaybeError InstanceBase::Initialize(const Unpacked<InstanceDescriptor>& descriptor) { // Initialize the platform to the default for now. mDefaultPlatform = std::make_unique<dawn::platform::Platform>(); SetPlatform(mDefaultPlatform.get());
diff --git a/src/dawn/native/Instance.h b/src/dawn/native/Instance.h index a3a1a87..0f7347c 100644 --- a/src/dawn/native/Instance.h +++ b/src/dawn/native/Instance.h
@@ -43,9 +43,9 @@ #include "dawn/native/Adapter.h" #include "dawn/native/BackendConnection.h" #include "dawn/native/BlobCache.h" -#include "dawn/native/ChainUtils.h" #include "dawn/native/EventManager.h" #include "dawn/native/Features.h" +#include "dawn/native/Forward.h" #include "dawn/native/RefCountedWithExternalCount.h" #include "dawn/native/Toggles.h" #include "dawn/native/dawn_platform.h" @@ -182,7 +182,7 @@ InstanceBase(const InstanceBase& other) = delete; InstanceBase& operator=(const InstanceBase& other) = delete; - MaybeError Initialize(const Unpacked<InstanceDescriptor> descriptor); + MaybeError Initialize(const Unpacked<InstanceDescriptor>& descriptor); void SetPlatform(dawn::platform::Platform* platform); // Lazily creates connections to all backends that have been compiled, may return null even for
diff --git a/src/dawn/native/RenderPassEncoder.h b/src/dawn/native/RenderPassEncoder.h index 0d64d11..edc8064 100644 --- a/src/dawn/native/RenderPassEncoder.h +++ b/src/dawn/native/RenderPassEncoder.h
@@ -30,7 +30,6 @@ #include <vector> -#include "dawn/native/ChainUtils.h" #include "dawn/native/Error.h" #include "dawn/native/Forward.h" #include "dawn/native/RenderEncoderBase.h"
diff --git a/src/dawn/native/SharedTextureMemory.h b/src/dawn/native/SharedTextureMemory.h index 3de94bc..9d37659 100644 --- a/src/dawn/native/SharedTextureMemory.h +++ b/src/dawn/native/SharedTextureMemory.h
@@ -34,8 +34,8 @@ #include "dawn/common/StackContainer.h" #include "dawn/common/WeakRef.h" #include "dawn/common/WeakRefSupport.h" -#include "dawn/native/ChainUtils.h" #include "dawn/native/Error.h" +#include "dawn/native/Forward.h" #include "dawn/native/IntegerTypes.h" #include "dawn/native/ObjectBase.h" #include "dawn/native/SharedFence.h"
diff --git a/src/dawn/native/Texture.h b/src/dawn/native/Texture.h index 5d28e63..febfc29 100644 --- a/src/dawn/native/Texture.h +++ b/src/dawn/native/Texture.h
@@ -33,7 +33,6 @@ #include "dawn/common/WeakRef.h" #include "dawn/common/ityp_array.h" #include "dawn/common/ityp_bitset.h" -#include "dawn/native/ChainUtils.h" #include "dawn/native/Error.h" #include "dawn/native/Format.h" #include "dawn/native/Forward.h"
diff --git a/src/dawn/native/d3d/ExternalImageDXGIImpl.cpp b/src/dawn/native/d3d/ExternalImageDXGIImpl.cpp index 2762faa..72d0f8d 100644 --- a/src/dawn/native/d3d/ExternalImageDXGIImpl.cpp +++ b/src/dawn/native/d3d/ExternalImageDXGIImpl.cpp
@@ -31,6 +31,7 @@ #include <vector> #include "dawn/common/Log.h" +#include "dawn/native/ChainUtils.h" #include "dawn/native/D3D12Backend.h" #include "dawn/native/DawnNative.h" #include "dawn/native/d3d/DeviceD3D.h"
diff --git a/src/dawn/native/d3d/ExternalImageDXGIImpl.h b/src/dawn/native/d3d/ExternalImageDXGIImpl.h index a50f2d1..b8a4258 100644 --- a/src/dawn/native/d3d/ExternalImageDXGIImpl.h +++ b/src/dawn/native/d3d/ExternalImageDXGIImpl.h
@@ -38,7 +38,6 @@ #include "dawn/common/LinkedList.h" #include "dawn/common/Mutex.h" #include "dawn/common/NonCopyable.h" -#include "dawn/native/ChainUtils.h" #include "dawn/native/Error.h" #include "dawn/native/Forward.h" #include "dawn/native/IntegerTypes.h"
diff --git a/src/dawn/native/d3d11/SwapChainD3D11.cpp b/src/dawn/native/d3d11/SwapChainD3D11.cpp index f8055b7..8100240 100644 --- a/src/dawn/native/d3d11/SwapChainD3D11.cpp +++ b/src/dawn/native/d3d11/SwapChainD3D11.cpp
@@ -33,6 +33,7 @@ #include <utility> +#include "dawn/native/ChainUtils.h" #include "dawn/native/Surface.h" #include "dawn/native/d3d/D3DError.h" #include "dawn/native/d3d/UtilsD3D.h"
diff --git a/src/dawn/native/d3d11/TextureD3D11.cpp b/src/dawn/native/d3d11/TextureD3D11.cpp index 7b3dfac..438d833 100644 --- a/src/dawn/native/d3d11/TextureD3D11.cpp +++ b/src/dawn/native/d3d11/TextureD3D11.cpp
@@ -33,6 +33,7 @@ #include "dawn/common/Constants.h" #include "dawn/common/Math.h" +#include "dawn/native/ChainUtils.h" #include "dawn/native/CommandBuffer.h" #include "dawn/native/CommandValidation.h" #include "dawn/native/DynamicUploader.h"
diff --git a/src/dawn/native/d3d12/SwapChainD3D12.cpp b/src/dawn/native/d3d12/SwapChainD3D12.cpp index 169d579..e5ae0f8 100644 --- a/src/dawn/native/d3d12/SwapChainD3D12.cpp +++ b/src/dawn/native/d3d12/SwapChainD3D12.cpp
@@ -33,6 +33,7 @@ #include <utility> +#include "dawn/native/ChainUtils.h" #include "dawn/native/Surface.h" #include "dawn/native/d3d/D3DError.h" #include "dawn/native/d3d/UtilsD3D.h"
diff --git a/src/dawn/native/d3d12/TextureD3D12.cpp b/src/dawn/native/d3d12/TextureD3D12.cpp index e09ec4c..e7e7006 100644 --- a/src/dawn/native/d3d12/TextureD3D12.cpp +++ b/src/dawn/native/d3d12/TextureD3D12.cpp
@@ -33,6 +33,7 @@ #include "absl/numeric/bits.h" #include "dawn/common/Constants.h" #include "dawn/common/Math.h" +#include "dawn/native/ChainUtils.h" #include "dawn/native/DynamicUploader.h" #include "dawn/native/EnumMaskIterator.h" #include "dawn/native/Error.h"
diff --git a/src/dawn/native/metal/DeviceMTL.mm b/src/dawn/native/metal/DeviceMTL.mm index 62e8daa4..112ecf8 100644 --- a/src/dawn/native/metal/DeviceMTL.mm +++ b/src/dawn/native/metal/DeviceMTL.mm
@@ -31,7 +31,7 @@ #include "dawn/common/Platform.h" #include "dawn/native/Adapter.h" #include "dawn/native/BackendConnection.h" -#include "dawn/native/ChainUtils_autogen.h" +#include "dawn/native/ChainUtils.h" #include "dawn/native/Commands.h" #include "dawn/native/ErrorData.h" #include "dawn/native/EventManager.h"
diff --git a/src/dawn/native/metal/SwapChainMTL.mm b/src/dawn/native/metal/SwapChainMTL.mm index 753ed9c..981d415 100644 --- a/src/dawn/native/metal/SwapChainMTL.mm +++ b/src/dawn/native/metal/SwapChainMTL.mm
@@ -27,6 +27,7 @@ #include "dawn/native/metal/SwapChainMTL.h" +#include "dawn/native/ChainUtils.h" #include "dawn/native/Surface.h" #include "dawn/native/metal/DeviceMTL.h" #include "dawn/native/metal/TextureMTL.h"
diff --git a/src/dawn/native/metal/TextureMTL.mm b/src/dawn/native/metal/TextureMTL.mm index f3c339d..d2b34bf 100644 --- a/src/dawn/native/metal/TextureMTL.mm +++ b/src/dawn/native/metal/TextureMTL.mm
@@ -32,6 +32,7 @@ #include "dawn/common/IOSurfaceUtils.h" #include "dawn/common/Math.h" #include "dawn/common/Platform.h" +#include "dawn/native/ChainUtils.h" #include "dawn/native/DynamicUploader.h" #include "dawn/native/EnumMaskIterator.h" #include "dawn/native/metal/BufferMTL.h"
diff --git a/src/dawn/native/null/DeviceNull.cpp b/src/dawn/native/null/DeviceNull.cpp index dafc8e7d6..7e7198c 100644 --- a/src/dawn/native/null/DeviceNull.cpp +++ b/src/dawn/native/null/DeviceNull.cpp
@@ -31,6 +31,7 @@ #include <utility> #include "dawn/native/BackendConnection.h" +#include "dawn/native/ChainUtils.h" #include "dawn/native/Commands.h" #include "dawn/native/ErrorData.h" #include "dawn/native/Instance.h"
diff --git a/src/dawn/native/opengl/DeviceGL.cpp b/src/dawn/native/opengl/DeviceGL.cpp index e5fa779..765e73f 100644 --- a/src/dawn/native/opengl/DeviceGL.cpp +++ b/src/dawn/native/opengl/DeviceGL.cpp
@@ -31,6 +31,7 @@ #include "dawn/common/Log.h" #include "dawn/native/BackendConnection.h" +#include "dawn/native/ChainUtils.h" #include "dawn/native/ErrorData.h" #include "dawn/native/Instance.h" #include "dawn/native/opengl/BindGroupGL.h"
diff --git a/src/dawn/native/opengl/TextureGL.cpp b/src/dawn/native/opengl/TextureGL.cpp index 462c653..3afaa4e 100644 --- a/src/dawn/native/opengl/TextureGL.cpp +++ b/src/dawn/native/opengl/TextureGL.cpp
@@ -33,6 +33,7 @@ #include "dawn/common/Assert.h" #include "dawn/common/Constants.h" #include "dawn/common/Math.h" +#include "dawn/native/ChainUtils.h" #include "dawn/native/EnumMaskIterator.h" #include "dawn/native/opengl/BufferGL.h" #include "dawn/native/opengl/CommandBufferGL.h"
diff --git a/src/dawn/native/vulkan/SwapChainVk.cpp b/src/dawn/native/vulkan/SwapChainVk.cpp index 6b7e4ca..37def95 100644 --- a/src/dawn/native/vulkan/SwapChainVk.cpp +++ b/src/dawn/native/vulkan/SwapChainVk.cpp
@@ -32,6 +32,7 @@ #include <utility> #include "dawn/common/Compiler.h" +#include "dawn/native/ChainUtils.h" #include "dawn/native/Instance.h" #include "dawn/native/Surface.h" #include "dawn/native/vulkan/BackendVk.h"
diff --git a/src/dawn/native/vulkan/TextureVk.cpp b/src/dawn/native/vulkan/TextureVk.cpp index 214e778..651af6d 100644 --- a/src/dawn/native/vulkan/TextureVk.cpp +++ b/src/dawn/native/vulkan/TextureVk.cpp
@@ -31,6 +31,7 @@ #include "dawn/common/Assert.h" #include "dawn/common/Math.h" +#include "dawn/native/ChainUtils.h" #include "dawn/native/DynamicUploader.h" #include "dawn/native/EnumMaskIterator.h" #include "dawn/native/Error.h"
diff --git a/src/dawn/tests/unittests/native/AllowedErrorTests.cpp b/src/dawn/tests/unittests/native/AllowedErrorTests.cpp index b6e5a8c..08bdcacb 100644 --- a/src/dawn/tests/unittests/native/AllowedErrorTests.cpp +++ b/src/dawn/tests/unittests/native/AllowedErrorTests.cpp
@@ -30,6 +30,7 @@ #include <string_view> #include <utility> +#include "dawn/native/ChainUtils.h" #include "dawn/tests/MockCallback.h" #include "dawn/webgpu_cpp.h" #include "mocks/BufferMock.h"
diff --git a/src/dawn/tests/unittests/native/DestroyObjectTests.cpp b/src/dawn/tests/unittests/native/DestroyObjectTests.cpp index 93e0d8f..003122c 100644 --- a/src/dawn/tests/unittests/native/DestroyObjectTests.cpp +++ b/src/dawn/tests/unittests/native/DestroyObjectTests.cpp
@@ -30,6 +30,7 @@ #include <utility> #include <vector> +#include "dawn/native/ChainUtils.h" #include "dawn/native/Toggles.h" #include "dawn/native/utils/WGPUHelpers.h" #include "dawn/tests/DawnNativeTest.h"