SpirvShader: Add support for DescriptorSet and Binding decorations
Bug: b/126330097
Change-Id: Id705dc19bb3a114bf703ddc37b529d6ac89b4d52
Reviewed-on: https://swiftshader-review.googlesource.com/c/25549
Reviewed-by: Chris Forbes <chrisforbes@google.com>
Tested-by: Ben Clayton <bclayton@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
diff --git a/src/Pipeline/SpirvShader.cpp b/src/Pipeline/SpirvShader.cpp
index 96f88f4..c8b57d7 100644
--- a/src/Pipeline/SpirvShader.cpp
+++ b/src/Pipeline/SpirvShader.cpp
@@ -656,6 +656,14 @@
HasComponent = true;
Component = arg;
break;
+ case spv::DecorationDescriptorSet:
+ HasDescriptorSet = true;
+ DescriptorSet = arg;
+ break;
+ case spv::DecorationBinding:
+ HasBinding = true;
+ Binding = arg;
+ break;
case spv::DecorationBuiltIn:
HasBuiltIn = true;
BuiltIn = static_cast<spv::BuiltIn>(arg);
@@ -702,6 +710,18 @@
Component = src.Component;
}
+ if (src.HasDescriptorSet)
+ {
+ HasDescriptorSet = true;
+ DescriptorSet = src.DescriptorSet;
+ }
+
+ if (src.HasBinding)
+ {
+ HasBinding = true;
+ Binding = src.Binding;
+ }
+
Flat |= src.Flat;
NoPerspective |= src.NoPerspective;
Centroid |= src.Centroid;
diff --git a/src/Pipeline/SpirvShader.hpp b/src/Pipeline/SpirvShader.hpp
index 96302d7..3b8d055 100644
--- a/src/Pipeline/SpirvShader.hpp
+++ b/src/Pipeline/SpirvShader.hpp
@@ -271,9 +271,13 @@
{
int32_t Location;
int32_t Component;
+ int32_t DescriptorSet;
+ int32_t Binding;
spv::BuiltIn BuiltIn;
bool HasLocation : 1;
bool HasComponent : 1;
+ bool HasDescriptorSet : 1;
+ bool HasBinding : 1;
bool HasBuiltIn : 1;
bool Flat : 1;
bool Centroid : 1;
@@ -282,10 +286,12 @@
bool BufferBlock : 1;
Decorations()
- : Location{-1}, Component{0}, BuiltIn{}, HasLocation{false}, HasComponent{false}, HasBuiltIn{false},
- Flat{false},
- Centroid{false}, NoPerspective{false}, Block{false},
- BufferBlock{false}
+ : Location{-1}, Component{0}, DescriptorSet{-1}, Binding{-1},
+ BuiltIn{static_cast<spv::BuiltIn>(-1)},
+ HasLocation{false}, HasComponent{false},
+ HasDescriptorSet{false}, HasBinding{false},
+ HasBuiltIn{false}, Flat{false}, Centroid{false},
+ NoPerspective{false}, Block{false}, BufferBlock{false}
{
}