diff options
author | Brian Salomon <bsalomon@google.com> | 2016-11-22 15:56:30 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2016-11-22 21:35:11 +0000 |
commit | be34882042048db096baca32ddf4a8b472529804 (patch) | |
tree | 2676dc4a9e6506f19728eddfe011ba4465f1c3ab /src/gpu/glsl/GrGLSLProgramBuilder.h | |
parent | 030cbd5f3cc60255b887fb88920fb655c8a2a9be (diff) |
Initial OpenGL Image support.
This change along with recently landed changes is enough to make the new unit test work and not much else. imageLoad is support but not stores or any other image functions (atomics). Barriers in the shading language or the GL API are not yet hooked up.
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=4182
Change-Id: I5958b7c89e40ae5ee05f7bbaca3b3738162fe5ce
Reviewed-on: https://skia-review.googlesource.com/4182
Reviewed-by: Greg Daniel <egdaniel@google.com>
Reviewed-by: Chris Dalton <csmartdalton@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
Diffstat (limited to 'src/gpu/glsl/GrGLSLProgramBuilder.h')
-rw-r--r-- | src/gpu/glsl/GrGLSLProgramBuilder.h | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/src/gpu/glsl/GrGLSLProgramBuilder.h b/src/gpu/glsl/GrGLSLProgramBuilder.h index 6c1eb3bf4b..5543537d19 100644 --- a/src/gpu/glsl/GrGLSLProgramBuilder.h +++ b/src/gpu/glsl/GrGLSLProgramBuilder.h @@ -28,7 +28,9 @@ typedef SkSTArray<8, GrGLSLFragmentProcessor*, true> GrGLSLFragProcs; class GrGLSLProgramBuilder { public: - typedef GrGLSLUniformHandler::UniformHandle UniformHandle; + using UniformHandle = GrGLSLUniformHandler::UniformHandle; + using SamplerHandle = GrGLSLUniformHandler::SamplerHandle; + using ImageStorageHandle = GrGLSLUniformHandler::ImageStorageHandle; virtual ~GrGLSLProgramBuilder() {} @@ -42,8 +44,6 @@ public: void appendUniformDecls(GrShaderFlags visibility, SkString*) const; - typedef GrGLSLUniformHandler::SamplerHandle SamplerHandle; - const GrShaderVar& samplerVariable(SamplerHandle handle) const { return this->uniformHandler()->samplerVariable(handle); } @@ -52,6 +52,10 @@ public: return this->uniformHandler()->samplerSwizzle(handle); } + const GrShaderVar& imageStorageVariable(ImageStorageHandle handle) const { + return this->uniformHandler()->imageStorageVariable(handle); + } + // Handles for program uniforms (other than per-effect uniforms) struct BuiltinUniformHandles { UniformHandle fRTAdjustmentUni; @@ -156,17 +160,18 @@ private: const GrGLSLExpr4& coverageIn, bool ignoresCoverage, GrPixelLocalStorageState plsState); - - void emitSamplers(const GrProcessor& processor, - SkTArray<SamplerHandle>* outTexSamplers, - SkTArray<SamplerHandle>* outBufferSamplers); - void emitSampler(GrSLType samplerType, - GrPixelConfig, - const char* name, - GrShaderFlags visibility, - SkTArray<SamplerHandle>* outSamplers); + void emitSamplersAndImageStorages(const GrProcessor& processor, + SkTArray<SamplerHandle>* outTexSamplerHandles, + SkTArray<SamplerHandle>* outBufferSamplerHandles, + SkTArray<ImageStorageHandle>* outImageStorageHandles); + void emitSampler(GrSLType samplerType, GrPixelConfig, const char* name, + GrShaderFlags visibility, SkTArray<SamplerHandle >* outSamplerHandles); + void emitImageStorage(const GrProcessor::ImageStorageAccess&, + const char* name, + SkTArray<ImageStorageHandle>* outImageStorageHandles); void emitFSOutputSwizzle(bool hasSecondaryOutput); bool checkSamplerCounts(); + bool checkImageStorageCounts(); #ifdef SK_DEBUG void verify(const GrPrimitiveProcessor&); @@ -177,6 +182,9 @@ private: int fNumVertexSamplers; int fNumGeometrySamplers; int fNumFragmentSamplers; + int fNumVertexImageStorages; + int fNumGeometryImageStorages; + int fNumFragmentImageStorages; SkSTArray<4, GrShaderVar> fTransformedCoordVars; }; |