[YCbCr Samplers] Pass UnpackedPtr TextureViewDescriptor before chaining Pass UnpackedPtr<TextureViewDescriptor> to ValidateTextureViewDescriptor in preparation of using the unpacked ptr there for further chained validations. Change-Id: Iccee835393168bca96bc97e48f81a4f2cc18c591 Bug: dawn:2476 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/185460 Commit-Queue: Saifuddin Hitawala <hitawala@chromium.org> Reviewed-by: Austin Eng <enga@chromium.org>
diff --git a/src/dawn/native/Device.cpp b/src/dawn/native/Device.cpp index 7747ec9..3bdcc40 100644 --- a/src/dawn/native/Device.cpp +++ b/src/dawn/native/Device.cpp
@@ -2267,18 +2267,22 @@ ResultOrError<Ref<TextureViewBase>> DeviceBase::CreateTextureView( TextureBase* texture, - const TextureViewDescriptor* descriptor) { + const TextureViewDescriptor* descriptorOrig) { DAWN_TRY(ValidateIsAlive()); DAWN_TRY(ValidateObject(texture)); TextureViewDescriptor desc; - DAWN_TRY_ASSIGN(desc, GetTextureViewDescriptorWithDefaults(texture, descriptor)); + DAWN_TRY_ASSIGN(desc, GetTextureViewDescriptorWithDefaults(texture, descriptorOrig)); + UnpackedPtr<TextureViewDescriptor> descriptor; if (IsValidationEnabled()) { - DAWN_TRY_CONTEXT(ValidateTextureViewDescriptor(this, texture, &desc), - "validating %s against %s.", &desc, texture); + DAWN_TRY_ASSIGN_CONTEXT(descriptor, ValidateAndUnpack(&desc), "validating %s.", &desc); + DAWN_TRY_CONTEXT(ValidateTextureViewDescriptor(this, texture, descriptor), + "validating %s against %s.", descriptor, texture); + } else { + descriptor = Unpack(&desc); } - return CreateTextureViewImpl(texture, &desc); + return CreateTextureViewImpl(texture, descriptor); } ResultOrError<wgpu::TextureUsage> DeviceBase::GetSupportedSurfaceUsage(
diff --git a/src/dawn/native/Device.h b/src/dawn/native/Device.h index e07db40..3c7b5d5 100644 --- a/src/dawn/native/Device.h +++ b/src/dawn/native/Device.h
@@ -491,7 +491,7 @@ const UnpackedPtr<TextureDescriptor>& descriptor) = 0; virtual ResultOrError<Ref<TextureViewBase>> CreateTextureViewImpl( TextureBase* texture, - const TextureViewDescriptor* descriptor) = 0; + const UnpackedPtr<TextureViewDescriptor>& descriptor) = 0; virtual Ref<ComputePipelineBase> CreateUninitializedComputePipelineImpl( const UnpackedPtr<ComputePipelineDescriptor>& descriptor) = 0; virtual Ref<RenderPipelineBase> CreateUninitializedRenderPipelineImpl(
diff --git a/src/dawn/native/Texture.cpp b/src/dawn/native/Texture.cpp index 82ab99e2..76fb4af 100644 --- a/src/dawn/native/Texture.cpp +++ b/src/dawn/native/Texture.cpp
@@ -226,9 +226,10 @@ return {}; } -MaybeError ValidateTextureViewDimensionCompatibility(const DeviceBase* device, - const TextureBase* texture, - const TextureViewDescriptor* descriptor) { +MaybeError ValidateTextureViewDimensionCompatibility( + const DeviceBase* device, + const TextureBase* texture, + const UnpackedPtr<TextureViewDescriptor>& descriptor) { DAWN_INVALID_IF(!IsArrayLayerValidForTextureViewDimension(descriptor->dimension, descriptor->arrayLayerCount), "The dimension (%s) of the texture view is not compatible with the layer count " @@ -587,7 +588,7 @@ MaybeError ValidateTextureViewDescriptor(const DeviceBase* device, const TextureBase* texture, - const TextureViewDescriptor* descriptor) { + const UnpackedPtr<TextureViewDescriptor>& descriptor) { DAWN_INVALID_IF(descriptor->nextInChain != nullptr, "nextInChain must be nullptr."); // Parent texture should have been already validated. @@ -1248,7 +1249,8 @@ // TextureViewBase -TextureViewBase::TextureViewBase(TextureBase* texture, const TextureViewDescriptor* descriptor) +TextureViewBase::TextureViewBase(TextureBase* texture, + const UnpackedPtr<TextureViewDescriptor>& descriptor) : ApiObjectBase(texture->GetDevice(), descriptor->label), mTexture(texture), mFormat(GetDevice()->GetValidInternalFormat(descriptor->format)),
diff --git a/src/dawn/native/Texture.h b/src/dawn/native/Texture.h index ad1f9f9..76f41e9 100644 --- a/src/dawn/native/Texture.h +++ b/src/dawn/native/Texture.h
@@ -58,7 +58,7 @@ std::optional<wgpu::TextureUsage> allowedSharedTextureMemoryUsage = std::nullopt); MaybeError ValidateTextureViewDescriptor(const DeviceBase* device, const TextureBase* texture, - const TextureViewDescriptor* descriptor); + const UnpackedPtr<TextureViewDescriptor>& descriptor); ResultOrError<TextureViewDescriptor> GetTextureViewDescriptorWithDefaults( const TextureBase* texture, const TextureViewDescriptor* descriptor); @@ -215,7 +215,7 @@ class TextureViewBase : public ApiObjectBase { public: - TextureViewBase(TextureBase* texture, const TextureViewDescriptor* descriptor); + TextureViewBase(TextureBase* texture, const UnpackedPtr<TextureViewDescriptor>& descriptor); ~TextureViewBase() override; static Ref<TextureViewBase> MakeError(DeviceBase* device, const char* label = nullptr);
diff --git a/src/dawn/native/d3d11/DeviceD3D11.cpp b/src/dawn/native/d3d11/DeviceD3D11.cpp index f77aadb..ade4460 100644 --- a/src/dawn/native/d3d11/DeviceD3D11.cpp +++ b/src/dawn/native/d3d11/DeviceD3D11.cpp
@@ -227,7 +227,7 @@ ResultOrError<Ref<TextureViewBase>> Device::CreateTextureViewImpl( TextureBase* texture, - const TextureViewDescriptor* descriptor) { + const UnpackedPtr<TextureViewDescriptor>& descriptor) { return TextureView::Create(texture, descriptor); }
diff --git a/src/dawn/native/d3d11/DeviceD3D11.h b/src/dawn/native/d3d11/DeviceD3D11.h index 26a8e36..8d8b80e 100644 --- a/src/dawn/native/d3d11/DeviceD3D11.h +++ b/src/dawn/native/d3d11/DeviceD3D11.h
@@ -134,7 +134,7 @@ const UnpackedPtr<TextureDescriptor>& descriptor) override; ResultOrError<Ref<TextureViewBase>> CreateTextureViewImpl( TextureBase* texture, - const TextureViewDescriptor* descriptor) override; + const UnpackedPtr<TextureViewDescriptor>& descriptor) override; Ref<ComputePipelineBase> CreateUninitializedComputePipelineImpl( const UnpackedPtr<ComputePipelineDescriptor>& descriptor) override; Ref<RenderPipelineBase> CreateUninitializedRenderPipelineImpl(
diff --git a/src/dawn/native/d3d11/TextureD3D11.cpp b/src/dawn/native/d3d11/TextureD3D11.cpp index 62107d1..41781d5 100644 --- a/src/dawn/native/d3d11/TextureD3D11.cpp +++ b/src/dawn/native/d3d11/TextureD3D11.cpp
@@ -1228,7 +1228,7 @@ // static Ref<TextureView> TextureView::Create(TextureBase* texture, - const TextureViewDescriptor* descriptor) { + const UnpackedPtr<TextureViewDescriptor>& descriptor) { return AcquireRef(new TextureView(texture, descriptor)); }
diff --git a/src/dawn/native/d3d11/TextureD3D11.h b/src/dawn/native/d3d11/TextureD3D11.h index 2ea194a..3c0d16f 100644 --- a/src/dawn/native/d3d11/TextureD3D11.h +++ b/src/dawn/native/d3d11/TextureD3D11.h
@@ -207,7 +207,8 @@ class TextureView final : public TextureViewBase { public: - static Ref<TextureView> Create(TextureBase* texture, const TextureViewDescriptor* descriptor); + static Ref<TextureView> Create(TextureBase* texture, + const UnpackedPtr<TextureViewDescriptor>& descriptor); ResultOrError<ID3D11ShaderResourceView*> GetOrCreateD3D11ShaderResourceView(); ResultOrError<ID3D11RenderTargetView*> GetOrCreateD3D11RenderTargetView(
diff --git a/src/dawn/native/d3d12/DeviceD3D12.cpp b/src/dawn/native/d3d12/DeviceD3D12.cpp index f9fa034..a8e9231 100644 --- a/src/dawn/native/d3d12/DeviceD3D12.cpp +++ b/src/dawn/native/d3d12/DeviceD3D12.cpp
@@ -411,7 +411,7 @@ } ResultOrError<Ref<TextureViewBase>> Device::CreateTextureViewImpl( TextureBase* texture, - const TextureViewDescriptor* descriptor) { + const UnpackedPtr<TextureViewDescriptor>& descriptor) { return TextureView::Create(texture, descriptor); } void Device::InitializeComputePipelineAsyncImpl(Ref<CreateComputePipelineAsyncEvent> event) {
diff --git a/src/dawn/native/d3d12/DeviceD3D12.h b/src/dawn/native/d3d12/DeviceD3D12.h index 0fe5084..9ac8aa3 100644 --- a/src/dawn/native/d3d12/DeviceD3D12.h +++ b/src/dawn/native/d3d12/DeviceD3D12.h
@@ -214,7 +214,7 @@ const UnpackedPtr<TextureDescriptor>& descriptor) override; ResultOrError<Ref<TextureViewBase>> CreateTextureViewImpl( TextureBase* texture, - const TextureViewDescriptor* descriptor) override; + const UnpackedPtr<TextureViewDescriptor>& descriptor) override; Ref<ComputePipelineBase> CreateUninitializedComputePipelineImpl( const UnpackedPtr<ComputePipelineDescriptor>& descriptor) override; Ref<RenderPipelineBase> CreateUninitializedRenderPipelineImpl(
diff --git a/src/dawn/native/d3d12/TextureD3D12.cpp b/src/dawn/native/d3d12/TextureD3D12.cpp index 77810be..39d01f2 100644 --- a/src/dawn/native/d3d12/TextureD3D12.cpp +++ b/src/dawn/native/d3d12/TextureD3D12.cpp
@@ -956,11 +956,11 @@ // static Ref<TextureView> TextureView::Create(TextureBase* texture, - const TextureViewDescriptor* descriptor) { + const UnpackedPtr<TextureViewDescriptor>& descriptor) { return AcquireRef(new TextureView(texture, descriptor)); } -TextureView::TextureView(TextureBase* texture, const TextureViewDescriptor* descriptor) +TextureView::TextureView(TextureBase* texture, const UnpackedPtr<TextureViewDescriptor>& descriptor) : TextureViewBase(texture, descriptor) { mSrvDesc.Format = d3d::DXGITextureFormat(descriptor->format); mSrvDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING;
diff --git a/src/dawn/native/d3d12/TextureD3D12.h b/src/dawn/native/d3d12/TextureD3D12.h index 0a017a2..2f701f6 100644 --- a/src/dawn/native/d3d12/TextureD3D12.h +++ b/src/dawn/native/d3d12/TextureD3D12.h
@@ -182,7 +182,8 @@ class TextureView final : public TextureViewBase { public: - static Ref<TextureView> Create(TextureBase* texture, const TextureViewDescriptor* descriptor); + static Ref<TextureView> Create(TextureBase* texture, + const UnpackedPtr<TextureViewDescriptor>& descriptor); DXGI_FORMAT GetD3D12Format() const; @@ -192,7 +193,7 @@ D3D12_UNORDERED_ACCESS_VIEW_DESC GetUAVDescriptor() const; private: - TextureView(TextureBase* texture, const TextureViewDescriptor* descriptor); + TextureView(TextureBase* texture, const UnpackedPtr<TextureViewDescriptor>& descriptor); D3D12_SHADER_RESOURCE_VIEW_DESC mSrvDesc; };
diff --git a/src/dawn/native/metal/DeviceMTL.h b/src/dawn/native/metal/DeviceMTL.h index 0beebc7..cb4d386 100644 --- a/src/dawn/native/metal/DeviceMTL.h +++ b/src/dawn/native/metal/DeviceMTL.h
@@ -120,7 +120,7 @@ const UnpackedPtr<TextureDescriptor>& descriptor) override; ResultOrError<Ref<TextureViewBase>> CreateTextureViewImpl( TextureBase* texture, - const TextureViewDescriptor* descriptor) override; + const UnpackedPtr<TextureViewDescriptor>& descriptor) override; Ref<ComputePipelineBase> CreateUninitializedComputePipelineImpl( const UnpackedPtr<ComputePipelineDescriptor>& descriptor) override; Ref<RenderPipelineBase> CreateUninitializedRenderPipelineImpl(
diff --git a/src/dawn/native/metal/DeviceMTL.mm b/src/dawn/native/metal/DeviceMTL.mm index 59bef44..343472c 100644 --- a/src/dawn/native/metal/DeviceMTL.mm +++ b/src/dawn/native/metal/DeviceMTL.mm
@@ -239,7 +239,7 @@ } ResultOrError<Ref<TextureViewBase>> Device::CreateTextureViewImpl( TextureBase* texture, - const TextureViewDescriptor* descriptor) { + const UnpackedPtr<TextureViewDescriptor>& descriptor) { return TextureView::Create(texture, descriptor); } void Device::InitializeComputePipelineAsyncImpl(Ref<CreateComputePipelineAsyncEvent> event) {
diff --git a/src/dawn/native/metal/TextureMTL.h b/src/dawn/native/metal/TextureMTL.h index 0bc8eea..8d63897 100644 --- a/src/dawn/native/metal/TextureMTL.h +++ b/src/dawn/native/metal/TextureMTL.h
@@ -105,8 +105,9 @@ class TextureView final : public TextureViewBase { public: - static ResultOrError<Ref<TextureView>> Create(TextureBase* texture, - const TextureViewDescriptor* descriptor); + static ResultOrError<Ref<TextureView>> Create( + TextureBase* texture, + const UnpackedPtr<TextureViewDescriptor>& descriptor); id<MTLTexture> GetMTLTexture() const; @@ -119,7 +120,7 @@ private: using TextureViewBase::TextureViewBase; - MaybeError Initialize(const TextureViewDescriptor* descriptor); + MaybeError Initialize(const UnpackedPtr<TextureViewDescriptor>& descriptor); void DestroyImpl() override; void SetLabelImpl() override;
diff --git a/src/dawn/native/metal/TextureMTL.mm b/src/dawn/native/metal/TextureMTL.mm index 1538de0..ec1c571 100644 --- a/src/dawn/native/metal/TextureMTL.mm +++ b/src/dawn/native/metal/TextureMTL.mm
@@ -101,8 +101,9 @@ } } -bool RequiresCreatingNewTextureView(const TextureBase* texture, - const TextureViewDescriptor* textureViewDescriptor) { +bool RequiresCreatingNewTextureView( + const TextureBase* texture, + const UnpackedPtr<TextureViewDescriptor>& textureViewDescriptor) { constexpr wgpu::TextureUsage kShaderUsageNeedsView = wgpu::TextureUsage::StorageBinding | wgpu::TextureUsage::TextureBinding; constexpr wgpu::TextureUsage kUsageNeedsView = kShaderUsageNeedsView | @@ -783,14 +784,15 @@ } // static -ResultOrError<Ref<TextureView>> TextureView::Create(TextureBase* texture, - const TextureViewDescriptor* descriptor) { +ResultOrError<Ref<TextureView>> TextureView::Create( + TextureBase* texture, + const UnpackedPtr<TextureViewDescriptor>& descriptor) { Ref<TextureView> view = AcquireRef(new TextureView(texture, descriptor)); DAWN_TRY(view->Initialize(descriptor)); return view; } -MaybeError TextureView::Initialize(const TextureViewDescriptor* descriptor) { +MaybeError TextureView::Initialize(const UnpackedPtr<TextureViewDescriptor>& descriptor) { DeviceBase* device = GetDevice(); Texture* texture = ToBackend(GetTexture());
diff --git a/src/dawn/native/null/DeviceNull.cpp b/src/dawn/native/null/DeviceNull.cpp index db967bb..2bbd98b 100644 --- a/src/dawn/native/null/DeviceNull.cpp +++ b/src/dawn/native/null/DeviceNull.cpp
@@ -246,7 +246,7 @@ } ResultOrError<Ref<TextureViewBase>> Device::CreateTextureViewImpl( TextureBase* texture, - const TextureViewDescriptor* descriptor) { + const UnpackedPtr<TextureViewDescriptor>& descriptor) { return AcquireRef(new TextureView(texture, descriptor)); }
diff --git a/src/dawn/native/null/DeviceNull.h b/src/dawn/native/null/DeviceNull.h index b497460..6997d2d 100644 --- a/src/dawn/native/null/DeviceNull.h +++ b/src/dawn/native/null/DeviceNull.h
@@ -170,7 +170,7 @@ const UnpackedPtr<TextureDescriptor>& descriptor) override; ResultOrError<Ref<TextureViewBase>> CreateTextureViewImpl( TextureBase* texture, - const TextureViewDescriptor* descriptor) override; + const UnpackedPtr<TextureViewDescriptor>& descriptor) override; ResultOrError<wgpu::TextureUsage> GetSupportedSurfaceUsageImpl( const Surface* surface) const override;
diff --git a/src/dawn/native/opengl/DeviceGL.cpp b/src/dawn/native/opengl/DeviceGL.cpp index 691b9e4..2dbd813 100644 --- a/src/dawn/native/opengl/DeviceGL.cpp +++ b/src/dawn/native/opengl/DeviceGL.cpp
@@ -272,7 +272,7 @@ } ResultOrError<Ref<TextureViewBase>> Device::CreateTextureViewImpl( TextureBase* texture, - const TextureViewDescriptor* descriptor) { + const UnpackedPtr<TextureViewDescriptor>& descriptor) { return AcquireRef(new TextureView(texture, descriptor)); }
diff --git a/src/dawn/native/opengl/DeviceGL.h b/src/dawn/native/opengl/DeviceGL.h index 0e312ca..e98b8a4 100644 --- a/src/dawn/native/opengl/DeviceGL.h +++ b/src/dawn/native/opengl/DeviceGL.h
@@ -137,7 +137,7 @@ const UnpackedPtr<TextureDescriptor>& descriptor) override; ResultOrError<Ref<TextureViewBase>> CreateTextureViewImpl( TextureBase* texture, - const TextureViewDescriptor* descriptor) override; + const UnpackedPtr<TextureViewDescriptor>& descriptor) override; Ref<ComputePipelineBase> CreateUninitializedComputePipelineImpl( const UnpackedPtr<ComputePipelineDescriptor>& descriptor) override; Ref<RenderPipelineBase> CreateUninitializedRenderPipelineImpl(
diff --git a/src/dawn/native/opengl/TextureGL.cpp b/src/dawn/native/opengl/TextureGL.cpp index d60928e..fd53496 100644 --- a/src/dawn/native/opengl/TextureGL.cpp +++ b/src/dawn/native/opengl/TextureGL.cpp
@@ -98,8 +98,9 @@ DAWN_UNREACHABLE(); } -bool RequiresCreatingNewTextureView(const TextureBase* texture, - const TextureViewDescriptor* textureViewDescriptor) { +bool RequiresCreatingNewTextureView( + const TextureBase* texture, + const UnpackedPtr<TextureViewDescriptor>& textureViewDescriptor) { constexpr wgpu::TextureUsage kShaderUsageNeedsView = wgpu::TextureUsage::StorageBinding | wgpu::TextureUsage::TextureBinding; constexpr wgpu::TextureUsage kUsageNeedsView = @@ -567,7 +568,7 @@ // TextureView -TextureView::TextureView(TextureBase* texture, const TextureViewDescriptor* descriptor) +TextureView::TextureView(TextureBase* texture, const UnpackedPtr<TextureViewDescriptor>& descriptor) : TextureViewBase(texture, descriptor), mOwnsHandle(false) { mTarget = TargetForTextureViewDimension(descriptor->dimension, descriptor->arrayLayerCount, texture->GetSampleCount());
diff --git a/src/dawn/native/opengl/TextureGL.h b/src/dawn/native/opengl/TextureGL.h index c2a3ee1..f25d01f 100644 --- a/src/dawn/native/opengl/TextureGL.h +++ b/src/dawn/native/opengl/TextureGL.h
@@ -66,7 +66,7 @@ class TextureView final : public TextureViewBase { public: - TextureView(TextureBase* texture, const TextureViewDescriptor* descriptor); + TextureView(TextureBase* texture, const UnpackedPtr<TextureViewDescriptor>& descriptor); GLuint GetHandle() const; GLenum GetGLTarget() const;
diff --git a/src/dawn/native/vulkan/DeviceVk.cpp b/src/dawn/native/vulkan/DeviceVk.cpp index a36fe6c..8798ba0 100644 --- a/src/dawn/native/vulkan/DeviceVk.cpp +++ b/src/dawn/native/vulkan/DeviceVk.cpp
@@ -227,7 +227,7 @@ } ResultOrError<Ref<TextureViewBase>> Device::CreateTextureViewImpl( TextureBase* texture, - const TextureViewDescriptor* descriptor) { + const UnpackedPtr<TextureViewDescriptor>& descriptor) { return TextureView::Create(texture, descriptor); } Ref<PipelineCacheBase> Device::GetOrCreatePipelineCacheImpl(const CacheKey& key) {
diff --git a/src/dawn/native/vulkan/DeviceVk.h b/src/dawn/native/vulkan/DeviceVk.h index 28d22d8..8e3c4a5 100644 --- a/src/dawn/native/vulkan/DeviceVk.h +++ b/src/dawn/native/vulkan/DeviceVk.h
@@ -153,7 +153,7 @@ const UnpackedPtr<TextureDescriptor>& descriptor) override; ResultOrError<Ref<TextureViewBase>> CreateTextureViewImpl( TextureBase* texture, - const TextureViewDescriptor* descriptor) override; + const UnpackedPtr<TextureViewDescriptor>& descriptor) override; Ref<ComputePipelineBase> CreateUninitializedComputePipelineImpl( const UnpackedPtr<ComputePipelineDescriptor>& descriptor) override; Ref<RenderPipelineBase> CreateUninitializedRenderPipelineImpl(
diff --git a/src/dawn/native/vulkan/TextureVk.cpp b/src/dawn/native/vulkan/TextureVk.cpp index 6700baf..df558e5 100644 --- a/src/dawn/native/vulkan/TextureVk.cpp +++ b/src/dawn/native/vulkan/TextureVk.cpp
@@ -1562,7 +1562,7 @@ ColorAttachmentIndex ca0(uint8_t(0)); DAWN_TRY_ASSIGN(beginCmd.colorAttachments[ca0].view, - TextureView::Create(this, &viewDesc)); + TextureView::Create(this, Unpack(&viewDesc))); RenderPassColorAttachment colorAttachment{}; colorAttachment.view = beginCmd.colorAttachments[ca0].view.Get(); @@ -1724,14 +1724,15 @@ } // static -ResultOrError<Ref<TextureView>> TextureView::Create(TextureBase* texture, - const TextureViewDescriptor* descriptor) { +ResultOrError<Ref<TextureView>> TextureView::Create( + TextureBase* texture, + const UnpackedPtr<TextureViewDescriptor>& descriptor) { Ref<TextureView> view = AcquireRef(new TextureView(texture, descriptor)); DAWN_TRY(view->Initialize(descriptor)); return view; } -MaybeError TextureView::Initialize(const TextureViewDescriptor* descriptor) { +MaybeError TextureView::Initialize(const UnpackedPtr<TextureViewDescriptor>& descriptor) { if ((GetTexture()->GetInternalUsage() & ~(wgpu::TextureUsage::CopySrc | wgpu::TextureUsage::CopyDst)) == 0) { // If the texture view has no other usage than CopySrc and CopyDst, then it can't
diff --git a/src/dawn/native/vulkan/TextureVk.h b/src/dawn/native/vulkan/TextureVk.h index 176b1fd..f38fd7d 100644 --- a/src/dawn/native/vulkan/TextureVk.h +++ b/src/dawn/native/vulkan/TextureVk.h
@@ -234,8 +234,9 @@ class TextureView final : public TextureViewBase { public: - static ResultOrError<Ref<TextureView>> Create(TextureBase* texture, - const TextureViewDescriptor* descriptor); + static ResultOrError<Ref<TextureView>> Create( + TextureBase* texture, + const UnpackedPtr<TextureViewDescriptor>& descriptor); VkImageView GetHandle() const; VkImageView GetHandleForBGRA8UnormStorage() const; @@ -245,7 +246,7 @@ ~TextureView() override; void DestroyImpl() override; using TextureViewBase::TextureViewBase; - MaybeError Initialize(const TextureViewDescriptor* descriptor); + MaybeError Initialize(const UnpackedPtr<TextureViewDescriptor>& descriptor); VkImageViewCreateInfo GetCreateInfo(wgpu::TextureFormat format, wgpu::TextureViewDimension dimension,
diff --git a/src/dawn/tests/unittests/native/DestroyObjectTests.cpp b/src/dawn/tests/unittests/native/DestroyObjectTests.cpp index d967221..3e35b3d 100644 --- a/src/dawn/tests/unittests/native/DestroyObjectTests.cpp +++ b/src/dawn/tests/unittests/native/DestroyObjectTests.cpp
@@ -372,7 +372,7 @@ TextureViewDescriptor textureViewDesc = {}; textureViewDesc.format = wgpu::TextureFormat::RGBA8Unorm; Ref<TextureViewMock> textureViewMock = - AcquireRef(new NiceMock<TextureViewMock>(textureMock.Get(), &textureViewDesc)); + AcquireRef(new NiceMock<TextureViewMock>(textureMock.Get(), Unpack(&textureViewDesc))); ExternalTextureDescriptor desc = {}; std::array<float, 12> placeholderConstantArray; @@ -402,7 +402,7 @@ TextureViewDescriptor textureViewDesc = {}; textureViewDesc.format = wgpu::TextureFormat::RGBA8Unorm; Ref<TextureViewMock> textureViewMock = - AcquireRef(new NiceMock<TextureViewMock>(textureMock.Get(), &textureViewDesc)); + AcquireRef(new NiceMock<TextureViewMock>(textureMock.Get(), Unpack(&textureViewDesc))); ExternalTextureDescriptor desc = {}; std::array<float, 12> placeholderConstantArray; @@ -436,7 +436,7 @@ TextureViewDescriptor textureViewDesc = {}; textureViewDesc.format = wgpu::TextureFormat::RGBA8Unorm; Ref<TextureViewMock> textureViewMock = - AcquireRef(new NiceMock<TextureViewMock>(textureMock.Get(), &textureViewDesc)); + AcquireRef(new NiceMock<TextureViewMock>(textureMock.Get(), Unpack(&textureViewDesc))); ExternalTextureDescriptor desc = {}; std::array<float, 12> placeholderConstantArray; @@ -712,7 +712,7 @@ { // Explicitly destroy the texture view. Ref<TextureViewMock> textureViewMock = - AcquireRef(new TextureViewMock(textureMock.Get(), &desc)); + AcquireRef(new TextureViewMock(textureMock.Get(), Unpack(&desc))); EXPECT_CALL(*textureViewMock.Get(), DestroyImpl).Times(1); EXPECT_TRUE(textureViewMock->IsAlive()); @@ -722,7 +722,7 @@ { // Destroying the owning texture should cause the view to be destroyed as well. Ref<TextureViewMock> textureViewMock = - AcquireRef(new TextureViewMock(textureMock.Get(), &desc)); + AcquireRef(new TextureViewMock(textureMock.Get(), Unpack(&desc))); EXPECT_CALL(*textureViewMock.Get(), DestroyImpl).Times(1); EXPECT_TRUE(textureViewMock->IsAlive()); @@ -742,7 +742,7 @@ TextureViewDescriptor viewDesc = {}; viewDesc.format = wgpu::TextureFormat::RGBA8Unorm; Ref<TextureViewMock> textureViewMock = - AcquireRef(new TextureViewMock(textureMock.Get(), &viewDesc)); + AcquireRef(new TextureViewMock(textureMock.Get(), Unpack(&viewDesc))); EXPECT_CALL(*textureViewMock.Get(), DestroyImpl).Times(1); EXPECT_CALL(*mDeviceMock, CreateTextureViewImpl(textureMock.Get(), _)) @@ -770,7 +770,7 @@ viewDesc.format = wgpu::TextureFormat::RGBA8Unorm; Ref<TextureViewMock> textureViewMock = - AcquireRef(new TextureViewMock(textureMock.Get(), &viewDesc)); + AcquireRef(new TextureViewMock(textureMock.Get(), Unpack(&viewDesc))); EXPECT_CALL(*textureViewMock.Get(), DestroyImpl).Times(1); { ScopedRawPtrExpectation scoped(textureViewMock.Get()); @@ -967,7 +967,7 @@ desc.format = wgpu::TextureFormat::RGBA8Unorm; ScopedRawPtrExpectation scoped(mDeviceMock); - textureViewMock = AcquireRef(new TextureViewMock(textureMock.Get(), &desc)); + textureViewMock = AcquireRef(new TextureViewMock(textureMock.Get(), Unpack(&desc))); EXPECT_CALL(*mDeviceMock, CreateTextureViewImpl).WillOnce(Return(textureViewMock)); textureView = texture.CreateView(ToCppAPI(&desc)); }
diff --git a/src/dawn/tests/unittests/native/mocks/DeviceMock.cpp b/src/dawn/tests/unittests/native/mocks/DeviceMock.cpp index 16b33bf..f37a3ca 100644 --- a/src/dawn/tests/unittests/native/mocks/DeviceMock.cpp +++ b/src/dawn/tests/unittests/native/mocks/DeviceMock.cpp
@@ -104,8 +104,8 @@ })); ON_CALL(*this, CreateTextureViewImpl) .WillByDefault(WithArgs<0, 1>( - [](TextureBase* texture, - const TextureViewDescriptor* descriptor) -> ResultOrError<Ref<TextureViewBase>> { + [](TextureBase* texture, const UnpackedPtr<TextureViewDescriptor>& descriptor) + -> ResultOrError<Ref<TextureViewBase>> { return AcquireRef(new NiceMock<TextureViewMock>(texture, descriptor)); })); ON_CALL(*this, CreateUninitializedComputePipelineImpl)
diff --git a/src/dawn/tests/unittests/native/mocks/DeviceMock.h b/src/dawn/tests/unittests/native/mocks/DeviceMock.h index 87c41ee..9d11610 100644 --- a/src/dawn/tests/unittests/native/mocks/DeviceMock.h +++ b/src/dawn/tests/unittests/native/mocks/DeviceMock.h
@@ -132,7 +132,7 @@ (override)); MOCK_METHOD(ResultOrError<Ref<TextureViewBase>>, CreateTextureViewImpl, - (TextureBase*, const TextureViewDescriptor*), + (TextureBase*, const UnpackedPtr<TextureViewDescriptor>&), (override)); MOCK_METHOD(ResultOrError<wgpu::TextureUsage>,
diff --git a/src/dawn/tests/unittests/native/mocks/TextureMock.cpp b/src/dawn/tests/unittests/native/mocks/TextureMock.cpp index 2fc70a1..79b9e50 100644 --- a/src/dawn/tests/unittests/native/mocks/TextureMock.cpp +++ b/src/dawn/tests/unittests/native/mocks/TextureMock.cpp
@@ -41,7 +41,8 @@ TextureMock::~TextureMock() = default; -TextureViewMock::TextureViewMock(TextureBase* texture, const TextureViewDescriptor* descriptor) +TextureViewMock::TextureViewMock(TextureBase* texture, + const UnpackedPtr<TextureViewDescriptor>& descriptor) : TextureViewBase(texture, descriptor) { ON_CALL(*this, DestroyImpl).WillByDefault([this] { this->TextureViewBase::DestroyImpl(); }); }
diff --git a/src/dawn/tests/unittests/native/mocks/TextureMock.h b/src/dawn/tests/unittests/native/mocks/TextureMock.h index 5592357..0ce5aec 100644 --- a/src/dawn/tests/unittests/native/mocks/TextureMock.h +++ b/src/dawn/tests/unittests/native/mocks/TextureMock.h
@@ -48,7 +48,7 @@ class TextureViewMock : public TextureViewBase { public: - TextureViewMock(TextureBase* texture, const TextureViewDescriptor* descriptor); + TextureViewMock(TextureBase* texture, const UnpackedPtr<TextureViewDescriptor>& descriptor); ~TextureViewMock() override; MOCK_METHOD(void, DestroyImpl, (), (override));