aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/vk
diff options
context:
space:
mode:
authorGravatar Brian Salomon <bsalomon@google.com>2016-11-18 11:58:54 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2016-11-21 18:01:43 +0000
commit101b844d6ba031de5c4e95b43f9292f266799237 (patch)
tree138593a7d161695e26b691db6557fd1b22914b4d /src/gpu/vk
parent3502c5cc736f131674147ed19f1942f83f5fb9a4 (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.cpp10
-rw-r--r--src/gpu/vk/GrVkGLSLSampler.h49
-rw-r--r--src/gpu/vk/GrVkResourceProvider.cpp1
-rw-r--r--src/gpu/vk/GrVkUniformHandler.cpp34
-rw-r--r--src/gpu/vk/GrVkUniformHandler.h35
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;