aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/vk/GrVkUniformHandler.cpp
diff options
context:
space:
mode:
authorGravatar Greg Daniel <egdaniel@google.com>2017-07-17 09:05:16 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-07-17 15:31:57 +0000
commitaa352de50c9ddd932b6b6576d9f856ec691d10a7 (patch)
tree46436c6d6a7b3e4175d1e02f0a9a3174d4aa6cb6 /src/gpu/vk/GrVkUniformHandler.cpp
parent263cef7b5f4bb1c5eaddd81d3184566e6c121ec7 (diff)
Update visibility checks in Vulkan to support geom shaders
Bug: skia: Change-Id: Ie80bea38e644647e5a09e95053ddace30521361d Reviewed-on: https://skia-review.googlesource.com/23300 Reviewed-by: Chris Dalton <csmartdalton@google.com> Commit-Queue: Greg Daniel <egdaniel@google.com>
Diffstat (limited to 'src/gpu/vk/GrVkUniformHandler.cpp')
-rw-r--r--src/gpu/vk/GrVkUniformHandler.cpp40
1 files changed, 30 insertions, 10 deletions
diff --git a/src/gpu/vk/GrVkUniformHandler.cpp b/src/gpu/vk/GrVkUniformHandler.cpp
index 74f12e45c2..55fd3d7f24 100644
--- a/src/gpu/vk/GrVkUniformHandler.cpp
+++ b/src/gpu/vk/GrVkUniformHandler.cpp
@@ -229,7 +229,9 @@ GrGLSLUniformHandler::TexelBufferHandle GrVkUniformHandler::addTexelBuffer(uint3
GrSLPrecision precision,
const char* name) {
SkASSERT(name && strlen(name));
- SkDEBUGCODE(static const uint32_t kVisMask = kVertex_GrShaderFlag | kFragment_GrShaderFlag);
+ SkDEBUGCODE(static const uint32_t kVisMask = kVertex_GrShaderFlag |
+ kGeometry_GrShaderFlag |
+ kFragment_GrShaderFlag);
SkASSERT(0 == (~kVisMask & visibility));
SkASSERT(0 != visibility);
SkString mangleName;
@@ -271,25 +273,43 @@ void GrVkUniformHandler::appendUniformDecls(GrShaderFlags visibility, SkString*
}
}
- SkDEBUGCODE(bool firstOffsetCheck = false);
+#ifdef SK_DEBUG
+ bool firstGeomOffsetCheck = false;
+ bool firstFragOffsetCheck = false;
+ for (int i = 0; i < fUniforms.count(); ++i) {
+ const UniformInfo& localUniform = fUniforms[i];
+ if (kVertex_GrShaderFlag == localUniform.fVisibility ||
+ kGeometry_GrShaderFlag == localUniform.fVisibility ||
+ (kVertex_GrShaderFlag | kGeometry_GrShaderFlag) == localUniform.fVisibility) {
+ if (!firstGeomOffsetCheck) {
+ // Check to make sure we are starting our offset at 0 so the offset qualifier we
+ // set on each variable in the uniform block is valid.
+ SkASSERT(0 == localUniform.fUBOffset);
+ firstGeomOffsetCheck = true;
+ }
+ } else {
+ SkASSERT(kFragment_GrShaderFlag == localUniform.fVisibility);
+ if (!firstFragOffsetCheck) {
+ // Check to make sure we are starting our offset at 0 so the offset qualifier we
+ // set on each variable in the uniform block is valid.
+ SkASSERT(0 == localUniform.fUBOffset);
+ firstFragOffsetCheck = true;
+ }
+ }
+ }
+#endif
+
SkString uniformsString;
for (int i = 0; i < fUniforms.count(); ++i) {
const UniformInfo& localUniform = fUniforms[i];
if (visibility & localUniform.fVisibility) {
if (GrSLTypeIsFloatType(localUniform.fVariable.getType())) {
-#ifdef SK_DEBUG
- if (!firstOffsetCheck) {
- // Check to make sure we are starting our offset at 0 so the offset qualifier we
- // set on each variable in the uniform block is valid.
- SkASSERT(0 == localUniform.fUBOffset);
- firstOffsetCheck = true;
- }
-#endif
localUniform.fVariable.appendDecl(fProgramBuilder->shaderCaps(), &uniformsString);
uniformsString.append(";\n");
}
}
}
+
if (!uniformsString.isEmpty()) {
uint32_t uniformBinding;
const char* stage;