blob: 0a2a44fe6761698fb315a0183d182b6206c2f4f4 [file] [log] [blame]
/*
* Copyright 2021 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_Attribute_DEFINED
#define skgpu_graphite_Attribute_DEFINED
#include "include/private/base/SkAlign.h"
#include "src/core/SkSLTypeShared.h"
#include "src/gpu/graphite/DrawTypes.h"
namespace skgpu::graphite {
/** Describes a vertex or instance attribute. */
class Attribute {
public:
constexpr Attribute() = default;
constexpr Attribute(const char* name,
VertexAttribType cpuType,
SkSLType gpuType)
: fName(name), fCPUType(cpuType), fGPUType(gpuType) {
SkASSERT(name && gpuType != SkSLType::kVoid);
}
constexpr Attribute(const Attribute&) = default;
Attribute& operator=(const Attribute&) = default;
constexpr bool isInitialized() const { return fGPUType != SkSLType::kVoid; }
constexpr const char* name() const { return fName; }
constexpr VertexAttribType cpuType() const { return fCPUType; }
constexpr SkSLType gpuType() const { return fGPUType; }
constexpr size_t size() const { return VertexAttribTypeSize(fCPUType); }
constexpr size_t sizeAlign4() const { return SkAlign4(this->size()); }
private:
const char* fName = nullptr;
VertexAttribType fCPUType = VertexAttribType::kFloat;
SkSLType fGPUType = SkSLType::kVoid;
};
} // namespace skgpu::graphite
#endif // skgpu_graphite_Attribute_DEFINED