diff options
author | Brian Salomon <bsalomon@google.com> | 2016-11-18 11:58:54 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2016-11-21 18:01:43 +0000 |
commit | 101b844d6ba031de5c4e95b43f9292f266799237 (patch) | |
tree | 138593a7d161695e26b691db6557fd1b22914b4d /src/gpu/vk | |
parent | 3502c5cc736f131674147ed19f1942f83f5fb9a4 (diff) |
Remove GrGLSLSampler type and subclasses
GrGLSLUniformManager and GrGLSLProgramDataManager subclasses handle sampler variation across GPU backends.
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=5002
Change-Id: I968b006bab978c2fa209d1f7eda710c298d1212f
Reviewed-on: https://skia-review.googlesource.com/5002
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
Diffstat (limited to 'src/gpu/vk')
-rw-r--r-- | src/gpu/vk/GrVkDescriptorSetManager.cpp | 10 | ||||
-rw-r--r-- | src/gpu/vk/GrVkGLSLSampler.h | 49 | ||||
-rw-r--r-- | src/gpu/vk/GrVkResourceProvider.cpp | 1 | ||||
-rw-r--r-- | src/gpu/vk/GrVkUniformHandler.cpp | 34 | ||||
-rw-r--r-- | src/gpu/vk/GrVkUniformHandler.h | 35 |
5 files changed, 47 insertions, 82 deletions
diff --git a/src/gpu/vk/GrVkDescriptorSetManager.cpp b/src/gpu/vk/GrVkDescriptorSetManager.cpp index d05a11c49f..f523cee960 100644 --- a/src/gpu/vk/GrVkDescriptorSetManager.cpp +++ b/src/gpu/vk/GrVkDescriptorSetManager.cpp @@ -11,7 +11,6 @@ #include "GrVkDescriptorSet.h" #include "GrVkGpu.h" #include "GrVkUniformHandler.h" -#include "glsl/GrGLSLSampler.h" GrVkDescriptorSetManager::GrVkDescriptorSetManager(GrVkGpu* gpu, VkDescriptorType type, @@ -20,7 +19,7 @@ GrVkDescriptorSetManager::GrVkDescriptorSetManager(GrVkGpu* gpu, if (type == VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER) { SkASSERT(uniformHandler); for (int i = 0; i < uniformHandler->numSamplers(); ++i) { - fBindingVisibilities.push_back(uniformHandler->getSampler(i).visibility()); + fBindingVisibilities.push_back(uniformHandler->samplerVisibility(i)); } } else { SkASSERT(type == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER); @@ -103,7 +102,7 @@ bool GrVkDescriptorSetManager::isCompatible(VkDescriptorType type, return false; } for (int i = 0; i < uniHandler->numSamplers(); ++i) { - if (uniHandler->getSampler(i).visibility() != fBindingVisibilities[i]) { + if (uniHandler->samplerVisibility(i) != fBindingVisibilities[i]) { return false; } } @@ -185,10 +184,7 @@ void GrVkDescriptorSetManager::DescriptorPoolManager::init(GrVkGpu* gpu, for (uint32_t i = 0; i < numSamplers; ++i) { uint32_t visibility; if (uniformHandler) { - const GrVkGLSLSampler& sampler = - static_cast<const GrVkGLSLSampler&>(uniformHandler->getSampler(i)); - SkASSERT(sampler.binding() == i); - visibility = sampler.visibility(); + visibility = uniformHandler->samplerVisibility(i); } else { visibility = (*visibilities)[i]; } diff --git a/src/gpu/vk/GrVkGLSLSampler.h b/src/gpu/vk/GrVkGLSLSampler.h deleted file mode 100644 index f0ba7fa335..0000000000 --- a/src/gpu/vk/GrVkGLSLSampler.h +++ /dev/null @@ -1,49 +0,0 @@ -/* -* 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 GrVkGLSLSampler_DEFINED -#define GrVkGLSLSampler_DEFINED - -#include "glsl/GrGLSLSampler.h" - -#include "glsl/GrGLSLShaderVar.h" - -class GrVkGLSLSampler : public GrGLSLSampler { -public: - GrVkGLSLSampler(uint32_t visibility, - GrPixelConfig config, - GrSLType type, - GrSLPrecision precision, - const char* name, - uint32_t binding, - uint32_t set) : INHERITED(visibility, config), fBinding(binding) { - SkASSERT(GrSLTypeIsCombinedSamplerType(type)); - fShaderVar.setType(type); - fShaderVar.setTypeModifier(GrGLSLShaderVar::kUniform_TypeModifier); - fShaderVar.setPrecision(precision); - fShaderVar.accessName()->set(name); - SkString layoutQualifier; - layoutQualifier.appendf("set=%d, binding=%d", set, binding); - fShaderVar.setLayoutQualifier(layoutQualifier.c_str()); - } - - GrSLType type() const override { return fShaderVar.getType(); } - uint32_t binding() const { return fBinding; } - - const char* onGetSamplerNameForTexture2D() const override { return fShaderVar.c_str(); } - const char* getSamplerNameForTexelFetch() const override { return fShaderVar.c_str(); } - -private: - GrGLSLShaderVar fShaderVar; - uint32_t fBinding; - - friend class GrVkUniformHandler; - - typedef GrGLSLSampler INHERITED; -}; - -#endif diff --git a/src/gpu/vk/GrVkResourceProvider.cpp b/src/gpu/vk/GrVkResourceProvider.cpp index 81e1738595..487633d3dc 100644 --- a/src/gpu/vk/GrVkResourceProvider.cpp +++ b/src/gpu/vk/GrVkResourceProvider.cpp @@ -10,7 +10,6 @@ #include "GrSamplerParams.h" #include "GrVkCommandBuffer.h" #include "GrVkCopyPipeline.h" -#include "GrVkGLSLSampler.h" #include "GrVkPipeline.h" #include "GrVkRenderTarget.h" #include "GrVkSampler.h" diff --git a/src/gpu/vk/GrVkUniformHandler.cpp b/src/gpu/vk/GrVkUniformHandler.cpp index 212095aee4..1da411934d 100644 --- a/src/gpu/vk/GrVkUniformHandler.cpp +++ b/src/gpu/vk/GrVkUniformHandler.cpp @@ -168,11 +168,11 @@ GrGLSLUniformHandler::UniformHandle GrVkUniformHandler::internalAddUniformArray( return GrGLSLUniformHandler::UniformHandle(fUniforms.count() - 1); } -GrGLSLUniformHandler::SamplerHandle GrVkUniformHandler::internalAddSampler(uint32_t visibility, - GrPixelConfig config, - GrSLType type, - GrSLPrecision precision, - const char* name) { +GrGLSLUniformHandler::SamplerHandle GrVkUniformHandler::addSampler(uint32_t visibility, + GrSwizzle swizzle, + GrSLType type, + GrSLPrecision precision, + const char* name) { SkASSERT(name && strlen(name)); SkDEBUGCODE(static const uint32_t kVisMask = kVertex_GrShaderFlag | kFragment_GrShaderFlag); SkASSERT(0 == (~kVisMask & visibility)); @@ -180,8 +180,20 @@ GrGLSLUniformHandler::SamplerHandle GrVkUniformHandler::internalAddSampler(uint3 SkString mangleName; char prefix = 'u'; fProgramBuilder->nameVariable(&mangleName, prefix, name, true); - fSamplers.emplace_back(visibility, config, type, precision, mangleName.c_str(), - (uint32_t)fSamplers.count(), kSamplerDescSet); + + UniformInfo& info = fSamplers.push_back(); + SkASSERT(GrSLTypeIsCombinedSamplerType(type)); + info.fVariable.setType(type); + info.fVariable.setTypeModifier(GrGLSLShaderVar::kUniform_TypeModifier); + info.fVariable.setPrecision(precision); + info.fVariable.setName(mangleName); + SkString layoutQualifier; + layoutQualifier.appendf("set=%d, binding=%d", kSamplerDescSet, fSamplers.count() - 1); + info.fVariable.setLayoutQualifier(layoutQualifier.c_str()); + info.fVisibility = visibility; + info.fUBOffset = 0; + fSamplerSwizzles.push_back(swizzle); + SkASSERT(fSamplerSwizzles.count() == fSamplers.count()); return GrGLSLUniformHandler::SamplerHandle(fSamplers.count() - 1); } @@ -189,10 +201,10 @@ void GrVkUniformHandler::appendUniformDecls(GrShaderFlags visibility, SkString* SkASSERT(kVertex_GrShaderFlag == visibility || kFragment_GrShaderFlag == visibility); for (int i = 0; i < fSamplers.count(); ++i) { - const GrVkGLSLSampler& sampler = fSamplers[i]; - SkASSERT(sampler.type() == kTexture2DSampler_GrSLType); - if (visibility == sampler.visibility()) { - sampler.fShaderVar.appendDecl(fProgramBuilder->glslCaps(), out); + const UniformInfo& sampler = fSamplers[i]; + SkASSERT(sampler.fVariable.getType() == kTexture2DSampler_GrSLType); + if (visibility == sampler.fVisibility) { + sampler.fVariable.appendDecl(fProgramBuilder->glslCaps(), out); out->append(";\n"); } } diff --git a/src/gpu/vk/GrVkUniformHandler.h b/src/gpu/vk/GrVkUniformHandler.h index a6ea936737..89dc410c1f 100644 --- a/src/gpu/vk/GrVkUniformHandler.h +++ b/src/gpu/vk/GrVkUniformHandler.h @@ -11,7 +11,6 @@ #include "glsl/GrGLSLUniformHandler.h" #include "GrAllocator.h" -#include "GrVkGLSLSampler.h" #include "glsl/GrGLSLShaderVar.h" class GrVkUniformHandler : public GrGLSLUniformHandler { @@ -47,6 +46,7 @@ private: explicit GrVkUniformHandler(GrGLSLProgramBuilder* program) : INHERITED(program) , fUniforms(kUniformsPerBlock) + , fSamplers(kUniformsPerBlock) , fCurrentVertexUBOOffset(0) , fCurrentFragmentUBOOffset(0) , fCurrentSamplerBinding(0) { @@ -60,15 +60,21 @@ private: int arrayCount, const char** outName) override; - SamplerHandle internalAddSampler(uint32_t visibility, - GrPixelConfig config, - GrSLType type, - GrSLPrecision precision, - const char* name) override; + SamplerHandle addSampler(uint32_t visibility, + GrSwizzle swizzle, + GrSLType type, + GrSLPrecision precision, + const char* name) override; - int numSamplers() const override { return fSamplers.count(); } - const GrGLSLSampler& getSampler(SamplerHandle handle) const override { - return fSamplers[handle.toIndex()]; + int numSamplers() const { return fSamplers.count(); } + const GrGLSLShaderVar& samplerVariable(SamplerHandle handle) const override { + return fSamplers[handle.toIndex()].fVariable; + } + GrSwizzle samplerSwizzle(SamplerHandle handle) const override { + return fSamplerSwizzles[handle.toIndex()]; + } + uint32_t samplerVisibility(SamplerHandle handle) const { + return fSamplers[handle.toIndex()].fVisibility; } void appendUniformDecls(GrShaderFlags, SkString*) const override; @@ -82,12 +88,13 @@ private: } - UniformInfoArray fUniforms; - SkTArray<GrVkGLSLSampler> fSamplers; + UniformInfoArray fUniforms; + UniformInfoArray fSamplers; + SkTArray<GrSwizzle> fSamplerSwizzles; - uint32_t fCurrentVertexUBOOffset; - uint32_t fCurrentFragmentUBOOffset; - uint32_t fCurrentSamplerBinding; + uint32_t fCurrentVertexUBOOffset; + uint32_t fCurrentFragmentUBOOffset; + uint32_t fCurrentSamplerBinding; friend class GrVkPipelineStateBuilder; friend class GrVkDescriptorSetManager; |