Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(792)

Unified Diff: src/gpu/gl/builders/GrGLShaderBuilder.cpp

Issue 1438003003: Move all ShaderBuilder files to GLSL (Closed) Base URL: https://skia.googlesource.com/skia.git@glslProgBuild
Patch Set: nits Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/gpu/gl/builders/GrGLShaderBuilder.h ('k') | src/gpu/gl/builders/GrGLVertexShaderBuilder.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/gl/builders/GrGLShaderBuilder.cpp
diff --git a/src/gpu/gl/builders/GrGLShaderBuilder.cpp b/src/gpu/gl/builders/GrGLShaderBuilder.cpp
deleted file mode 100644
index ed5c3d45377a54412a56ede747da0cbb6aeb09fe..0000000000000000000000000000000000000000
--- a/src/gpu/gl/builders/GrGLShaderBuilder.cpp
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- * Copyright 2014 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include "GrGLShaderBuilder.h"
-#include "glsl/GrGLSLCaps.h"
-#include "glsl/GrGLSLShaderVar.h"
-#include "glsl/GrGLSLTextureSampler.h"
-#include "glsl/GrGLSLProgramBuilder.h"
-
-static void map_swizzle(const char* swizzleMap, const char* swizzle, char* mangledSwizzle) {
- int i;
- for (i = 0; '\0' != swizzle[i]; ++i) {
- switch (swizzle[i]) {
- case 'r':
- mangledSwizzle[i] = swizzleMap[0];
- break;
- case 'g':
- mangledSwizzle[i] = swizzleMap[1];
- break;
- case 'b':
- mangledSwizzle[i] = swizzleMap[2];
- break;
- case 'a':
- mangledSwizzle[i] = swizzleMap[3];
- break;
- default:
- SkFAIL("Unsupported swizzle");
- }
- }
- mangledSwizzle[i] ='\0';
-}
-
-static void append_texture_lookup(SkString* out,
- const GrGLSLCaps* glslCaps,
- const char* samplerName,
- const char* coordName,
- GrPixelConfig config,
- const char* swizzle,
- GrSLType varyingType = kVec2f_GrSLType) {
- SkASSERT(coordName);
-
- out->appendf("%s(%s, %s)",
- GrGLSLTexture2DFunctionName(varyingType, glslCaps->generation()),
- samplerName,
- coordName);
-
- char mangledSwizzle[5];
-
- // This refers to any swizzling we may need to get from some backend internal format to the
- // format used in GrPixelConfig. Some backends will automatically do the sizzling for us.
- if (glslCaps->mustSwizzleInShader()) {
- const char* swizzleMap = glslCaps->getSwizzleMap(config);
- // if the map is simply 'rgba' then we don't need to do any manual swizzling to get us to
- // a GrPixelConfig format.
- if (memcmp(swizzleMap, "rgba", 4)) {
- // Manually 'swizzle' the swizzle using our mapping
- map_swizzle(swizzleMap, swizzle, mangledSwizzle);
- swizzle = mangledSwizzle;
- }
- }
-
- // For shader prettiness we omit the swizzle rather than appending ".rgba".
- if (memcmp(swizzle, "rgba", 4)) {
- out->appendf(".%s", swizzle);
- }
-}
-
-GrGLShaderBuilder::GrGLShaderBuilder(GrGLSLProgramBuilder* program)
- : fProgramBuilder(program)
- , fInputs(GrGLSLProgramBuilder::kVarsPerBlock)
- , fOutputs(GrGLSLProgramBuilder::kVarsPerBlock)
- , fFeaturesAddedMask(0)
- , fCodeIndex(kCode)
- , fFinalized(false) {
- // We push back some dummy pointers which will later become our header
- for (int i = 0; i <= kCode; i++) {
- fShaderStrings.push_back();
- fCompilerStrings.push_back(nullptr);
- fCompilerStringLengths.push_back(0);
- }
-
- this->main() = "void main() {";
-}
-
-void GrGLShaderBuilder::declAppend(const GrGLSLShaderVar& var) {
- SkString tempDecl;
- var.appendDecl(fProgramBuilder->glslCaps(), &tempDecl);
- this->codeAppendf("%s;", tempDecl.c_str());
-}
-
-void GrGLShaderBuilder::emitFunction(GrSLType returnType,
- const char* name,
- int argCnt,
- const GrGLSLShaderVar* args,
- const char* body,
- SkString* outName) {
- this->functions().append(GrGLSLTypeString(returnType));
- fProgramBuilder->nameVariable(outName, '\0', name);
- this->functions().appendf(" %s", outName->c_str());
- this->functions().append("(");
- for (int i = 0; i < argCnt; ++i) {
- args[i].appendDecl(fProgramBuilder->glslCaps(), &this->functions());
- if (i < argCnt - 1) {
- this->functions().append(", ");
- }
- }
- this->functions().append(") {\n");
- this->functions().append(body);
- this->functions().append("}\n\n");
-}
-
-void GrGLShaderBuilder::appendTextureLookup(SkString* out,
- const GrGLSLTextureSampler& sampler,
- const char* coordName,
- GrSLType varyingType) const {
- append_texture_lookup(out,
- fProgramBuilder->glslCaps(),
- fProgramBuilder->getUniformCStr(sampler.fSamplerUniform),
- coordName,
- sampler.config(),
- sampler.swizzle(),
- varyingType);
-}
-
-void GrGLShaderBuilder::appendTextureLookup(const GrGLSLTextureSampler& sampler,
- const char* coordName,
- GrSLType varyingType) {
- this->appendTextureLookup(&this->code(), sampler, coordName, varyingType);
-}
-
-void GrGLShaderBuilder::appendTextureLookupAndModulate(const char* modulation,
- const GrGLSLTextureSampler& sampler,
- const char* coordName,
- GrSLType varyingType) {
- SkString lookup;
- this->appendTextureLookup(&lookup, sampler, coordName, varyingType);
- this->codeAppend((GrGLSLExpr4(modulation) * GrGLSLExpr4(lookup)).c_str());
-}
-
-void GrGLShaderBuilder::addFeature(uint32_t featureBit, const char* extensionName) {
- if (!(featureBit & fFeaturesAddedMask)) {
- this->extensions().appendf("#extension %s: require\n", extensionName);
- fFeaturesAddedMask |= featureBit;
- }
-}
-
-void GrGLShaderBuilder::appendDecls(const VarArray& vars, SkString* out) const {
- for (int i = 0; i < vars.count(); ++i) {
- vars[i].appendDecl(fProgramBuilder->glslCaps(), out);
- out->append(";\n");
- }
-}
-
-void GrGLShaderBuilder::addLayoutQualifier(const char* param, InterfaceQualifier interface) {
- SkASSERT(fProgramBuilder->glslCaps()->generation() >= k330_GrGLSLGeneration ||
- fProgramBuilder->glslCaps()->mustEnableAdvBlendEqs());
- fLayoutParams[interface].push_back() = param;
-}
-
-void GrGLShaderBuilder::compileAndAppendLayoutQualifiers() {
- static const char* interfaceQualifierNames[] = {
- "out"
- };
-
- for (int interface = 0; interface <= kLastInterfaceQualifier; ++interface) {
- const SkTArray<SkString>& params = fLayoutParams[interface];
- if (params.empty()) {
- continue;
- }
- this->layoutQualifiers().appendf("layout(%s", params[0].c_str());
- for (int i = 1; i < params.count(); ++i) {
- this->layoutQualifiers().appendf(", %s", params[i].c_str());
- }
- this->layoutQualifiers().appendf(") %s;\n", interfaceQualifierNames[interface]);
- }
-
- GR_STATIC_ASSERT(0 == GrGLShaderBuilder::kOut_InterfaceQualifier);
- GR_STATIC_ASSERT(SK_ARRAY_COUNT(interfaceQualifierNames) == kLastInterfaceQualifier + 1);
-}
-
-void GrGLShaderBuilder::finalize(uint32_t visibility) {
- SkASSERT(!fFinalized);
- this->versionDecl() = fProgramBuilder->glslCaps()->versionDeclString();
- this->compileAndAppendLayoutQualifiers();
- SkASSERT(visibility);
- fProgramBuilder->appendUniformDecls((GrGLSLProgramBuilder::ShaderVisibility) visibility,
- &this->uniforms());
- this->appendDecls(fInputs, &this->inputs());
- // We should not have any outputs in the fragment shader when using version 1.10
- SkASSERT(GrGLSLProgramBuilder::kFragment_Visibility != visibility ||
- k110_GrGLSLGeneration != fProgramBuilder->glslCaps()->generation() ||
- fOutputs.empty());
- this->appendDecls(fOutputs, &this->outputs());
- this->onFinalize();
- // append the 'footer' to code
- this->code().append("}");
-
- for (int i = 0; i <= fCodeIndex; i++) {
- fCompilerStrings[i] = fShaderStrings[i].c_str();
- fCompilerStringLengths[i] = (int)fShaderStrings[i].size();
- }
-
- fFinalized = true;
-}
-
« no previous file with comments | « src/gpu/gl/builders/GrGLShaderBuilder.h ('k') | src/gpu/gl/builders/GrGLVertexShaderBuilder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698