From 60397689631d74ea51892487456849c57b5364f3 Mon Sep 17 00:00:00 2001 From: Brian Salomon Date: Tue, 22 Nov 2016 15:06:46 -0500 Subject: Move GrShaderVar to an appending model for layout qualifiers GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=5144 Change-Id: I05e88961e50bd679cfe5863f413f3ec65bc9fd95 Reviewed-on: https://skia-review.googlesource.com/5144 Reviewed-by: Greg Daniel Reviewed-by: Chris Dalton Commit-Queue: Brian Salomon --- include/gpu/GrShaderVar.h | 13 ++++++++++--- src/gpu/vk/GrVkPipelineStateBuilder.cpp | 4 ++-- src/gpu/vk/GrVkUniformHandler.cpp | 2 +- src/gpu/vk/GrVkVaryingHandler.cpp | 2 +- 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/include/gpu/GrShaderVar.h b/include/gpu/GrShaderVar.h index 81a7566a9d..aaae107c19 100644 --- a/include/gpu/GrShaderVar.h +++ b/include/gpu/GrShaderVar.h @@ -271,10 +271,17 @@ public: void setPrecision(GrSLPrecision p) { fPrecision = p; } /** - * Set the layout qualifier + * Appends to the layout qualifier */ - void setLayoutQualifier(const char* layoutQualifier) { - fLayoutQualifier = layoutQualifier; + void addLayoutQualifier(const char* layoutQualifier) { + if (!layoutQualifier || !strlen(layoutQualifier)) { + return; + } + if (fLayoutQualifier.isEmpty()) { + fLayoutQualifier = layoutQualifier; + } else { + fLayoutQualifier.appendf(", %s", layoutQualifier); + } } void addModifier(const char* modifier) { diff --git a/src/gpu/vk/GrVkPipelineStateBuilder.cpp b/src/gpu/vk/GrVkPipelineStateBuilder.cpp index 725bc24641..01701b6653 100644 --- a/src/gpu/vk/GrVkPipelineStateBuilder.cpp +++ b/src/gpu/vk/GrVkPipelineStateBuilder.cpp @@ -54,11 +54,11 @@ const GrGLSLCaps* GrVkPipelineStateBuilder::glslCaps() const { } void GrVkPipelineStateBuilder::finalizeFragmentOutputColor(GrShaderVar& outputColor) { - outputColor.setLayoutQualifier("location = 0, index = 0"); + outputColor.addLayoutQualifier("location = 0, index = 0"); } void GrVkPipelineStateBuilder::finalizeFragmentSecondaryColor(GrShaderVar& outputColor) { - outputColor.setLayoutQualifier("location = 0, index = 1"); + outputColor.addLayoutQualifier("location = 0, index = 1"); } bool GrVkPipelineStateBuilder::CreateVkShaderModule(const GrVkGpu* gpu, diff --git a/src/gpu/vk/GrVkUniformHandler.cpp b/src/gpu/vk/GrVkUniformHandler.cpp index 85b6955177..3998c0fd23 100644 --- a/src/gpu/vk/GrVkUniformHandler.cpp +++ b/src/gpu/vk/GrVkUniformHandler.cpp @@ -189,7 +189,7 @@ GrGLSLUniformHandler::SamplerHandle GrVkUniformHandler::addSampler(uint32_t visi info.fVariable.setName(mangleName); SkString layoutQualifier; layoutQualifier.appendf("set=%d, binding=%d", kSamplerDescSet, fSamplers.count() - 1); - info.fVariable.setLayoutQualifier(layoutQualifier.c_str()); + info.fVariable.addLayoutQualifier(layoutQualifier.c_str()); info.fVisibility = visibility; info.fUBOffset = 0; fSamplerSwizzles.push_back(swizzle); diff --git a/src/gpu/vk/GrVkVaryingHandler.cpp b/src/gpu/vk/GrVkVaryingHandler.cpp index 2b3e97571e..9bab292af8 100644 --- a/src/gpu/vk/GrVkVaryingHandler.cpp +++ b/src/gpu/vk/GrVkVaryingHandler.cpp @@ -58,7 +58,7 @@ void finalize_helper(GrVkVaryingHandler::VarArray& vars) { GrShaderVar& var = vars[i]; SkString location; location.appendf("location = %d", locationIndex); - var.setLayoutQualifier(location.c_str()); + var.addLayoutQualifier(location.c_str()); int elementSize = grsltype_to_location_size(var.getType()); SkASSERT(elementSize); -- cgit v1.2.3