blob: 1956edae7ba5218c77c66801cd513b9ecaa308eb [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_GraphicsPipeline_DEFINED
#define skgpu_graphite_GraphicsPipeline_DEFINED
#include "src/gpu/graphite/Resource.h"
#include "src/gpu/graphite/UniquePaintParamsID.h"
namespace skgpu::graphite {
/**
* GraphicsPipeline corresponds to a backend specific pipeline used for rendering (vs. compute),
* e.g. MTLRenderPipelineState (Metal),
* CreateRenderPipeline (Dawn),
* CreateGraphicsPipelineState (D3D12),
* or VkGraphicsPipelineCreateInfo (Vulkan).
*
* A GraphicsPipeline is created from the combination of a GraphicsPipelineDesc (representing draw
* specific configuration) and a RenderPassDesc (representing the target of the draw).
*/
class GraphicsPipeline : public Resource {
public:
~GraphicsPipeline() override;
const char* getResourceType() const override { return "Graphics Pipeline"; }
#if defined(GRAPHITE_TEST_UTILS)
// This is not quite enough information to fully recreate the pipeline, as the RenderPassDesc
// used to make the pipeline is not preserved.
struct PipelineInfo {
uint32_t fRenderStepID;
UniquePaintParamsID fPaintID;
std::string fSkSLVertexShader;
std::string fSkSLFragmentShader;
std::string fNativeVertexShader;
std::string fNativeFragmentShader;
};
const PipelineInfo& getPipelineInfo() const {
return fPipelineInfo;
}
#else
struct PipelineInfo;
#endif
protected:
GraphicsPipeline(const SharedContext*, PipelineInfo*);
private:
#if defined(GRAPHITE_TEST_UTILS)
PipelineInfo fPipelineInfo;
#endif
};
} // namespace skgpu::graphite
#endif // skgpu_graphite_GraphicsPipeline_DEFINED