Index: src/gpu/GrDrawTarget.cpp |
diff --git a/src/gpu/GrDrawTarget.cpp b/src/gpu/GrDrawTarget.cpp |
index 65764b88cecf4858335da81f8434df235a0a4fa2..ed54bf9514ae201ccc13e10919e1f852ccc3956f 100644 |
--- a/src/gpu/GrDrawTarget.cpp |
+++ b/src/gpu/GrDrawTarget.cpp |
@@ -1011,6 +1011,8 @@ void GrDrawTargetCaps::reset() { |
fMaxTextureSize = 0; |
fMaxSampleCount = 0; |
+ fShaderPrecisionVaries = false; |
+ |
memset(fConfigRenderSupport, 0, sizeof(fConfigRenderSupport)); |
memset(fConfigTextureSupport, 0, sizeof(fConfigTextureSupport)); |
} |
@@ -1042,6 +1044,12 @@ 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 < GrShaderVar::kPrecisionCount; ++p) { |
+ fFloatPrecisions[s][p] = other.fFloatPrecisions[s][p]; |
+ } |
+ } |
return *this; |
} |
@@ -1065,6 +1073,30 @@ 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(GrShaderVar::Precision p) { |
+ switch (p) { |
+ case GrShaderVar::kLow_Precision: |
+ return "low"; |
+ case GrShaderVar::kMedium_Precision: |
+ return "medium"; |
+ case GrShaderVar::kHigh_Precision: |
+ return "high"; |
+ } |
+ return ""; |
+} |
+ |
SkString GrDrawTargetCaps::dump() const { |
SkString r; |
static const char* gNY[] = {"NO", "YES"}; |
@@ -1140,6 +1172,23 @@ 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 < GrShaderVar::kPrecisionCount; ++p) { |
+ if (fFloatPrecisions[s][p].supported()) { |
+ GrShaderVar::Precision precision = static_cast<GrShaderVar::Precision>(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; |
} |