[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));