Remove use of GrVkCaps from SkSLProgram settings.
Other backends want to compile into spirv but don't have a GrVkCaps. So
this removes the need and just passes in the little bit of info that
was gotten off the caps.
Change-Id: I7496ee1b8a09d51339204543d807ea8d75a5f8e8
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/283938
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
diff --git a/src/gpu/dawn/GrDawnProgramBuilder.cpp b/src/gpu/dawn/GrDawnProgramBuilder.cpp
index 106740f..90b2790 100644
--- a/src/gpu/dawn/GrDawnProgramBuilder.cpp
+++ b/src/gpu/dawn/GrDawnProgramBuilder.cpp
@@ -21,6 +21,8 @@
settings.fCaps = gpu->caps()->shaderCaps();
settings.fFlipY = flipY;
settings.fRTHeightOffset = rtHeightOffset;
+ settings.fRTHeightBinding = 0;
+ settings.fRTHeightSet = 0;
std::unique_ptr<SkSL::Program> program = gpu->shaderCompiler()->convertProgram(
kind,
shaderString,
diff --git a/src/gpu/vk/GrVkPipelineStateBuilder.cpp b/src/gpu/vk/GrVkPipelineStateBuilder.cpp
index 2b75c38..ee3bf5d 100644
--- a/src/gpu/vk/GrVkPipelineStateBuilder.cpp
+++ b/src/gpu/vk/GrVkPipelineStateBuilder.cpp
@@ -199,7 +199,8 @@
VkPipelineShaderStageCreateInfo shaderStageInfo[3];
SkSL::Program::Settings settings;
settings.fCaps = this->caps()->shaderCaps();
- settings.fVkCaps = &this->gpu()->vkCaps();
+ settings.fRTHeightBinding = this->gpu()->vkCaps().getFragmentUniformBinding();
+ settings.fRTHeightSet = this->gpu()->vkCaps().getFragmentUniformSet();
settings.fFlipY = this->origin() != kTopLeft_GrSurfaceOrigin;
settings.fSharpenTextures =
this->gpu()->getContext()->priv().options().fSharpenMipmappedTextures;
diff --git a/src/sksl/SkSLSPIRVCodeGenerator.cpp b/src/sksl/SkSLSPIRVCodeGenerator.cpp
index f0e14ec..54a9c79 100644
--- a/src/sksl/SkSLSPIRVCodeGenerator.cpp
+++ b/src/sksl/SkSLSPIRVCodeGenerator.cpp
@@ -1828,17 +1828,11 @@
SKSL_RTHEIGHT_NAME, fContext.fFloat_Type.get());
StringFragment name("sksl_synthetic_uniforms");
Type intfStruct(-1, name, fields);
- int binding;
- int set;
-#ifdef SK_VULKAN
- const GrVkCaps* vkCaps = fProgram.fSettings.fVkCaps;
- SkASSERT(vkCaps);
- binding = vkCaps->getFragmentUniformBinding();
- set = vkCaps->getFragmentUniformSet();
-#else
- binding = 0;
- set = 0;
-#endif
+
+ int binding = fProgram.fSettings.fRTHeightBinding;
+ int set = fProgram.fSettings.fRTHeightBinding;
+ SkASSERT(binding != -1 && set != -1);
+
Layout layout(0, -1, -1, binding, -1, set, -1, -1, Layout::Format::kUnspecified,
Layout::kUnspecified_Primitive, -1, -1, "", Layout::kNo_Key,
Layout::CType::kDefault);
diff --git a/src/sksl/ir/SkSLProgram.h b/src/sksl/ir/SkSLProgram.h
index c62bd0b..c7694b5 100644
--- a/src/sksl/ir/SkSLProgram.h
+++ b/src/sksl/ir/SkSLProgram.h
@@ -88,9 +88,6 @@
const StandaloneShaderCaps* fCaps = &standaloneCaps;
#else
const GrShaderCaps* fCaps = nullptr;
-#ifdef SK_VULKAN
- const GrVkCaps* fVkCaps = nullptr;
-#endif
#endif
// if false, sk_FragCoord is exactly the same as gl_FragCoord. If true, the y coordinate
// must be flipped.
@@ -107,6 +104,11 @@
// if the program needs to create an RTHeight uniform, this is its offset in the uniform
// buffer
int fRTHeightOffset = -1;
+ // if the program needs to create an RTHeight uniform and is creating spriv, this is the
+ // binding and set number of the uniform buffer.
+ int fRTHeightBinding = -1;
+ int fRTHeightSet = -1;
+
std::unordered_map<String, Value> fArgs;
};