1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2021 Google LLC 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #ifndef skgpu_graphite_GraphicsPipelineDesc_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define skgpu_graphite_GraphicsPipelineDesc_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/graphite/Renderer.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/graphite/UniquePaintParamsID.h" 13*c8dee2aaSAndroid Build Coastguard Worker 14*c8dee2aaSAndroid Build Coastguard Worker namespace skgpu::graphite { 15*c8dee2aaSAndroid Build Coastguard Worker 16*c8dee2aaSAndroid Build Coastguard Worker /** 17*c8dee2aaSAndroid Build Coastguard Worker * GraphicsPipelineDesc represents the state needed to create a backend specific GraphicsPipeline, 18*c8dee2aaSAndroid Build Coastguard Worker * minus the target-specific properties that can be inferred from the DrawPass and RenderPassTask. 19*c8dee2aaSAndroid Build Coastguard Worker */ 20*c8dee2aaSAndroid Build Coastguard Worker class GraphicsPipelineDesc { 21*c8dee2aaSAndroid Build Coastguard Worker public: GraphicsPipelineDesc()22*c8dee2aaSAndroid Build Coastguard Worker GraphicsPipelineDesc() : fRenderStepID(0), fPaintID(UniquePaintParamsID::InvalidID()) {} GraphicsPipelineDesc(const RenderStep * renderStep,UniquePaintParamsID paintID)23*c8dee2aaSAndroid Build Coastguard Worker GraphicsPipelineDesc(const RenderStep* renderStep, UniquePaintParamsID paintID) 24*c8dee2aaSAndroid Build Coastguard Worker : fRenderStepID(renderStep->uniqueID()) 25*c8dee2aaSAndroid Build Coastguard Worker , fPaintID(paintID) {} 26*c8dee2aaSAndroid Build Coastguard Worker 27*c8dee2aaSAndroid Build Coastguard Worker bool operator==(const GraphicsPipelineDesc& that) const { 28*c8dee2aaSAndroid Build Coastguard Worker return fRenderStepID == that.fRenderStepID && fPaintID == that.fPaintID; 29*c8dee2aaSAndroid Build Coastguard Worker } 30*c8dee2aaSAndroid Build Coastguard Worker 31*c8dee2aaSAndroid Build Coastguard Worker bool operator!=(const GraphicsPipelineDesc& other) const { 32*c8dee2aaSAndroid Build Coastguard Worker return !(*this == other); 33*c8dee2aaSAndroid Build Coastguard Worker } 34*c8dee2aaSAndroid Build Coastguard Worker 35*c8dee2aaSAndroid Build Coastguard Worker // Describes the geometric portion of the pipeline's program and the pipeline's fixed state 36*c8dee2aaSAndroid Build Coastguard Worker // (except for renderpass-level state that will never change between draws). renderStepID()37*c8dee2aaSAndroid Build Coastguard Worker uint32_t renderStepID() const { return fRenderStepID; } 38*c8dee2aaSAndroid Build Coastguard Worker // UniqueID of the required PaintParams paintParamsID()39*c8dee2aaSAndroid Build Coastguard Worker UniquePaintParamsID paintParamsID() const { return fPaintID; } 40*c8dee2aaSAndroid Build Coastguard Worker 41*c8dee2aaSAndroid Build Coastguard Worker private: 42*c8dee2aaSAndroid Build Coastguard Worker // Each RenderStep defines a fixed set of attributes and rasterization state, as well as the 43*c8dee2aaSAndroid Build Coastguard Worker // shader fragments that control the geometry and coverage calculations. The RenderStep's shader 44*c8dee2aaSAndroid Build Coastguard Worker // is combined with the rest of the shader generated from the PaintParams. Because each 45*c8dee2aaSAndroid Build Coastguard Worker // RenderStep is fixed, its pointer can be used as a proxy for everything that it specifies in 46*c8dee2aaSAndroid Build Coastguard Worker // the GraphicsPipeline. 47*c8dee2aaSAndroid Build Coastguard Worker uint32_t fRenderStepID; 48*c8dee2aaSAndroid Build Coastguard Worker UniquePaintParamsID fPaintID; 49*c8dee2aaSAndroid Build Coastguard Worker }; 50*c8dee2aaSAndroid Build Coastguard Worker 51*c8dee2aaSAndroid Build Coastguard Worker } // namespace skgpu::graphite 52*c8dee2aaSAndroid Build Coastguard Worker 53*c8dee2aaSAndroid Build Coastguard Worker #endif // skgpu_graphite_GraphicsPipelineDesc_DEFINED 54