diff options
author | Greg Daniel <egdaniel@google.com> | 2017-07-17 09:05:16 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-07-17 15:31:57 +0000 |
commit | aa352de50c9ddd932b6b6576d9f856ec691d10a7 (patch) | |
tree | 46436c6d6a7b3e4175d1e02f0a9a3174d4aa6cb6 /src/gpu/vk/GrVkUniformHandler.cpp | |
parent | 263cef7b5f4bb1c5eaddd81d3184566e6c121ec7 (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.cpp | 40 |
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; |