1 2/* 3 * Copyright 2013 Google Inc. 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8#ifndef GrDrawTargetCaps_DEFINED 9#define GrDrawTargetCaps_DEFINED 10 11#include "GrTypes.h" 12#include "SkRefCnt.h" 13#include "SkString.h" 14 15/** 16 * Represents the draw target capabilities. 17 */ 18class GrDrawTargetCaps : public SkRefCnt { 19public: 20 SK_DECLARE_INST_COUNT(Caps) 21 22 GrDrawTargetCaps() { this->reset(); } 23 GrDrawTargetCaps(const GrDrawTargetCaps& other) : INHERITED() { *this = other; } 24 GrDrawTargetCaps& operator= (const GrDrawTargetCaps&); 25 26 virtual void reset(); 27 virtual SkString dump() const; 28 29 bool eightBitPaletteSupport() const { return f8BitPaletteSupport; } 30 bool npotTextureTileSupport() const { return fNPOTTextureTileSupport; } 31 bool twoSidedStencilSupport() const { return fTwoSidedStencilSupport; } 32 bool stencilWrapOpsSupport() const { return fStencilWrapOpsSupport; } 33 bool hwAALineSupport() const { return fHWAALineSupport; } 34 bool shaderDerivativeSupport() const { return fShaderDerivativeSupport; } 35 bool geometryShaderSupport() const { return fGeometryShaderSupport; } 36 bool dualSourceBlendingSupport() const { return fDualSourceBlendingSupport; } 37 bool bufferLockSupport() const { return fBufferLockSupport; } 38 bool pathRenderingSupport() const { return fPathRenderingSupport; } 39 bool dstReadInShaderSupport() const { return fDstReadInShaderSupport; } 40 41 // Scratch textures not being reused means that those scratch textures 42 // that we upload to (i.e., don't have a render target) will not be 43 // recycled in the texture cache. This is to prevent ghosting by drivers 44 // (in particular for deferred architectures). 45 bool reuseScratchTextures() const { return fReuseScratchTextures; } 46 47 int maxRenderTargetSize() const { return fMaxRenderTargetSize; } 48 int maxTextureSize() const { return fMaxTextureSize; } 49 // Will be 0 if MSAA is not supported 50 int maxSampleCount() const { return fMaxSampleCount; } 51 52 bool isConfigRenderable(GrPixelConfig config, bool withMSAA) const { 53 SkASSERT(kGrPixelConfigCnt > config); 54 return fConfigRenderSupport[config][withMSAA]; 55 } 56 57protected: 58 bool f8BitPaletteSupport : 1; 59 bool fNPOTTextureTileSupport : 1; 60 bool fTwoSidedStencilSupport : 1; 61 bool fStencilWrapOpsSupport : 1; 62 bool fHWAALineSupport : 1; 63 bool fShaderDerivativeSupport : 1; 64 bool fGeometryShaderSupport : 1; 65 bool fDualSourceBlendingSupport : 1; 66 bool fBufferLockSupport : 1; 67 bool fPathRenderingSupport : 1; 68 bool fDstReadInShaderSupport : 1; 69 bool fReuseScratchTextures : 1; 70 71 int fMaxRenderTargetSize; 72 int fMaxTextureSize; 73 int fMaxSampleCount; 74 75 // The first entry for each config is without msaa and the second is with. 76 bool fConfigRenderSupport[kGrPixelConfigCnt][2]; 77 78 typedef SkRefCnt INHERITED; 79}; 80 81#endif 82