Revert "Revert "converted vertex shaders to device coords""
This reverts commit 29b3434e48ca41672266ac40f5b9e8f8a0405cb5.
Reason for revert: The Chrome perf regression is suspect & the Nexus 5 is broken w/o this CL.
Original change's description:
> Revert "converted vertex shaders to device coords"
>
> This reverts commit e7e81c15c144b8133f696d0744ed9f7e8d06e936.
>
> Reason for revert: Chrome perf regressions
>
> Bug: skia:
> Change-Id: I17fadc97c4b8e80bfdccbf123554614a00c58473
> Reviewed-on: https://skia-review.googlesource.com/99040
> Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
> Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
TBR=csmartdalton@google.com,ethannicholas@google.com
Change-Id: Iff3c9fce65beeca16028ae59d4d08b1413b90530
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:
Reviewed-on: https://skia-review.googlesource.com/99241
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
diff --git a/src/gpu/gl/GrGLUniformHandler.cpp b/src/gpu/gl/GrGLUniformHandler.cpp
index b3b4b9f..39392f9 100644
--- a/src/gpu/gl/GrGLUniformHandler.cpp
+++ b/src/gpu/gl/GrGLUniformHandler.cpp
@@ -10,10 +10,19 @@
#include "gl/GrGLCaps.h"
#include "gl/GrGLGpu.h"
#include "gl/builders/GrGLProgramBuilder.h"
+#include "SkSLCompiler.h"
#define GL_CALL(X) GR_GL_CALL(this->glGpu()->glInterface(), X)
#define GL_CALL_RET(R, X) GR_GL_CALL_RET(this->glGpu()->glInterface(), R, X)
+bool valid_name(const char* name) {
+ // disallow unknown names that start with "sk_"
+ if (!strncmp(name, GR_NO_MANGLE_PREFIX, strlen(GR_NO_MANGLE_PREFIX))) {
+ return !strcmp(name, SkSL::Compiler::RTADJUST_NAME);
+ }
+ return true;
+}
+
GrGLSLUniformHandler::UniformHandle GrGLUniformHandler::internalAddUniformArray(
uint32_t visibility,
GrSLType type,
@@ -23,6 +32,7 @@
int arrayCount,
const char** outName) {
SkASSERT(name && strlen(name));
+ SkASSERT(valid_name(name));
SkASSERT(0 != visibility);
SkASSERT(kDefault_GrSLPrecision == precision || GrSLTypeTemporarilyAcceptsPrecision(type));
@@ -36,7 +46,7 @@
// uniform view matrix, they should upload the view matrix in their setData along with regular
// uniforms.
char prefix = 'u';
- if ('u' == name[0]) {
+ if ('u' == name[0] || !strncmp(name, GR_NO_MANGLE_PREFIX, strlen(GR_NO_MANGLE_PREFIX))) {
prefix = '\0';
}
fProgramBuilder->nameVariable(uni.fVariable.accessName(), prefix, name, mangleName);
diff --git a/src/gpu/glsl/GrGLSLProgramBuilder.cpp b/src/gpu/glsl/GrGLSLProgramBuilder.cpp
index 118b904..04ebc6a 100644
--- a/src/gpu/glsl/GrGLSLProgramBuilder.cpp
+++ b/src/gpu/glsl/GrGLSLProgramBuilder.cpp
@@ -15,6 +15,7 @@
#include "glsl/GrGLSLGeometryProcessor.h"
#include "glsl/GrGLSLVarying.h"
#include "glsl/GrGLSLXferProcessor.h"
+#include "SkSLCompiler.h"
const int GrGLSLProgramBuilder::kVarsPerBlock = 8;
@@ -74,13 +75,16 @@
this->nameExpression(outputCoverage, "outputCoverage");
SkASSERT(!fUniformHandles.fRTAdjustmentUni.isValid());
- GrShaderFlags rtAdjustVisibility = kVertex_GrShaderFlag;
+ GrShaderFlags rtAdjustVisibility;
if (proc.willUseGeoShader()) {
- rtAdjustVisibility |= kGeometry_GrShaderFlag;
+ rtAdjustVisibility = kGeometry_GrShaderFlag;
+ } else {
+ rtAdjustVisibility = kVertex_GrShaderFlag;
}
- fUniformHandles.fRTAdjustmentUni = this->uniformHandler()->addUniform(rtAdjustVisibility,
- kFloat4_GrSLType,
- "rtAdjustment");
+ fUniformHandles.fRTAdjustmentUni = this->uniformHandler()->addUniform(
+ rtAdjustVisibility,
+ kFloat4_GrSLType,
+ SkSL::Compiler::RTADJUST_NAME);
const char* rtAdjustName =
this->uniformHandler()->getUniformCStr(fUniformHandles.fRTAdjustmentUni);
diff --git a/src/gpu/glsl/GrGLSLUniformHandler.h b/src/gpu/glsl/GrGLSLUniformHandler.h
index e1511c2..662486e 100644
--- a/src/gpu/glsl/GrGLSLUniformHandler.h
+++ b/src/gpu/glsl/GrGLSLUniformHandler.h
@@ -12,6 +12,9 @@
#include "GrShaderVar.h"
#include "GrSwizzle.h"
+// variable names beginning with this prefix will not be mangled
+#define GR_NO_MANGLE_PREFIX "sk_"
+
class GrGLSLProgramBuilder;
class GrGLSLUniformHandler {
@@ -51,7 +54,8 @@
int arrayCount,
const char** outName = nullptr) {
SkASSERT(!GrSLTypeIsCombinedSamplerType(type));
- return this->internalAddUniformArray(visibility, type, precision, name, true, arrayCount,
+ bool mangle = strncmp(name, GR_NO_MANGLE_PREFIX, strlen(GR_NO_MANGLE_PREFIX));
+ return this->internalAddUniformArray(visibility, type, precision, name, mangle, arrayCount,
outName);
}
@@ -61,7 +65,8 @@
int arrayCount,
const char** outName = nullptr) {
SkASSERT(!GrSLTypeIsCombinedSamplerType(type));
- return this->internalAddUniformArray(visibility, type, kDefault_GrSLPrecision, name, true,
+ bool mangle = strncmp(name, GR_NO_MANGLE_PREFIX, strlen(GR_NO_MANGLE_PREFIX));
+ return this->internalAddUniformArray(visibility, type, kDefault_GrSLPrecision, name, mangle,
arrayCount, outName);
}
diff --git a/src/gpu/glsl/GrGLSLVertexGeoBuilder.cpp b/src/gpu/glsl/GrGLSLVertexGeoBuilder.cpp
index 1cf85f7..dba57bb 100644
--- a/src/gpu/glsl/GrGLSLVertexGeoBuilder.cpp
+++ b/src/gpu/glsl/GrGLSLVertexGeoBuilder.cpp
@@ -23,16 +23,14 @@
out->appendf("{float2 _posTmp = %s;", devPos);
}
out->appendf("_posTmp = floor(_posTmp) + half2(0.5, 0.5);"
- "sk_Position = float4(_posTmp.x * %s.x + %s.y,"
- "_posTmp.y * %s.z + %s.w, 0, 1);}",
- rtAdjustName, rtAdjustName, rtAdjustName, rtAdjustName);
+ "sk_Position = float4(_posTmp, 0, 1);}");
} else if (kFloat3_GrSLType == devPosType) {
- out->appendf("sk_Position = float4(dot(%s.xz, %s.xy), dot(%s.yz, %s.zw), 0, %s.z);",
- devPos, rtAdjustName, devPos, rtAdjustName, devPos);
+ out->appendf("sk_Position = float4(%s.x , %s.y, 0, %s.z);",
+ devPos, devPos, devPos);
} else {
SkASSERT(kFloat2_GrSLType == devPosType);
- out->appendf("sk_Position = float4(%s.x * %s.x + %s.y, %s.y * %s.z + %s.w, 0, 1);",
- devPos, rtAdjustName, rtAdjustName, devPos, rtAdjustName, rtAdjustName);
+ out->appendf("sk_Position = float4(%s.x , %s.y, 0, 1);",
+ devPos, devPos);
}
}
diff --git a/src/gpu/vk/GrVkUniformHandler.cpp b/src/gpu/vk/GrVkUniformHandler.cpp
index 040926e..e76cbda 100644
--- a/src/gpu/vk/GrVkUniformHandler.cpp
+++ b/src/gpu/vk/GrVkUniformHandler.cpp
@@ -203,7 +203,7 @@
// uniform view matrix, they should upload the view matrix in their setData along with regular
// uniforms.
char prefix = 'u';
- if ('u' == name[0]) {
+ if ('u' == name[0] || !strncmp(name, GR_NO_MANGLE_PREFIX, strlen(GR_NO_MANGLE_PREFIX))) {
prefix = '\0';
}
fProgramBuilder->nameVariable(uni.fVariable.accessName(), prefix, name, mangleName);