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) {
}
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,
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);
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);