GrGLSLUniformHandler::SamplerHandle GrVkUniformHandler::addSampler(uint32_t visibility, GrSwizzle swizzle, GrSLType type, GrSLPrecision precision, const char* name) { SkASSERT(name && strlen(name)); // For now asserting the the visibility is either only vertex, geometry, or fragment SkASSERT(kVertex_GrShaderFlag == visibility || kFragment_GrShaderFlag == visibility || kGeometry_GrShaderFlag == visibility); SkString mangleName; char prefix = 'u'; fProgramBuilder->nameVariable(&mangleName, prefix, name, true); UniformInfo& info = fSamplers.push_back(); SkASSERT(GrSLTypeIsCombinedSamplerType(type)); info.fVariable.setType(type); info.fVariable.setTypeModifier(GrShaderVar::kUniform_TypeModifier); info.fVariable.setPrecision(precision); info.fVariable.setName(mangleName); SkString layoutQualifier; layoutQualifier.appendf("set=%d, binding=%d", kSamplerDescSet, fSamplers.count() - 1); info.fVariable.addLayoutQualifier(layoutQualifier.c_str()); info.fVisibility = visibility; info.fUBOffset = 0; fSamplerSwizzles.push_back(swizzle); SkASSERT(fSamplerSwizzles.count() == fSamplers.count()); return GrGLSLUniformHandler::SamplerHandle(fSamplers.count() - 1); }
GrGLSLUniformHandler::SamplerHandle GrGLUniformHandler::addSampler(uint32_t visibility, GrSwizzle swizzle, GrSLType type, GrSLPrecision precision, const char* name) { SkASSERT(name && strlen(name)); SkASSERT(0 != visibility); SkString mangleName; char prefix = 'u'; fProgramBuilder->nameVariable(&mangleName, prefix, name, true); UniformInfo& sampler = fSamplers.push_back(); SkASSERT(GrSLTypeIsCombinedSamplerType(type)); sampler.fVariable.setType(type); sampler.fVariable.setTypeModifier(GrShaderVar::kUniform_TypeModifier); sampler.fVariable.setPrecision(precision); sampler.fVariable.setName(mangleName); sampler.fLocation = -1; sampler.fVisibility = visibility; fSamplerSwizzles.push_back(swizzle); SkASSERT(fSamplers.count() == fSamplerSwizzles.count()); return GrGLSLUniformHandler::SamplerHandle(fSamplers.count() - 1); }