Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2013 Google Inc. | 3 * Copyright 2013 Google Inc. |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 #ifndef GrCaps_DEFINED | 8 #ifndef GrCaps_DEFINED |
| 9 #define GrCaps_DEFINED | 9 #define GrCaps_DEFINED |
| 10 | 10 |
| 11 #include "GrTypes.h" | 11 #include "GrTypes.h" |
| 12 #include "GrTypesPriv.h" | 12 #include "GrTypesPriv.h" |
| 13 #include "GrBlend.h" | 13 #include "GrBlend.h" |
| 14 #include "GrShaderVar.h" | 14 #include "GrShaderVar.h" |
| 15 #include "SkRefCnt.h" | 15 #include "SkRefCnt.h" |
| 16 #include "SkString.h" | 16 #include "SkString.h" |
| 17 #include "../../src/gpu/GrAllocator.h" | |
| 18 #include <functional> | |
| 17 | 19 |
| 18 struct GrContextOptions; | 20 struct GrContextOptions; |
| 19 | 21 |
| 20 class GrShaderCaps : public SkRefCnt { | 22 class GrShaderCaps : public SkRefCnt { |
| 21 public: | 23 public: |
| 22 /** Info about shader variable precision within a given shader stage. That i s, this info | 24 /** Info about shader variable precision within a given shader stage. That i s, this info |
| 23 is relevant to a float (or vecNf) variable declared with a GrSLPrecision | 25 is relevant to a float (or vecNf) variable declared with a GrSLPrecision |
| 24 in a given GrShaderType. The info here is hoisted from the OpenGL spec. */ | 26 in a given GrShaderType. The info here is hoisted from the OpenGL spec. */ |
| 25 struct PrecisionInfo { | 27 struct PrecisionInfo { |
| 26 PrecisionInfo() { | 28 PrecisionInfo() { |
| (...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 251 bool supportsInstancedDraws() const { | 253 bool supportsInstancedDraws() const { |
| 252 return fSupportsInstancedDraws; | 254 return fSupportsInstancedDraws; |
| 253 } | 255 } |
| 254 | 256 |
| 255 bool fullClearIsFree() const { return fFullClearIsFree; } | 257 bool fullClearIsFree() const { return fFullClearIsFree; } |
| 256 | 258 |
| 257 /** True in environments that will issue errors if memory uploaded to buffer s | 259 /** True in environments that will issue errors if memory uploaded to buffer s |
| 258 is not initialized (even if not read by draw calls). */ | 260 is not initialized (even if not read by draw calls). */ |
| 259 bool mustClearUploadedBufferData() const { return fMustClearUploadedBufferDa ta; } | 261 bool mustClearUploadedBufferData() const { return fMustClearUploadedBufferDa ta; } |
| 260 | 262 |
| 263 /** Info struct that contains hardware-specific multisample info. */ | |
| 264 struct MultisampleSpecs { | |
| 265 /** Nonzero ID that uniquely identifies these multisample specs. */ | |
| 266 uint8_t fUniqueID; | |
| 267 /** The actual number of samples the GPU will run. NOTE: this value can be greater than the | |
| 268 the render target's sample count. */ | |
| 269 int fEffectiveSampleCnt; | |
| 270 /** If sample locations are supported, contains the subpixel locations a t which the GPU will | |
| 271 sample. Pixel center is at (.5, .5) and (0, 0) indicates the top lef t corner. */ | |
| 272 SkAutoTDeleteArray<const SkPoint> fSampleLocations; | |
| 273 }; | |
| 274 | |
| 275 typedef std::function<void(int* effectiveSampleCnt, SkAutoTDeleteArray<SkPoi nt>* locations)> | |
| 276 QueryMultisampleFunctor; | |
| 277 | |
| 278 /** Finds a surface descriptor's multisample specs. */ | |
| 279 const MultisampleSpecs& getMultisampleSpecs(const GrSurfaceDesc&, | |
|
bsalomon
2016/03/07 19:10:06
I'm curious why this has to be on GrCaps (as oppos
Chris Dalton
2016/03/07 19:36:44
There's nothing platform specific about caching sa
| |
| 280 const QueryMultisampleFunctor&) const; | |
| 281 | |
| 282 /** Retrieves existing multisample specs. The provided uniqueID must have co me from a valid | |
| 283 MultisampleSpecs instance that was returned previously by this class. */ | |
| 284 const MultisampleSpecs& getMultisampleSpecs(const uint8_t uniqueID) const; | |
| 285 | |
| 261 protected: | 286 protected: |
| 262 /** Subclasses must call this at the end of their constructors in order to a pply caps | 287 /** Subclasses must call this at the end of their constructors in order to a pply caps |
| 263 overrides requested by the client. Note that overrides will only reduce the caps never | 288 overrides requested by the client. Note that overrides will only reduce the caps never |
| 264 expand them. */ | 289 expand them. */ |
| 265 void applyOptionsOverrides(const GrContextOptions& options); | 290 void applyOptionsOverrides(const GrContextOptions& options); |
| 266 | 291 |
| 267 SkAutoTUnref<GrShaderCaps> fShaderCaps; | 292 SkAutoTUnref<GrShaderCaps> fShaderCaps; |
| 268 | 293 |
| 269 bool fNPOTTextureTileSupport : 1; | 294 bool fNPOTTextureTileSupport : 1; |
| 270 bool fMipMapSupport : 1; | 295 bool fMipMapSupport : 1; |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 305 int fMaxStencilSampleCount; | 330 int fMaxStencilSampleCount; |
| 306 int fMaxRasterSamples; | 331 int fMaxRasterSamples; |
| 307 | 332 |
| 308 private: | 333 private: |
| 309 virtual void onApplyOptionsOverrides(const GrContextOptions&) {}; | 334 virtual void onApplyOptionsOverrides(const GrContextOptions&) {}; |
| 310 | 335 |
| 311 bool fSuppressPrints : 1; | 336 bool fSuppressPrints : 1; |
| 312 bool fImmediateFlush: 1; | 337 bool fImmediateFlush: 1; |
| 313 bool fDrawPathMasksToCompressedTextureSupport : 1; | 338 bool fDrawPathMasksToCompressedTextureSupport : 1; |
| 314 | 339 |
| 340 mutable SkTArray<const MultisampleSpecs*, true> fMultisampleSpecsMap; | |
| 341 mutable GrTAllocator<MultisampleSpecs> fMultisampleSpecsAllocator; | |
| 342 | |
| 315 typedef SkRefCnt INHERITED; | 343 typedef SkRefCnt INHERITED; |
| 316 }; | 344 }; |
| 317 | 345 |
| 318 #endif | 346 #endif |
| OLD | NEW |