diff options
author | Brian Salomon <bsalomon@google.com> | 2016-11-29 11:59:17 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2016-11-29 17:42:53 +0000 |
commit | f9f451213a3951d8a61568998de2ddbd643f6693 (patch) | |
tree | ba11ab458cbe8c654337bc704c52f4ca73f6b44a /src/gpu/GrShaderVar.cpp | |
parent | e18c97b73a0392b2eee57a111122dd5b637e36e6 (diff) |
Reland image storage with fixes.
Revert "Revert "Initial OpenGL Image support.""
This reverts commit 59dc41175d99d0a31c046aec0c26c4d82a3a3574.
BUG=skia:
Change-Id: Ibe3c87ce7f746f065fdbcc5a518388cc291112f5
Reviewed-on: https://skia-review.googlesource.com/5131
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
Diffstat (limited to 'src/gpu/GrShaderVar.cpp')
-rw-r--r-- | src/gpu/GrShaderVar.cpp | 74 |
1 files changed, 73 insertions, 1 deletions
diff --git a/src/gpu/GrShaderVar.cpp b/src/gpu/GrShaderVar.cpp index ef305cbfc9..75142cab7f 100644 --- a/src/gpu/GrShaderVar.cpp +++ b/src/gpu/GrShaderVar.cpp @@ -9,14 +9,86 @@ #include "GrShaderVar.h" #include "glsl/GrGLSLCaps.h" +static const char* type_modifier_string(GrShaderVar::TypeModifier t) { + switch (t) { + case GrShaderVar::kNone_TypeModifier: return ""; + case GrShaderVar::kIn_TypeModifier: return "in"; + case GrShaderVar::kInOut_TypeModifier: return "inout"; + case GrShaderVar::kOut_TypeModifier: return "out"; + case GrShaderVar::kUniform_TypeModifier: return "uniform"; + } + SkFAIL("Unknown shader variable type modifier."); + return ""; +} + +void GrShaderVar::setImageStorageFormat(GrImageStorageFormat format) { + const char* formatStr = nullptr; + switch (format) { + case GrImageStorageFormat::kRGBA8: + formatStr = "rgba8"; + break; + case GrImageStorageFormat::kRGBA8i: + formatStr = "rgba8i"; + break; + case GrImageStorageFormat::kRGBA16f: + formatStr = "rgba16f"; + break; + case GrImageStorageFormat::kRGBA32f: + formatStr = "rgba32f"; + break; + } + this->addLayoutQualifier(formatStr); + SkASSERT(formatStr); +} + +void GrShaderVar::setMemoryModel(GrSLMemoryModel model) { + switch (model) { + case GrSLMemoryModel::kNone: + return; + case GrSLMemoryModel::kCoherent: + this->addModifier("coherent"); + return; + case GrSLMemoryModel::kVolatile: + this->addModifier("volatile"); + return; + } + SkFAIL("Unknown memory model."); +} + +void GrShaderVar::setRestrict(GrSLRestrict restrict) { + switch (restrict) { + case GrSLRestrict::kNo: + return; + case GrSLRestrict::kYes: + this->addModifier("restrict"); + return; + } + SkFAIL("Unknown restrict."); +} + +void GrShaderVar::setIOType(GrIOType ioType) { + switch (ioType) { + case kRW_GrIOType: + return; + case kRead_GrIOType: + this->addModifier("readonly"); + return; + case kWrite_GrIOType: + this->addModifier("writeonly"); + return; + } + SkFAIL("Unknown io type."); +} + void GrShaderVar::appendDecl(const GrGLSLCaps* glslCaps, SkString* out) const { SkASSERT(kDefault_GrSLPrecision == fPrecision || GrSLTypeAcceptsPrecision(fType)); + SkString layout = fLayoutQualifier; if (!fLayoutQualifier.isEmpty()) { out->appendf("layout(%s) ", fLayoutQualifier.c_str()); } out->append(fExtraModifiers); if (this->getTypeModifier() != kNone_TypeModifier) { - out->append(TypeModifierString(this->getTypeModifier())); + out->append(type_modifier_string(this->getTypeModifier())); out->append(" "); } GrSLType effectiveType = this->getType(); |