blob: 096c98910eea0bf88a7910d8ee016cdfda58a185 [file] [log] [blame]
/*
* Copyright 2018 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "GrMtlVaryingHandler.h"
void finalize_helper(GrMtlVaryingHandler::VarArray& vars) {
int locationIndex;
for (locationIndex = 0; locationIndex < vars.count(); locationIndex++) {
GrShaderVar& var = vars[locationIndex];
// Metal only allows scalars (including bool and char) and vectors as varyings
SkASSERT(GrSLTypeVecLength(var.getType()) != -1);
SkString location;
location.appendf("location = %d", locationIndex);
var.addLayoutQualifier(location.c_str());
}
// The max number of inputs is 60 for iOS and 32 for macOS. The max number of components is 60
// for iOS and 128 for macOS. To be conservative, we are going to assert that we have less than
// 15 varyings because in the worst case scenario, they are all vec4s (15 * 4 = 60). If we hit
// this assert, we can implement a function in GrMtlCaps to be less conservative.
SkASSERT(locationIndex <= 15);
}
void GrMtlVaryingHandler::onFinalize() {
finalize_helper(fVertexInputs);
finalize_helper(fVertexOutputs);
finalize_helper(fGeomInputs);
finalize_helper(fGeomOutputs);
finalize_helper(fFragInputs);
finalize_helper(fFragOutputs);
}