#ifndef SRC_DAWN_NATIVE_SHADERMODULE_H_
#define SRC_DAWN_NATIVE_SHADERMODULE_H_
#include <bitset>
#include <map>
#include <memory>
#include <string>
#include <utility>
#include <variant>
#include <vector>
#include "absl/container/flat_hash_map.h"
#include "absl/container/flat_hash_set.h"
#include "dawn/common/Constants.h"
#include "dawn/common/ContentLessObjectCacheable.h"
#include "dawn/common/MutexProtected.h"
#include "dawn/common/RefCountedWithExternalCount.h"
#include "dawn/common/ityp_array.h"
#include "dawn/native/BindingInfo.h"
#include "dawn/native/CachedObject.h"
#include "dawn/native/CompilationMessages.h"
#include "dawn/native/Error.h"
#include "dawn/native/Format.h"
#include "dawn/native/Forward.h"
#include "dawn/native/IntegerTypes.h"
#include "dawn/native/Limits.h"
#include "dawn/native/ObjectBase.h"
#include "dawn/native/PerStage.h"
#include "dawn/native/dawn_platform.h"
#include "tint/tint.h"
namespace tint {
class Program;
namespace ast::transform {
class DataMap;
class Manager;
class Transform;
class VertexPulling;
}
}
namespace dawn::native {
struct EntryPointMetadata;
enum class InterStageComponentType { … };
enum class InterpolationType { … };
enum class InterpolationSampling { … };
enum class PixelLocalMemberType { … };
PipelineConstantEntries;
EntryPointMetadataTable;
struct TintProgram : public RefCounted { … };
struct ShaderModuleParseResult { … };
struct ShaderModuleEntryPoint { … };
MaybeError ValidateAndParseShaderModule(
DeviceBase* device,
const UnpackedPtr<ShaderModuleDescriptor>& descriptor,
const std::vector<tint::wgsl::Extension>& internalExtensions,
ShaderModuleParseResult* parseResult,
OwnedCompilationMessages* outMessages);
MaybeError ValidateCompatibilityWithPipelineLayout(DeviceBase* device,
const EntryPointMetadata& entryPoint,
const PipelineLayoutBase* layout);
ResultOrError<Extent3D> ValidateComputeStageWorkgroupSize(
const tint::Program& program,
const char* entryPointName,
const LimitsForCompilationRequest& limits,
std::optional<uint32_t> maxSubgroupSizeForFullSubgroups);
RequiredBufferSizes ComputeRequiredBufferSizesForLayout(const EntryPointMetadata& entryPoint,
const PipelineLayoutBase* layout);
ResultOrError<tint::Program> RunTransforms(tint::ast::transform::Manager* transformManager,
const tint::Program* program,
const tint::ast::transform::DataMap& inputs,
tint::ast::transform::DataMap* outputs,
OwnedCompilationMessages* messages);
struct ShaderBindingInfo { … };
BindingGroupInfoMap;
BindingInfoArray;
OverrideScalar;
struct EntryPointMetadata { … };
class ShaderModuleBase : public RefCountedWithExternalCount<ApiObjectBase>,
public CachedObject,
public ContentLessObjectCacheable<ShaderModuleBase> { … };
}
#endif