Index: src/gpu/GrDrawTarget.cpp |
diff --git a/src/gpu/GrDrawTarget.cpp b/src/gpu/GrDrawTarget.cpp |
index 00f6a8ad804a342bfbfd134c0e88ecc5bf4598eb..e52e4f976bbc6a52754605c049b81b78e0117e17 100644 |
--- a/src/gpu/GrDrawTarget.cpp |
+++ b/src/gpu/GrDrawTarget.cpp |
@@ -213,7 +213,7 @@ void GrDrawTarget::stencilPath(GrPipelineBuilder* pipelineBuilder, |
GrPathRendering::FillType fill) { |
// TODO: extract portions of checkDraw that are relevant to path stenciling. |
SkASSERT(path); |
- SkASSERT(this->caps()->pathRenderingSupport()); |
+ SkASSERT(this->caps()->shaderCaps()->pathRenderingSupport()); |
SkASSERT(pipelineBuilder); |
// Setup clip |
@@ -239,7 +239,7 @@ void GrDrawTarget::drawPath(GrPipelineBuilder* pipelineBuilder, |
GrPathRendering::FillType fill) { |
// TODO: extract portions of checkDraw that are relevant to path rendering. |
SkASSERT(path); |
- SkASSERT(this->caps()->pathRenderingSupport()); |
+ SkASSERT(this->caps()->shaderCaps()->pathRenderingSupport()); |
SkASSERT(pipelineBuilder); |
SkRect devBounds = path->getBounds(); |
@@ -277,7 +277,7 @@ void GrDrawTarget::drawPaths(GrPipelineBuilder* pipelineBuilder, |
PathTransformType transformType, |
int count, |
GrPathRendering::FillType fill) { |
- SkASSERT(this->caps()->pathRenderingSupport()); |
+ SkASSERT(this->caps()->shaderCaps()->pathRenderingSupport()); |
SkASSERT(pathRange); |
SkASSERT(indices); |
SkASSERT(0 == reinterpret_cast<long>(indices) % GrPathRange::PathIndexSizeInBytes(indexType)); |
@@ -541,16 +541,92 @@ GrDrawTarget::PipelineInfo::PipelineInfo(GrPipelineBuilder* pipelineBuilder, |
/////////////////////////////////////////////////////////////////////////////// |
+void GrShaderCaps::reset() { |
+ fShaderDerivativeSupport = false; |
+ fGeometryShaderSupport = false; |
+ fPathRenderingSupport = false; |
+ fDstReadInShaderSupport = false; |
+ fDualSourceBlendingSupport = false; |
+ |
+ fShaderPrecisionVaries = false; |
+} |
+ |
+GrShaderCaps& GrShaderCaps::operator=(const GrShaderCaps& other) { |
+ fShaderDerivativeSupport = other.fShaderDerivativeSupport; |
+ fGeometryShaderSupport = other.fGeometryShaderSupport; |
+ fPathRenderingSupport = other.fPathRenderingSupport; |
+ fDstReadInShaderSupport = other.fDstReadInShaderSupport; |
+ fDualSourceBlendingSupport = other.fDualSourceBlendingSupport; |
+ |
+ fShaderPrecisionVaries = other.fShaderPrecisionVaries; |
+ for (int s = 0; s < kGrShaderTypeCount; ++s) { |
+ for (int p = 0; p < kGrSLPrecisionCount; ++p) { |
+ fFloatPrecisions[s][p] = other.fFloatPrecisions[s][p]; |
+ } |
+ } |
+ return *this; |
+} |
+ |
+static const char* shader_type_to_string(GrShaderType type) { |
+ switch (type) { |
+ case kVertex_GrShaderType: |
+ return "vertex"; |
+ case kGeometry_GrShaderType: |
+ return "geometry"; |
+ case kFragment_GrShaderType: |
+ return "fragment"; |
+ } |
+ return ""; |
+} |
+ |
+static const char* precision_to_string(GrSLPrecision p) { |
+ switch (p) { |
+ case kLow_GrSLPrecision: |
+ return "low"; |
+ case kMedium_GrSLPrecision: |
+ return "medium"; |
+ case kHigh_GrSLPrecision: |
+ return "high"; |
+ } |
+ return ""; |
+} |
+ |
+SkString GrShaderCaps::dump() const { |
+ SkString r; |
+ static const char* gNY[] = { "NO", "YES" }; |
+ r.appendf("Shader Derivative Support : %s\n", gNY[fShaderDerivativeSupport]); |
+ r.appendf("Geometry Shader Support : %s\n", gNY[fGeometryShaderSupport]); |
+ r.appendf("Path Rendering Support : %s\n", gNY[fPathRenderingSupport]); |
+ r.appendf("Dst Read In Shader Support : %s\n", gNY[fDstReadInShaderSupport]); |
+ r.appendf("Dual Source Blending Support : %s\n", gNY[fDualSourceBlendingSupport]); |
+ |
+ r.appendf("Shader Float Precisions (varies: %s):\n", gNY[fShaderPrecisionVaries]); |
+ |
+ for (int s = 0; s < kGrShaderTypeCount; ++s) { |
+ GrShaderType shaderType = static_cast<GrShaderType>(s); |
+ r.appendf("\t%s:\n", shader_type_to_string(shaderType)); |
+ for (int p = 0; p < kGrSLPrecisionCount; ++p) { |
+ if (fFloatPrecisions[s][p].supported()) { |
+ GrSLPrecision precision = static_cast<GrSLPrecision>(p); |
+ r.appendf("\t\t%s: log_low: %d log_high: %d bits: %d\n", |
+ precision_to_string(precision), |
+ fFloatPrecisions[s][p].fLogRangeLow, |
+ fFloatPrecisions[s][p].fLogRangeHigh, |
+ fFloatPrecisions[s][p].fBits); |
+ } |
+ } |
+ } |
+ |
+ return r; |
+} |
+ |
+/////////////////////////////////////////////////////////////////////////////// |
+ |
void GrDrawTargetCaps::reset() { |
fMipMapSupport = false; |
fNPOTTextureTileSupport = false; |
fTwoSidedStencilSupport = false; |
fStencilWrapOpsSupport = false; |
- fShaderDerivativeSupport = false; |
- fGeometryShaderSupport = false; |
- fDualSourceBlendingSupport = false; |
- fPathRenderingSupport = false; |
- fDstReadInShaderSupport = false; |
fDiscardRenderTargetSupport = false; |
fReuseScratchTextures = true; |
fGpuTracingSupport = false; |
@@ -566,8 +642,6 @@ void GrDrawTargetCaps::reset() { |
fMaxTextureSize = 0; |
fMaxSampleCount = 0; |
- fShaderPrecisionVaries = false; |
- |
memset(fConfigRenderSupport, 0, sizeof(fConfigRenderSupport)); |
memset(fConfigTextureSupport, 0, sizeof(fConfigTextureSupport)); |
} |
@@ -577,11 +651,6 @@ GrDrawTargetCaps& GrDrawTargetCaps::operator=(const GrDrawTargetCaps& other) { |
fNPOTTextureTileSupport = other.fNPOTTextureTileSupport; |
fTwoSidedStencilSupport = other.fTwoSidedStencilSupport; |
fStencilWrapOpsSupport = other.fStencilWrapOpsSupport; |
- fShaderDerivativeSupport = other.fShaderDerivativeSupport; |
- fGeometryShaderSupport = other.fGeometryShaderSupport; |
- fDualSourceBlendingSupport = other.fDualSourceBlendingSupport; |
- fPathRenderingSupport = other.fPathRenderingSupport; |
- fDstReadInShaderSupport = other.fDstReadInShaderSupport; |
fDiscardRenderTargetSupport = other.fDiscardRenderTargetSupport; |
fReuseScratchTextures = other.fReuseScratchTextures; |
fGpuTracingSupport = other.fGpuTracingSupport; |
@@ -600,12 +669,6 @@ GrDrawTargetCaps& GrDrawTargetCaps::operator=(const GrDrawTargetCaps& other) { |
memcpy(fConfigRenderSupport, other.fConfigRenderSupport, sizeof(fConfigRenderSupport)); |
memcpy(fConfigTextureSupport, other.fConfigTextureSupport, sizeof(fConfigTextureSupport)); |
- fShaderPrecisionVaries = other.fShaderPrecisionVaries; |
- for (int s = 0; s < kGrShaderTypeCount; ++s) { |
- for (int p = 0; p < kGrSLPrecisionCount; ++p) { |
- fFloatPrecisions[s][p] = other.fFloatPrecisions[s][p]; |
- } |
- } |
return *this; |
} |
@@ -629,30 +692,6 @@ static SkString map_flags_to_string(uint32_t flags) { |
return str; |
} |
-static const char* shader_type_to_string(GrShaderType type) { |
- switch (type) { |
- case kVertex_GrShaderType: |
- return "vertex"; |
- case kGeometry_GrShaderType: |
- return "geometry"; |
- case kFragment_GrShaderType: |
- return "fragment"; |
- } |
- return ""; |
-} |
- |
-static const char* precision_to_string(GrSLPrecision p) { |
- switch (p) { |
- case kLow_GrSLPrecision: |
- return "low"; |
- case kMedium_GrSLPrecision: |
- return "medium"; |
- case kHigh_GrSLPrecision: |
- return "high"; |
- } |
- return ""; |
-} |
- |
SkString GrDrawTargetCaps::dump() const { |
SkString r; |
static const char* gNY[] = {"NO", "YES"}; |
@@ -660,11 +699,6 @@ SkString GrDrawTargetCaps::dump() const { |
r.appendf("NPOT Texture Tile Support : %s\n", gNY[fNPOTTextureTileSupport]); |
r.appendf("Two Sided Stencil Support : %s\n", gNY[fTwoSidedStencilSupport]); |
r.appendf("Stencil Wrap Ops Support : %s\n", gNY[fStencilWrapOpsSupport]); |
- r.appendf("Shader Derivative Support : %s\n", gNY[fShaderDerivativeSupport]); |
- r.appendf("Geometry Shader Support : %s\n", gNY[fGeometryShaderSupport]); |
- r.appendf("Dual Source Blending Support : %s\n", gNY[fDualSourceBlendingSupport]); |
- r.appendf("Path Rendering Support : %s\n", gNY[fPathRenderingSupport]); |
- r.appendf("Dst Read In Shader Support : %s\n", gNY[fDstReadInShaderSupport]); |
r.appendf("Discard Render Target Support : %s\n", gNY[fDiscardRenderTargetSupport]); |
r.appendf("Reuse Scratch Textures : %s\n", gNY[fReuseScratchTextures]); |
r.appendf("Gpu Tracing Support : %s\n", gNY[fGpuTracingSupport]); |
@@ -730,23 +764,6 @@ SkString GrDrawTargetCaps::dump() const { |
gNY[fConfigTextureSupport[i]]); |
} |
- r.appendf("Shader Float Precisions (varies: %s):\n", gNY[fShaderPrecisionVaries]); |
- |
- for (int s = 0; s < kGrShaderTypeCount; ++s) { |
- GrShaderType shaderType = static_cast<GrShaderType>(s); |
- r.appendf("\t%s:\n", shader_type_to_string(shaderType)); |
- for (int p = 0; p < kGrSLPrecisionCount; ++p) { |
- if (fFloatPrecisions[s][p].supported()) { |
- GrSLPrecision precision = static_cast<GrSLPrecision>(p); |
- r.appendf("\t\t%s: log_low: %d log_high: %d bits: %d\n", |
- precision_to_string(precision), |
- fFloatPrecisions[s][p].fLogRangeLow, |
- fFloatPrecisions[s][p].fLogRangeHigh, |
- fFloatPrecisions[s][p].fBits); |
- } |
- } |
- } |
- |
return r; |
} |