blob: a737d7580f34ea948a2f54bcea13c714e63dec58 [file]
/*
* Copyright 2022 Google LLC
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef skgpu_graphite_DawnTypesPriv_DEFINED
#define skgpu_graphite_DawnTypesPriv_DEFINED
#include "include/gpu/graphite/dawn/DawnGraphiteTypes.h"
#include "include/private/SkEnumBitMask.h"
#include "src/gpu/SkSLToBackend.h"
#include "src/gpu/graphite/ResourceTypes.h"
#include "src/sksl/SkSLProgramKind.h"
#include "src/sksl/codegen/SkSLNativeShader.h"
#include "src/sksl/codegen/SkSLWGSLCodeGenerator.h"
#include "src/sksl/ir/SkSLProgram.h"
#include "webgpu/webgpu_cpp.h" // NO_G3_REWRITE
namespace SkSL {
enum class ProgramKind : int8_t;
struct ProgramInterface;
struct ProgramSettings;
struct ShaderCaps;
} // namespace SkSL
namespace skgpu {
class ShaderErrorHandler;
inline bool SkSLToWGSL(const SkSL::ShaderCaps* caps,
const std::string& sksl,
SkSL::ProgramKind programKind,
const SkSL::ProgramSettings& settings,
SkSL::NativeShader* wgsl,
SkSL::ProgramInterface* outInterface,
ShaderErrorHandler* errorHandler) {
return SkSLToBackend(caps,
&SkSL::ToWGSL,
"WGSL",
sksl,
programKind,
settings,
wgsl,
outInterface,
errorHandler);
}
} // namespace skgpu
namespace skgpu::graphite {
class DawnSharedContext;
enum class TextureFormat : uint8_t;
bool DawnCompileWGSLShaderModule(const DawnSharedContext* sharedContext,
const char* label,
const SkSL::NativeShader& wgsl,
wgpu::ShaderModule* module,
ShaderErrorHandler*);
#if !defined(__EMSCRIPTEN__)
bool DawnDescriptorIsValid(const wgpu::YCbCrVkDescriptor&);
bool DawnDescriptorUsesExternalFormat(const wgpu::YCbCrVkDescriptor&);
bool DawnDescriptorsAreEquivalent(const wgpu::YCbCrVkDescriptor&, const wgpu::YCbCrVkDescriptor&);
ImmutableSamplerInfo DawnDescriptorToImmutableSamplerInfo(const wgpu::YCbCrVkDescriptor&);
wgpu::YCbCrVkDescriptor DawnDescriptorFromImmutableSamplerInfo(ImmutableSamplerInfo);
#endif // !defined(__EMSCRIPTEN__)
TextureFormat DawnFormatToTextureFormat(wgpu::TextureFormat);
wgpu::TextureFormat TextureFormatToDawnFormat(TextureFormat);
// Helper bit mask for the columns of the "Texture Format Capabilities" tables in
// https://gpuweb.github.io/gpuweb/#texture-format-caps
enum class DawnFormatFlag {
None = 0x0,
// Corresponds to "float" in GPUTextureSampleType column; "unfilterable-float", "uint" and
// "sint" are readable but not filterable and can be inferred from the format's type.
Filter = 0x1,
Render = 0x2, // Support for wgpu::TextureUsage::RenderAttachment
Blend = 0x4, // Corresponds to https://gpuweb.github.io/gpuweb/#blendable
MSAA = 0x8, // Supports MSAA (4x only)
Resolve = 0x10, // Supports being a resolve target
WriteOnly = 0x20, // Support for wgpu::TextureUsage::StorageBinding as "write-only"
ReadOnly = 0x40, // Support for wgpu::TextureUsage::StorageBinding as "read-only"
ReadWrite = 0x80, // Support for wgpu::TextureUsage::StorageBinding as "read-write"
};
SK_MAKE_BITMASK_OPS(DawnFormatFlag)
SkEnumBitMask<DawnFormatFlag> DawnTextureFormatSupport(wgpu::Device, wgpu::TextureFormat);
namespace BackendTextures {
WGPUTexture GetDawnTexturePtr(const BackendTexture&);
WGPUTextureView GetDawnTextureViewPtr(const BackendTexture&);
} // namespace BackendTextures
} // namespace skgpu::graphite
#endif // skgpu_graphite_DawnTypesPriv_DEFINED