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