31 wgpu::TextureFormat::RGBA8Unorm,
32 wgpu::TextureFormat::R8Unorm,
33#if !defined(__EMSCRIPTEN__)
34 wgpu::TextureFormat::R16Unorm,
36 wgpu::TextureFormat::BGRA8Unorm,
37 wgpu::TextureFormat::RGBA16Float,
38 wgpu::TextureFormat::R16Float,
39 wgpu::TextureFormat::RG8Unorm,
40#if !defined(__EMSCRIPTEN__)
41 wgpu::TextureFormat::RG16Unorm,
43 wgpu::TextureFormat::RGB10A2Unorm,
44 wgpu::TextureFormat::RG16Float,
46 wgpu::TextureFormat::Stencil8,
47 wgpu::TextureFormat::Depth16Unorm,
48 wgpu::TextureFormat::Depth32Float,
49 wgpu::TextureFormat::Depth24PlusStencil8,
51 wgpu::TextureFormat::BC1RGBAUnorm,
52 wgpu::TextureFormat::ETC2RGB8Unorm,
54#if !defined(__EMSCRIPTEN__)
55 wgpu::TextureFormat::External,
58 wgpu::TextureFormat::Undefined,
61#if !defined(__EMSCRIPTEN__)
62bool IsMultiplanarFormat(wgpu::TextureFormat
format) {
64 case wgpu::TextureFormat::R8BG8Biplanar420Unorm:
65 case wgpu::TextureFormat::R10X6BG10X6Biplanar420Unorm:
66 case wgpu::TextureFormat::R8BG8A8Triplanar420Unorm:
79 this->initCaps(backendContext,
options);
80 this->initShaderCaps(backendContext.
fDevice);
81 this->initFormatTable(backendContext.
fDevice);
92 if (!
info.isValid()) {
96 const auto& spec =
info.dawnTextureSpec();
98 if (!(spec.fUsage & wgpu::TextureUsage::TextureBinding)) {
102#if !defined(__EMSCRIPTEN__)
103 switch (spec.fFormat) {
104 case wgpu::TextureFormat::R8BG8Biplanar420Unorm: {
105 if (spec.fAspect == wgpu::TextureAspect::Plane0Only &&
106 spec.getViewFormat() != wgpu::TextureFormat::R8Unorm) {
109 if (spec.fAspect == wgpu::TextureAspect::Plane1Only &&
110 spec.getViewFormat() != wgpu::TextureFormat::RG8Unorm) {
115 case wgpu::TextureFormat::R10X6BG10X6Biplanar420Unorm: {
116 if (spec.fAspect == wgpu::TextureAspect::Plane0Only &&
117 spec.getViewFormat() != wgpu::TextureFormat::R16Unorm) {
120 if (spec.fAspect == wgpu::TextureAspect::Plane1Only &&
121 spec.getViewFormat() != wgpu::TextureFormat::RG16Unorm) {
126 case wgpu::TextureFormat::R8BG8A8Triplanar420Unorm: {
127 if (spec.fAspect == wgpu::TextureAspect::Plane0Only &&
128 spec.getViewFormat() != wgpu::TextureFormat::R8Unorm) {
131 if (spec.fAspect == wgpu::TextureAspect::Plane1Only &&
132 spec.getViewFormat() != wgpu::TextureFormat::RG8Unorm) {
135 if (spec.fAspect == wgpu::TextureAspect::Plane2Only &&
136 spec.getViewFormat() != wgpu::TextureFormat::R8Unorm) {
146 return this->isTexturable(
info.dawnTextureSpec().getViewFormat());
149bool DawnCaps::isTexturable(wgpu::TextureFormat
format)
const {
150 const FormatInfo& formatInfo = this->getFormatInfo(
format);
151 return SkToBool(FormatInfo::kTexturable_Flag & formatInfo.fFlags);
155 return info.isValid() &&
156 (
info.dawnTextureSpec().fUsage & wgpu::TextureUsage::RenderAttachment) &&
157 this->
isRenderable(info.dawnTextureSpec().getViewFormat(),
info.numSamples());
161 if (!
info.isValid()) {
164 if (!(
info.dawnTextureSpec().fUsage & wgpu::TextureUsage::StorageBinding)) {
167 const FormatInfo& formatInfo = this->getFormatInfo(
info.dawnTextureSpec().getViewFormat());
168 return info.numSamples() == 1 &&
SkToBool(FormatInfo::kStorage_Flag & formatInfo.fFlags);
171uint32_t DawnCaps::maxRenderTargetSampleCount(wgpu::TextureFormat
format)
const {
172 const FormatInfo& formatInfo = this->getFormatInfo(
format);
173 if (!
SkToBool(formatInfo.fFlags & FormatInfo::kRenderable_Flag)) {
176 if (
SkToBool(formatInfo.fFlags & FormatInfo::kMSAA_Flag)) {
184 return sampleCount <= this->maxRenderTargetSampleCount(
format);
192 wgpu::TextureUsage::CopyDst |
193 wgpu::TextureUsage::CopySrc;
195 usage |= wgpu::TextureUsage::RenderAttachment;
199 if (
format == wgpu::TextureFormat::Undefined) {
204 info.fSampleCount = 1;
205 info.fMipmapped = mipmapped;
216 if (!textureInfo.getDawnTextureInfo(&
info)) {
220 info.fSampleCount = 1;
221 info.fMipmapped = mipmapped;
222 info.fUsage = wgpu::TextureUsage::TextureBinding | wgpu::TextureUsage::CopyDst |
223 wgpu::TextureUsage::CopySrc;
230 switch (compression) {
232 return wgpu::TextureFormat::ETC2RGB8Unorm;
234 return wgpu::TextureFormat::BC1RGBAUnorm;
236 return wgpu::TextureFormat::Undefined;
245 wgpu::TextureUsage::CopyDst |
246 wgpu::TextureUsage::CopySrc;
248 wgpu::TextureFormat
format = format_from_compression(compression);
249 if (
format == wgpu::TextureFormat::Undefined) {
254 info.fSampleCount = 1;
255 info.fMipmapped = mipmapped;
268 const DawnTextureSpec& singleSpec = singleSampledInfo.dawnTextureSpec();
275 info.fUsage = wgpu::TextureUsage::RenderAttachment;
277 if (fSupportedTransientAttachmentUsage != wgpu::TextureUsage::None &&
279 info.fUsage |= fSupportedTransientAttachmentUsage;
287 uint32_t sampleCount,
290 info.fSampleCount = sampleCount;
294 info.fUsage = wgpu::TextureUsage::RenderAttachment;
296 if (fSupportedTransientAttachmentUsage != wgpu::TextureUsage::None) {
297 info.fUsage |= fSupportedTransientAttachmentUsage;
305 if (
format == wgpu::TextureFormat::Undefined) {
310 const FormatInfo& formatInfo = this->getFormatInfo(
format);
311 if (!
SkToBool(FormatInfo::kStorage_Flag & formatInfo.fFlags)) {
316 wgpu::TextureUsage::TextureBinding |
317 wgpu::TextureUsage::CopySrc;
319 info.fSampleCount = 1;
329 const SkISize colorAttachmentDimensions)
const {
330#if !defined(__EMSCRIPTEN__)
334 const auto& dawnTextureSpec = textureInfo.dawnTextureSpec();
335 wgpu::TextureFormat
format = dawnTextureSpec.fFormat;
336 if (IsMultiplanarFormat(
format) && dawnTextureSpec.fAspect == wgpu::TextureAspect::Plane1Only) {
339 colorAttachmentDimensions.
height() * 2);
343 return colorAttachmentDimensions;
348 auto dawnFormat = textureInfo.dawnTextureSpec().getViewFormat();
349 if (dawnFormat == wgpu::TextureFormat::Undefined) {
354 const FormatInfo&
info = this->getFormatInfo(dawnFormat);
355 for (
int i = 0;
i <
info.fColorTypeInfoCount; ++
i) {
356 const ColorTypeInfo& ctInfo =
info.fColorTypeInfos[
i];
365bool DawnCaps::supportsWritePixels(
const TextureInfo& textureInfo)
const {
366 const auto& spec = textureInfo.dawnTextureSpec();
367 return spec.fUsage & wgpu::TextureUsage::CopyDst;
370bool DawnCaps::supportsReadPixels(
const TextureInfo& textureInfo)
const {
371 const auto& spec = textureInfo.dawnTextureSpec();
372 return spec.fUsage & wgpu::TextureUsage::CopySrc;
375std::pair<
SkColorType,
bool > DawnCaps::supportedWritePixelsColorType(
377 const TextureInfo& dstTextureInfo,
379 return {dstColorType,
false};
382std::pair<
SkColorType,
bool > DawnCaps::supportedReadPixelsColorType(
384 const TextureInfo& srcTextureInfo,
386 auto dawnFormat = getFormatFromColorType(srcColorType);
387 const FormatInfo&
info = this->getFormatInfo(dawnFormat);
388 for (
int i = 0;
i <
info.fColorTypeInfoCount; ++
i) {
389 const auto& ctInfo =
info.fColorTypeInfos[
i];
390 if (ctInfo.fColorType == srcColorType) {
391 return {srcColorType,
false};
397void DawnCaps::initCaps(
const DawnBackendContext& backendContext,
const ContextOptions&
options) {
400#if !defined(__EMSCRIPTEN__)
401 wgpu::AdapterInfo
info;
402 backendContext.fDevice.GetAdapter().GetInfo(&
info);
404#if defined(GRAPHITE_TEST_UTILS)
405 this->setDeviceName(
info.device);
409 wgpu::SupportedLimits limits;
410#if defined(__EMSCRIPTEN__)
412 [[maybe_unused]]
bool limitsSucceeded = backendContext.fDevice.GetLimits(&limits);
413#if (__EMSCRIPTEN_major__ > 3 || (__EMSCRIPTEN_major__ == 3 && __EMSCRIPTEN_minor__ > 1) || \
414 (__EMSCRIPTEN_major__ == 3 && __EMSCRIPTEN_minor__ == 1 && __EMSCRIPTEN_tiny__ > 50))
420 [[maybe_unused]]
wgpu::Status status = backendContext.fDevice.GetLimits(&limits);
421 SkASSERT(status == wgpu::Status::Success);
439#if !defined(__EMSCRIPTEN__)
458#if defined(GRAPHITE_TEST_UTILS)
459 fDrawBufferCanBeMappedForReadback =
false;
462#if defined(__EMSCRIPTEN__)
469 backendContext.fDevice.HasFeature(wgpu::FeatureName::BufferMapExtendedUsages);
472 backendContext.fDevice.HasFeature(wgpu::FeatureName::MSAARenderToSingleSampled);
474 if (backendContext.fDevice.HasFeature(wgpu::FeatureName::TransientAttachments)) {
475 fSupportedTransientAttachmentUsage = wgpu::TextureUsage::TransientAttachment;
477 if (backendContext.fDevice.HasFeature(wgpu::FeatureName::DawnLoadResolveTexture)) {
478 fSupportedResolveTextureLoadOp = wgpu::LoadOp::ExpandResolveTexture;
482 if (!backendContext.fTick) {
489 fUseAsyncPipelineCreation =
false;
492 fAllowScopedErrorChecks =
false;
498void DawnCaps::initShaderCaps(
const wgpu::Device&
device) {
508#if !defined(__EMSCRIPTEN__)
509 if (
device.HasFeature(wgpu::FeatureName::DualSourceBlending)) {
512 if (
device.HasFeature(wgpu::FeatureName::FramebufferFetch)) {
520void DawnCaps::initFormatTable(
const wgpu::Device&
device) {
524 info = &fFormatTable[GetFormatIndex(wgpu::TextureFormat::RGBA8Unorm)];
525 info->fFlags = FormatInfo::kAllFlags;
526 info->fColorTypeInfoCount = 2;
527 info->fColorTypeInfos = std::make_unique<ColorTypeInfo[]>(
info->fColorTypeInfoCount);
531 auto& ctInfo =
info->fColorTypeInfos[ctIdx++];
537 auto& ctInfo =
info->fColorTypeInfos[ctIdx++];
546 info = &fFormatTable[GetFormatIndex(wgpu::TextureFormat::R8Unorm)];
547#if !defined(__EMSCRIPTEN__)
548 info->fFlags = FormatInfo::kAllFlags;
549 if (!
device.HasFeature(wgpu::FeatureName::R8UnormStorage)) {
550 info->fFlags &= ~FormatInfo::kStorage_Flag;
553 info->fFlags = FormatInfo::kAllFlags & ~FormatInfo::kStorage_Flag;
555 info->fColorTypeInfoCount = 3;
556 info->fColorTypeInfos = std::make_unique<ColorTypeInfo[]>(
info->fColorTypeInfoCount);
560 auto& ctInfo =
info->fColorTypeInfos[ctIdx++];
566 auto& ctInfo =
info->fColorTypeInfos[ctIdx++];
574 auto& ctInfo =
info->fColorTypeInfos[ctIdx++];
581#if !defined(__EMSCRIPTEN__)
582 const bool supportUnorm16 =
device.HasFeature(wgpu::FeatureName::Unorm16TextureFormats);
586 info = &fFormatTable[GetFormatIndex(wgpu::TextureFormat::R16Unorm)];
587 if (supportUnorm16) {
588 info->fFlags = FormatInfo::kAllFlags & ~FormatInfo::kStorage_Flag;
589 info->fColorTypeInfoCount = 1;
590 info->fColorTypeInfos = std::make_unique<ColorTypeInfo[]>(
info->fColorTypeInfoCount);
594 auto& ctInfo =
info->fColorTypeInfos[ctIdx++];
606 info = &fFormatTable[GetFormatIndex(wgpu::TextureFormat::BGRA8Unorm)];
607 info->fFlags = FormatInfo::kAllFlags;
608 info->fColorTypeInfoCount = 2;
609 info->fColorTypeInfos = std::make_unique<ColorTypeInfo[]>(
info->fColorTypeInfoCount);
613 auto& ctInfo =
info->fColorTypeInfos[ctIdx++];
619 auto& ctInfo =
info->fColorTypeInfos[ctIdx++];
627 info = &fFormatTable[GetFormatIndex(wgpu::TextureFormat::RGBA16Float)];
628 info->fFlags = FormatInfo::kAllFlags;
629 info->fColorTypeInfoCount = 1;
630 info->fColorTypeInfos = std::make_unique<ColorTypeInfo[]>(
info->fColorTypeInfoCount);
634 auto& ctInfo =
info->fColorTypeInfos[ctIdx++];
642 info = &fFormatTable[GetFormatIndex(wgpu::TextureFormat::R16Float)];
643 info->fFlags = FormatInfo::kAllFlags;
644 info->fColorTypeInfoCount = 1;
645 info->fColorTypeInfos = std::make_unique<ColorTypeInfo[]>(
info->fColorTypeInfoCount);
649 auto& ctInfo =
info->fColorTypeInfos[ctIdx++];
660 info = &fFormatTable[GetFormatIndex(wgpu::TextureFormat::RG8Unorm)];
661 info->fFlags = FormatInfo::kAllFlags;
662 info->fColorTypeInfoCount = 1;
663 info->fColorTypeInfos = std::make_unique<ColorTypeInfo[]>(
info->fColorTypeInfoCount);
667 auto& ctInfo =
info->fColorTypeInfos[ctIdx++];
673#if !defined(__EMSCRIPTEN__)
677 info = &fFormatTable[GetFormatIndex(wgpu::TextureFormat::RG16Unorm)];
678 if (supportUnorm16) {
679 info->fFlags = FormatInfo::kAllFlags;
680 info->fColorTypeInfoCount = 1;
681 info->fColorTypeInfos = std::make_unique<ColorTypeInfo[]>(
info->fColorTypeInfoCount);
685 auto& ctInfo =
info->fColorTypeInfos[ctIdx++];
695 info = &fFormatTable[GetFormatIndex(wgpu::TextureFormat::RGB10A2Unorm)];
696 info->fFlags = FormatInfo::kAllFlags;
697 info->fColorTypeInfoCount = 1;
698 info->fColorTypeInfos = std::make_unique<ColorTypeInfo[]>(
info->fColorTypeInfoCount);
702 auto& ctInfo =
info->fColorTypeInfos[ctIdx++];
710 info = &fFormatTable[GetFormatIndex(wgpu::TextureFormat::RG16Float)];
711 info->fFlags = FormatInfo::kAllFlags;
712 info->fColorTypeInfoCount = 1;
713 info->fColorTypeInfos = std::make_unique<ColorTypeInfo[]>(
info->fColorTypeInfoCount);
717 auto& ctInfo =
info->fColorTypeInfos[ctIdx++];
725 if (
device.HasFeature(wgpu::FeatureName::TextureCompressionETC2)) {
726 info = &fFormatTable[GetFormatIndex(wgpu::TextureFormat::ETC2RGB8Unorm)];
727 info->fFlags = FormatInfo::kTexturable_Flag;
728 info->fColorTypeInfoCount = 1;
729 info->fColorTypeInfos = std::make_unique<ColorTypeInfo[]>(
info->fColorTypeInfoCount);
733 auto& ctInfo =
info->fColorTypeInfos[ctIdx++];
742 if (
device.HasFeature(wgpu::FeatureName::TextureCompressionBC)) {
743 info = &fFormatTable[GetFormatIndex(wgpu::TextureFormat::BC1RGBAUnorm)];
744 info->fFlags = FormatInfo::kTexturable_Flag;
745 info->fColorTypeInfoCount = 1;
746 info->fColorTypeInfos = std::make_unique<ColorTypeInfo[]>(
info->fColorTypeInfoCount);
750 auto& ctInfo =
info->fColorTypeInfos[ctIdx++];
763 info = &fFormatTable[GetFormatIndex(wgpu::TextureFormat::Stencil8)];
764 info->fFlags = FormatInfo::kMSAA_Flag;
765 info->fColorTypeInfoCount = 0;
770 info = &fFormatTable[GetFormatIndex(wgpu::TextureFormat::Depth16Unorm)];
771 info->fFlags = FormatInfo::kMSAA_Flag;
772 info->fColorTypeInfoCount = 0;
777 info = &fFormatTable[GetFormatIndex(wgpu::TextureFormat::Depth32Float)];
778 info->fFlags = FormatInfo::kMSAA_Flag;
779 info->fColorTypeInfoCount = 0;
784 info = &fFormatTable[GetFormatIndex(wgpu::TextureFormat::Depth24PlusStencil8)];
785 info->fFlags = FormatInfo::kMSAA_Flag;
786 info->fColorTypeInfoCount = 0;
789#if !defined(__EMSCRIPTEN__)
792 info = &fFormatTable[GetFormatIndex(wgpu::TextureFormat::External)];
793 info->fFlags = FormatInfo::kTexturable_Flag;
794 info->fColorTypeInfoCount = 1;
795 info->fColorTypeInfos = std::make_unique<ColorTypeInfo[]>(
info->fColorTypeInfoCount);
799 auto& ctInfo =
info->fColorTypeInfos[ctIdx++];
807 info = &fFormatTable[GetFormatIndex(wgpu::TextureFormat::Undefined)];
809 info->fColorTypeInfoCount = 0;
818 std::fill_n(fColorTypeToFormatTable,
kSkColorTypeCnt, wgpu::TextureFormat::Undefined);
823 {wgpu::TextureFormat::RGBA8Unorm, wgpu::TextureFormat::BGRA8Unorm});
833#if !defined(__EMSCRIPTEN__)
840size_t DawnCaps::GetFormatIndex(wgpu::TextureFormat
format) {
845 if (kFormats[
i] == wgpu::TextureFormat::Undefined) {
855 std::initializer_list<wgpu::TextureFormat> formats) {
857 "Size is not same for DawnCaps::fFormatTable and kFormats");
859 for (
auto it = formats.begin(); it != formats.end(); ++it) {
860 const auto&
info = this->getFormatInfo(*it);
861 for (
int i = 0;
i <
info.fColorTypeInfoCount; ++
i) {
863 fColorTypeToFormatTable[idx] = *it;
875 static_cast<uint32_t
>(depthStencilInfo.
getViewFormat()) <= 0xffff &&
887 uint32_t loadResolveAttachmentKey = 0;
888 if (shouldIncludeLoadResolveAttachmentBit &&
891 loadResolveAttachmentKey = 1;
894 uint32_t colorAttachmentKey =
static_cast<uint32_t
>(colorInfo.
getViewFormat()) << 16 |
897 uint32_t dsAttachmentKey =
static_cast<uint32_t
>(depthStencilInfo.
getViewFormat()) << 16 |
899 return (((uint64_t)colorAttachmentKey) << 32) | dsAttachmentKey;
915 builder[2] = renderPassKey & 0xFFFFFFFF;
916 builder[3] = (renderPassKey >> 32) & 0xFFFFFFFF;
951 uint32_t formatKey =
static_cast<uint32_t
>(dawnSpec.
getViewFormat());
961 SkASSERT(
static_cast<uint32_t
>(isMipped) < (1u << 1));
965 static int kNum32DataCnt = 2 + 1 + 1;
972 builder[3] = (samplesKey << 0) |
973 (
static_cast<uint32_t
>(isMipped) << 3) |
974 (
static_cast<uint32_t
>(dawnSpec.
fUsage) << 4);
static void info(const char *fmt,...) SK_PRINTF_LIKE(1
#define SkDEBUGFAILF(fmt,...)
@ kR8G8_unorm_SkColorType
pixel with a uint8_t for red and green
@ kBGRA_8888_SkColorType
pixel with 8 bits for blue, green, red, alpha; in 32-bit word
@ kA16_unorm_SkColorType
pixel with a little endian uint16_t for alpha
@ kRGBA_F16_SkColorType
pixel with half floats for red, green, blue, alpha;
@ kAlpha_8_SkColorType
pixel with alpha in 8-bit byte
@ kGray_8_SkColorType
pixel with grayscale level in 8-bit byte
@ kRGBA_8888_SkColorType
pixel with 8 bits for red, green, blue, alpha; in 32-bit word
@ kRGB_888x_SkColorType
pixel with 8 bits each for red, green, blue; in 32-bit word
@ kA16_float_SkColorType
pixel with a half float for alpha
@ kRGBA_1010102_SkColorType
10 bits for red, green, blue; 2 bits for alpha; in 32-bit word
@ kR16G16_unorm_SkColorType
pixel with a little endian uint16_t for red and green
@ kUnknown_SkColorType
uninitialized
@ kR16G16_float_SkColorType
pixel with a half float for red and green
static constexpr int kSkColorTypeCnt
void SK_SPI SkDebugf(const char format[],...) SK_PRINTF_LIKE(1
static SkColorType colorType(AImageDecoder *decoder, const AImageDecoderHeaderInfo *headerInfo)
static constexpr bool SkToBool(const T &x)
constexpr uint16_t asKey() const
static constexpr Swizzle RGB1()
static Domain GenerateDomain()
size_t fRequiredStorageBufferAlignment
bool fDrawBufferCanBeMapped
size_t fRequiredUniformBufferAlignment
bool fStorageBufferPreferred
bool fClampToBorderSupport
bool fMSAARenderToSingleSampledSupport
bool fFullCompressedUploadSizeMustAlignToBlockDims
std::unique_ptr< SkSL::ShaderCaps > fShaderCaps
bool fStorageBufferSupport
static uint32_t SamplesToKey(uint32_t numSamples)
void finishInitialization(const ContextOptions &)
size_t fRequiredTransferBufferAlignment
const SkSL::ShaderCaps * shaderCaps() const
ResourceBindingRequirements fResourceBindingReqs
size_t fTextureDataRowBytesAlignment
const ComputeStep * computeStep() const
uint32_t uniqueID() const
static constexpr size_t kFormatCnt
void buildKeyForTexture(SkISize dimensions, const TextureInfo &, ResourceType, Shareable, GraphiteResourceKey *) const override
TextureInfo getDefaultStorageTextureInfo(SkColorType) const override
bool isStorage(const TextureInfo &) const override
bool isRenderable(const TextureInfo &) const override
TextureInfo getDefaultSampledTextureInfo(SkColorType, Mipmapped mipmapped, Protected, Renderable) const override
SkISize getDepthAttachmentDimensions(const TextureInfo &, const SkISize colorAttachmentDimensions) const override
TextureInfo getDefaultDepthStencilTextureInfo(SkEnumBitMask< DepthStencilFlags >, uint32_t sampleCount, Protected) const override
uint32_t channelMask(const TextureInfo &) const override
UniqueKey makeComputePipelineKey(const ComputePipelineDesc &) const override
DawnCaps(const DawnBackendContext &, const ContextOptions &)
UniqueKey makeGraphicsPipelineKey(const GraphicsPipelineDesc &, const RenderPassDesc &) const override
TextureInfo getTextureInfoForSampledCopy(const TextureInfo &textureInfo, Mipmapped mipmapped) const override
uint64_t getRenderPassDescKeyForPipeline(const RenderPassDesc &renderPassDesc) const
TextureInfo getDefaultCompressedTextureInfo(SkTextureCompressionType, Mipmapped mipmapped, Protected) const override
std::optional< wgpu::LoadOp > resolveTextureLoadOp() const
TextureInfo getDefaultMSAATextureInfo(const TextureInfo &singleSampledInfo, Discardable discardable) const override
UniquePaintParamsID paintParamsID() const
uint32_t renderStepID() const
uint32_t uint32_t * format
it will be possible to load the file into Perfetto s trace viewer disable asset Prevents usage of any non test fonts unless they were explicitly Loaded via prefetched default font Indicates whether the embedding started a prefetch of the default font manager before creating the engine run In non interactive keep the shell running after the Dart script has completed enable serial On low power devices with low core running concurrent GC tasks on threads can cause them to contend with the UI thread which could potentially lead to jank This option turns off all concurrent GC activities domain network JSON encoded network policy per domain This overrides the DisallowInsecureConnections switch Embedder can specify whether to allow or disallow insecure connections at a domain level old gen heap size
wgpu::TextureFormat DawnDepthStencilFlagsToFormat(SkEnumBitMask< DepthStencilFlags > mask)
uint32_t DawnFormatChannels(wgpu::TextureFormat format)
static const skgpu::UniqueKey::Domain kGraphicsPipelineDomain
static void usage(char *argv0)
static constexpr SkISize Make(int32_t w, int32_t h)
constexpr int32_t width() const
constexpr int32_t height() const
bool fDualSourceBlendingSupport
const char * fFloatBufferArrayName
bool fShaderDerivativeSupport
wgpu::TextureFormat getViewFormat() const
wgpu::TextureUsage fUsage
wgpu::TextureFormat getViewFormat() const
wgpu::TextureFormat fFormat
AttachmentDesc fDepthStencilAttachment
AttachmentDesc fColorResolveAttachment
AttachmentDesc fColorAttachment
Layout fUniformBufferLayout
Layout fStorageBufferLayout
bool fSeparateTextureAndSamplerBinding