diff options
author | Greg Daniel <egdaniel@google.com> | 2016-02-22 09:11:32 -0500 |
---|---|---|
committer | Greg Daniel <egdaniel@google.com> | 2016-02-22 09:11:32 -0500 |
commit | 48cf268defad66f58f1aa03b4835e5583be96b2f (patch) | |
tree | d6ce2161cae1b69ca7a595110185652297464696 /src/gpu/vk/GrVkUniformHandler.h | |
parent | 1d524699274bc1d4c43af0c3d0ae269b8c37a3bb (diff) |
Add vulkan files into skia repo. This is an incomplete backend with only partial functionality at this time.
R=robertphillips@google.com
TBR=bsalomon@google.com
BUG=skia:4955
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1718693002
Review URL: https://codereview.chromium.org/1718693002
Diffstat (limited to 'src/gpu/vk/GrVkUniformHandler.h')
-rw-r--r-- | src/gpu/vk/GrVkUniformHandler.h | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/src/gpu/vk/GrVkUniformHandler.h b/src/gpu/vk/GrVkUniformHandler.h new file mode 100644 index 0000000000..f84bcff0a2 --- /dev/null +++ b/src/gpu/vk/GrVkUniformHandler.h @@ -0,0 +1,85 @@ +/* +* Copyright 2016 Google Inc. +* +* Use of this source code is governed by a BSD-style license that can be +* found in the LICENSE file. +*/ + +#ifndef GrVkUniformHandler_DEFINED +#define GrVkUniformHandler_DEFINED + +#include "glsl/GrGLSLUniformHandler.h" + +#include "GrAllocator.h" +#include "glsl/GrGLSLShaderVar.h" + +static const int kUniformsPerBlock = 8; + +class GrVkUniformHandler : public GrGLSLUniformHandler { +public: + enum { + kSamplerDescSet = 0, + kUniformBufferDescSet = 1, + }; + enum { + kVertexBinding = 0, + kFragBinding = 1, + }; + + // fUBOffset is only valid if the GrSLType of the fVariable is not a sampler + struct UniformInfo { + GrGLSLShaderVar fVariable; + uint32_t fVisibility; + uint32_t fSetNumber; + uint32_t fBinding; + uint32_t fUBOffset; + }; + typedef GrTAllocator<UniformInfo> UniformInfoArray; + + const GrGLSLShaderVar& getUniformVariable(UniformHandle u) const override { + return fUniforms[u.toIndex()].fVariable; + } + + const char* getUniformCStr(UniformHandle u) const override { + return this->getUniformVariable(u).c_str(); + } + +private: + explicit GrVkUniformHandler(GrGLSLProgramBuilder* program) + : INHERITED(program) + , fUniforms(kUniformsPerBlock) + , fCurrentVertexUBOOffset(0) + , fCurrentFragmentUBOOffset(0) + , fCurrentSamplerBinding(0) { + } + + UniformHandle internalAddUniformArray(uint32_t visibility, + GrSLType type, + GrSLPrecision precision, + const char* name, + bool mangleName, + int arrayCount, + const char** outName) override; + + void appendUniformDecls(GrShaderFlags, SkString*) const override; + + bool hasVertexUniforms() const { return fCurrentVertexUBOOffset > 0; } + bool hasFragmentUniforms() const { return fCurrentFragmentUBOOffset > 0; } + + + const UniformInfo& getUniformInfo(UniformHandle u) const { + return fUniforms[u.toIndex()]; + } + + + UniformInfoArray fUniforms; + uint32_t fCurrentVertexUBOOffset; + uint32_t fCurrentFragmentUBOOffset; + uint32_t fCurrentSamplerBinding; + + friend class GrVkProgramBuilder; + + typedef GrGLSLUniformHandler INHERITED; +}; + +#endif
\ No newline at end of file |