blob: 80aaf0bcf3de8401a5df88d3c9313576f7c090fc [file] [log] [blame]
/*
* Copyright 2024 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_RenderPassDesc_DEFINED
#define skgpu_graphite_RenderPassDesc_DEFINED
#include "include/core/SkString.h"
#include "include/gpu/graphite/TextureInfo.h"
#include "src/gpu/graphite/ResourceTypes.h"
#include "src/gpu/Swizzle.h"
#include <array>
namespace skgpu::graphite {
class Caps;
struct AttachmentDesc {
TextureInfo fTextureInfo;
LoadOp fLoadOp;
StoreOp fStoreOp;
SkString toString() const;
};
struct RenderPassDesc {
static RenderPassDesc Make(const Caps* caps,
const TextureInfo& targetInfo,
LoadOp loadOp,
StoreOp storeOp,
SkEnumBitMask<DepthStencilFlags> depthStencilFlags,
const std::array<float, 4>& clearColor,
bool requiresMSAA,
Swizzle writeSwizzle);
AttachmentDesc fColorAttachment;
std::array<float, 4> fClearColor;
AttachmentDesc fColorResolveAttachment;
AttachmentDesc fDepthStencilAttachment;
float fClearDepth;
uint32_t fClearStencil;
Swizzle fWriteSwizzle;
// This samples count usually matches fColorAttachment & fDepthStencilAttachment's samples
// count. The only exceptional case is when multisampled render to single sampled is used. In
// that case, the fColorAttachment's samples count will be 1 and fSampleCount will be > 1.
uint32_t fSampleCount;
SkString toString() const;
// Only includes fixed state relevant to pipeline creation
SkString toPipelineLabel() const;
// TODO:
// * bounds (TBD whether exact bounds vs. granular)
// * input attachments
// * subpass makeup information
};
} // namespace skgpu::graphite
#endif // skgpu_graphite_RenderPassDesc_DEFINED