зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1830762: populate standard attributes for `GPUTexture` r=webgpu-reviewers,webidl,saschanaz,jimb,jgilbert
Differential Revision: https://phabricator.services.mozilla.com/D176849
This commit is contained in:
Родитель
ce980655c2
Коммит
f9c7602b8b
|
@ -259,7 +259,7 @@ void Queue::CopyExternalImageToTexture(
|
||||||
const dom::GPUImageCopyExternalImage& aSource,
|
const dom::GPUImageCopyExternalImage& aSource,
|
||||||
const dom::GPUImageCopyTextureTagged& aDestination,
|
const dom::GPUImageCopyTextureTagged& aDestination,
|
||||||
const dom::GPUExtent3D& aCopySize, ErrorResult& aRv) {
|
const dom::GPUExtent3D& aCopySize, ErrorResult& aRv) {
|
||||||
const auto dstFormat = ToWebGLTexelFormat(aDestination.mTexture->mFormat);
|
const auto dstFormat = ToWebGLTexelFormat(aDestination.mTexture->Format());
|
||||||
if (dstFormat == WebGLTexelFormat::FormatNotSupportingAnyConversion) {
|
if (dstFormat == WebGLTexelFormat::FormatNotSupportingAnyConversion) {
|
||||||
aRv.ThrowInvalidStateError("Unsupported destination format");
|
aRv.ThrowInvalidStateError("Unsupported destination format");
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -9,7 +9,9 @@
|
||||||
#include "mozilla/webgpu/ffi/wgpu.h"
|
#include "mozilla/webgpu/ffi/wgpu.h"
|
||||||
#include "mozilla/webgpu/CanvasContext.h"
|
#include "mozilla/webgpu/CanvasContext.h"
|
||||||
#include "mozilla/dom/WebGPUBinding.h"
|
#include "mozilla/dom/WebGPUBinding.h"
|
||||||
|
#include "mozilla/webgpu/WebGPUTypes.h"
|
||||||
#include "TextureView.h"
|
#include "TextureView.h"
|
||||||
|
#include "Utility.h"
|
||||||
|
|
||||||
namespace mozilla::webgpu {
|
namespace mozilla::webgpu {
|
||||||
|
|
||||||
|
@ -91,7 +93,12 @@ Texture::Texture(Device* const aParent, RawId aId,
|
||||||
: ChildOf(aParent),
|
: ChildOf(aParent),
|
||||||
mId(aId),
|
mId(aId),
|
||||||
mFormat(aDesc.mFormat),
|
mFormat(aDesc.mFormat),
|
||||||
mBytesPerBlock(GetBytesPerBlock(aDesc.mFormat)) {}
|
mBytesPerBlock(GetBytesPerBlock(aDesc.mFormat)),
|
||||||
|
mSize(ConvertExtent(aDesc.mSize)),
|
||||||
|
mMipLevelCount(aDesc.mMipLevelCount),
|
||||||
|
mSampleCount(aDesc.mSampleCount),
|
||||||
|
mDimension(aDesc.mDimension),
|
||||||
|
mUsage(aDesc.mUsage) {}
|
||||||
|
|
||||||
Texture::~Texture() { Cleanup(); }
|
Texture::~Texture() { Cleanup(); }
|
||||||
|
|
||||||
|
|
|
@ -6,22 +6,23 @@
|
||||||
#ifndef GPU_Texture_H_
|
#ifndef GPU_Texture_H_
|
||||||
#define GPU_Texture_H_
|
#define GPU_Texture_H_
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
#include "mozilla/WeakPtr.h"
|
#include "mozilla/WeakPtr.h"
|
||||||
#include "nsWrapperCache.h"
|
#include "nsWrapperCache.h"
|
||||||
#include "ObjectModel.h"
|
#include "ObjectModel.h"
|
||||||
#include "mozilla/webgpu/WebGPUTypes.h"
|
#include "mozilla/webgpu/WebGPUTypes.h"
|
||||||
|
#include "mozilla/webgpu/ffi/wgpu.h"
|
||||||
|
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace dom {
|
namespace dom {
|
||||||
struct GPUTextureDescriptor;
|
struct GPUTextureDescriptor;
|
||||||
struct GPUTextureViewDescriptor;
|
struct GPUTextureViewDescriptor;
|
||||||
|
enum class GPUTextureDimension : uint8_t;
|
||||||
enum class GPUTextureFormat : uint8_t;
|
enum class GPUTextureFormat : uint8_t;
|
||||||
|
enum class GPUTextureUsageFlags : uint32_t;
|
||||||
} // namespace dom
|
} // namespace dom
|
||||||
|
|
||||||
namespace webgpu {
|
namespace webgpu {
|
||||||
namespace ffi {
|
|
||||||
struct WGPUTextureViewDescriptor;
|
|
||||||
} // namespace ffi
|
|
||||||
|
|
||||||
class CanvasContext;
|
class CanvasContext;
|
||||||
class Device;
|
class Device;
|
||||||
|
@ -45,10 +46,25 @@ class Texture final : public ObjectBase, public ChildOf<Device> {
|
||||||
virtual ~Texture();
|
virtual ~Texture();
|
||||||
void Cleanup();
|
void Cleanup();
|
||||||
|
|
||||||
|
const ffi::WGPUExtent3d mSize;
|
||||||
|
const uint32_t mMipLevelCount;
|
||||||
|
const uint32_t mSampleCount;
|
||||||
|
const dom::GPUTextureDimension mDimension;
|
||||||
|
const uint32_t mUsage;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
already_AddRefed<TextureView> CreateView(
|
already_AddRefed<TextureView> CreateView(
|
||||||
const dom::GPUTextureViewDescriptor& aDesc);
|
const dom::GPUTextureViewDescriptor& aDesc);
|
||||||
void Destroy();
|
void Destroy();
|
||||||
|
|
||||||
|
uint32_t Width() const { return mSize.width; }
|
||||||
|
uint32_t Height() const { return mSize.height; }
|
||||||
|
uint32_t DepthOrArrayLayers() const { return mSize.depth_or_array_layers; }
|
||||||
|
uint32_t MipLevelCount() const { return mMipLevelCount; }
|
||||||
|
uint32_t SampleCount() const { return mSampleCount; }
|
||||||
|
dom::GPUTextureDimension Dimension() const { return mDimension; }
|
||||||
|
dom::GPUTextureFormat Format() const { return mFormat; }
|
||||||
|
uint32_t Usage() const { return mUsage; }
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace webgpu
|
} // namespace webgpu
|
||||||
|
|
|
@ -234,6 +234,18 @@ interface GPUTexture {
|
||||||
GPUTextureView createView(optional GPUTextureViewDescriptor descriptor = {});
|
GPUTextureView createView(optional GPUTextureViewDescriptor descriptor = {});
|
||||||
|
|
||||||
undefined destroy();
|
undefined destroy();
|
||||||
|
|
||||||
|
// TODO: s/unsigned long/GPUIntegerCoordinate: https://github.com/gpuweb/gpuweb/issues/4080
|
||||||
|
readonly attribute unsigned long width;
|
||||||
|
readonly attribute unsigned long height;
|
||||||
|
readonly attribute unsigned long depthOrArrayLayers;
|
||||||
|
readonly attribute unsigned long mipLevelCount;
|
||||||
|
// TODO: s/unsigned long/GPUSize32: https://github.com/gpuweb/gpuweb/issues/4080
|
||||||
|
readonly attribute unsigned long sampleCount;
|
||||||
|
readonly attribute GPUTextureDimension dimension;
|
||||||
|
readonly attribute GPUTextureFormat format;
|
||||||
|
// TODO: s/unsigned long/GPUSize32: https://github.com/gpuweb/gpuweb/issues/4080
|
||||||
|
readonly attribute unsigned long usage;
|
||||||
};
|
};
|
||||||
GPUTexture includes GPUObjectBase;
|
GPUTexture includes GPUObjectBase;
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче