Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(346)

Side by Side Diff: src/gpu/GrPipeline.h

Issue 1717393002: Add "sample locations" feature to GrProcessor (Closed) Base URL: https://skia.googlesource.com/skia.git@upload_getmultisamp
Patch Set: assert Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright 2015 Google Inc. 2 * Copyright 2015 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #ifndef GrPipeline_DEFINED 8 #ifndef GrPipeline_DEFINED
9 #define GrPipeline_DEFINED 9 #define GrPipeline_DEFINED
10 10
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 * @return The currently set render target. 138 * @return The currently set render target.
139 */ 139 */
140 GrRenderTarget* getRenderTarget() const { return fRenderTarget.get(); } 140 GrRenderTarget* getRenderTarget() const { return fRenderTarget.get(); }
141 141
142 const GrStencilSettings& getStencil() const { return fStencilSettings; } 142 const GrStencilSettings& getStencil() const { return fStencilSettings; }
143 143
144 const GrScissorState& getScissorState() const { return fScissorState; } 144 const GrScissorState& getScissorState() const { return fScissorState; }
145 145
146 bool isHWAntialiasState() const { return SkToBool(fFlags & kHWAA_Flag); } 146 bool isHWAntialiasState() const { return SkToBool(fFlags & kHWAA_Flag); }
147 bool snapVerticesToPixelCenters() const { return SkToBool(fFlags & kSnapVert ices_Flag); } 147 bool snapVerticesToPixelCenters() const { return SkToBool(fFlags & kSnapVert ices_Flag); }
148 bool hasSampleLocations() const { return SkToBool(fFlags & kSampleLocations_ Flag); }
148 149
149 GrXferBarrierType xferBarrierType(const GrCaps& caps) const { 150 GrXferBarrierType xferBarrierType(const GrCaps& caps) const {
150 return this->getXferProcessor().xferBarrierType(fRenderTarget.get(), cap s); 151 return this->getXferProcessor().xferBarrierType(fRenderTarget.get(), cap s);
151 } 152 }
152 153
153 /** 154 /**
154 * Gets whether the target is drawing clockwise, counterclockwise, 155 * Gets whether the target is drawing clockwise, counterclockwise,
155 * or both faces. 156 * or both faces.
156 * @return the current draw face(s). 157 * @return the current draw face(s).
157 */ 158 */
158 GrPipelineBuilder::DrawFace getDrawFace() const { return fDrawFace; } 159 GrPipelineBuilder::DrawFace getDrawFace() const { return fDrawFace; }
159 160
160 161
161 /////////////////////////////////////////////////////////////////////////// 162 ///////////////////////////////////////////////////////////////////////////
162 163
163 bool readsFragPosition() const { return fReadsFragPosition; } 164 bool readsFragPosition() const { return fReadsFragPosition; }
164 bool ignoresCoverage() const { return fIgnoresCoverage; } 165 bool ignoresCoverage() const { return fIgnoresCoverage; }
165 166
167 ///////////////////////////////////////////////////////////////////////////
168
169 /**
170 * Returns the actual number of samples the hardware will run when using thi s pipeline.
171 * NOTE: this can be greater than the sample count in the render target's su rface descriptor.
172 */
173 int effectiveSampleCount() const { return this->getMultisampleSpecs().fEffec tiveSampleCnt; }
174
175 /**
176 * Returns a unique ID that identifies this pipeline's sample pattern, or 0 if sample locations
177 * are not supported.
178 */
179 uint16_t getSamplePatternID() const { return this->getMultisampleSpecs().fSa mplePatternID; }
180
181 /**
182 * Returns this pipeline's sample locations, or nullptr if sample locations are not supported.
183 * The locations are stored as offsets in device space from the center of th e pixel.
184 */
185 const SkPoint* getSampleLocations() const {
186 return this->getMultisampleSpecs().fSampleLocations;
187 }
188
166 private: 189 private:
167 GrPipeline() { /** Initialized in factory function*/ } 190 GrPipeline() { /** Initialized in factory function*/ }
168 191
169 /** 192 /**
170 * Alter the program desc and inputs (attribs and processors) based on the b lend optimization. 193 * Alter the program desc and inputs (attribs and processors) based on the b lend optimization.
171 */ 194 */
172 void adjustProgramFromOptimizations(const GrPipelineBuilder& ds, 195 void adjustProgramFromOptimizations(const GrPipelineBuilder& ds,
173 GrXferProcessor::OptFlags, 196 GrXferProcessor::OptFlags,
174 const GrProcOptInfo& colorPOI, 197 const GrProcOptInfo& colorPOI,
175 const GrProcOptInfo& coveragePOI, 198 const GrProcOptInfo& coveragePOI,
176 int* firstColorProcessorIdx, 199 int* firstColorProcessorIdx,
177 int* firstCoverageProcessorIdx); 200 int* firstCoverageProcessorIdx);
178 201
179 /** 202 /**
180 * Calculates the primary and secondary output types of the shader. For cert ain output types 203 * Calculates the primary and secondary output types of the shader. For cert ain output types
181 * the function may adjust the blend coefficients. After this function is ca lled the src and dst 204 * the function may adjust the blend coefficients. After this function is ca lled the src and dst
182 * blend coeffs will represent those used by backend API. 205 * blend coeffs will represent those used by backend API.
183 */ 206 */
184 void setOutputStateInfo(const GrPipelineBuilder& ds, GrXferProcessor::OptFla gs, 207 void setOutputStateInfo(const GrPipelineBuilder& ds, GrXferProcessor::OptFla gs,
185 const GrCaps&); 208 const GrCaps&);
186 209
210 const GrRenderTargetPriv::MultisampleSpecs& getMultisampleSpecs() const {
bsalomon 2016/02/22 20:28:25 We anticipate render target being removed from pip
Chris Dalton 2016/02/22 21:19:11 I imagine it would be straightforward, but I can o
211 SkASSERT(this->isHWAntialiasState());
212 return this->getRenderTarget()->renderTargetPriv().getMultisampleSpecs(f StencilSettings);
213 }
214
187 enum Flags { 215 enum Flags {
188 kHWAA_Flag = 0x1, 216 kHWAA_Flag = 0x1,
189 kSnapVertices_Flag = 0x2, 217 kSnapVertices_Flag = 0x2,
218 kSampleLocations_Flag = 0x4,
190 }; 219 };
191 220
192 typedef GrPendingIOResource<GrRenderTarget, kWrite_GrIOType> RenderTarget; 221 typedef GrPendingIOResource<GrRenderTarget, kWrite_GrIOType> RenderTarget;
193 typedef GrPendingProgramElement<const GrFragmentProcessor> PendingFragmentPr ocessor; 222 typedef GrPendingProgramElement<const GrFragmentProcessor> PendingFragmentPr ocessor;
194 typedef SkAutoSTArray<8, PendingFragmentProcessor> FragmentProcessorArray; 223 typedef SkAutoSTArray<8, PendingFragmentProcessor> FragmentProcessorArray;
195 typedef GrPendingProgramElement<const GrXferProcessor> ProgramXferProcessor; 224 typedef GrPendingProgramElement<const GrXferProcessor> ProgramXferProcessor;
196 RenderTarget fRenderTarget; 225 RenderTarget fRenderTarget;
197 GrScissorState fScissorState; 226 GrScissorState fScissorState;
198 GrStencilSettings fStencilSettings; 227 GrStencilSettings fStencilSettings;
199 GrPipelineBuilder::DrawFace fDrawFace; 228 GrPipelineBuilder::DrawFace fDrawFace;
200 uint32_t fFlags; 229 uint32_t fFlags;
201 ProgramXferProcessor fXferProcessor; 230 ProgramXferProcessor fXferProcessor;
202 FragmentProcessorArray fFragmentProcessors; 231 FragmentProcessorArray fFragmentProcessors;
203 bool fReadsFragPosition; 232 bool fReadsFragPosition;
204 bool fIgnoresCoverage; 233 bool fIgnoresCoverage;
205 234
206 // This value is also the index in fFragmentProcessors where coverage proces sors begin. 235 // This value is also the index in fFragmentProcessors where coverage proces sors begin.
207 int fNumColorProcessors; 236 int fNumColorProcessors;
208 237
209 typedef SkRefCnt INHERITED; 238 typedef SkRefCnt INHERITED;
210 }; 239 };
211 240
212 #endif 241 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698