gecko-dev/dom/webgpu/SharedTextureDMABuf.h
Jamie Nicol 73fc486eb6 Bug 1975457 - Rename webgpu::ExternalTexture to SharedTexture. r=webgpu-reviewers,nical
An ExternalTexture is a texture that is created and owned by gecko,
but shared with the webgpu implementation. It is used for webgpu
presentation. While this name describes the class well, it is
confusing due to webgpu having an entirely unrelated concept of
GPUExternalTexture.

This patch renames ExternalTexture, and all of its subclasses and
uses, to SharedTexture. This still describes the purpose accurately,
and has similarities to gl::SharedSurface which serves a similar
purpose for our webgl implementation.

Differential Revision: https://phabricator.services.mozilla.com/D255976
2025-07-03 19:02:24 +00:00

67 lines
2.1 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef GPU_SharedTextureDMABuf_H_
#define GPU_SharedTextureDMABuf_H_
#include "mozilla/gfx/FileHandleWrapper.h"
#include "mozilla/WeakPtr.h"
#include "mozilla/webgpu/SharedTexture.h"
#include "nsTArrayForwardDeclare.h"
class DMABufSurface;
namespace mozilla {
namespace webgpu {
class VkImageHandle;
class VkSemaphoreHandle;
class SharedTextureDMABuf final : public SharedTexture {
public:
static UniquePtr<SharedTextureDMABuf> Create(
WebGPUParent* aParent, const ffi::WGPUDeviceId aDeviceId,
const uint32_t aWidth, const uint32_t aHeight,
const struct ffi::WGPUTextureFormat aFormat,
const ffi::WGPUTextureUsages aUsage);
SharedTextureDMABuf(
WebGPUParent* aParent, const ffi::WGPUDeviceId aDeviceId,
UniquePtr<VkImageHandle>&& aVkImageHandle, const uint32_t aWidth,
const uint32_t aHeight, const struct ffi::WGPUTextureFormat aFormat,
const ffi::WGPUTextureUsages aUsage, RefPtr<DMABufSurface>&& aSurface,
const layers::SurfaceDescriptorDMABuf& aSurfaceDescriptor);
virtual ~SharedTextureDMABuf();
Maybe<layers::SurfaceDescriptor> ToSurfaceDescriptor() override;
void GetSnapshot(const ipc::Shmem& aDestShmem,
const gfx::IntSize& aSize) override;
SharedTextureDMABuf* AsSharedTextureDMABuf() override { return this; }
void onBeforeQueueSubmit(RawId aQueueId) override;
void CleanForRecycling() override;
UniqueFileHandle CloneDmaBufFd();
const ffi::WGPUVkImageHandle* GetHandle();
protected:
const WeakPtr<WebGPUParent> mParent;
const RawId mDeviceId;
UniquePtr<VkImageHandle> mVkImageHandle;
nsTArray<UniquePtr<VkSemaphoreHandle>> mVkSemaphoreHandles;
RefPtr<DMABufSurface> mSurface;
const layers::SurfaceDescriptorDMABuf mSurfaceDescriptor;
nsTArray<RefPtr<gfx::FileHandleWrapper>> mSemaphoreFds;
};
} // namespace webgpu
} // namespace mozilla
#endif // GPU_Texture_H_