Commit 78f443f6 by Ben Clayton

SpirvShader: Expose shader capabilities.

Some capabilities affect downstream behaviour in unexpected ways. For example: https://github.com/KhronosGroup/glslang/issues/1868 Bug: b/139207336 Change-Id: I43b4f1ab3558864bb6cb93c0cbf780d0dd2e3406 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35029Reviewed-by: 's avatarChris Forbes <chrisforbes@google.com> Tested-by: 's avatarBen Clayton <bclayton@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
parent 5e4e8b0a
...@@ -486,7 +486,7 @@ namespace sw ...@@ -486,7 +486,7 @@ namespace sw
bool robustBufferAccess) bool robustBufferAccess)
: insns{insns}, inputs{MAX_INTERFACE_COMPONENTS}, : insns{insns}, inputs{MAX_INTERFACE_COMPONENTS},
outputs{MAX_INTERFACE_COMPONENTS}, outputs{MAX_INTERFACE_COMPONENTS},
codeSerialID(codeSerialID), modes{}, codeSerialID(codeSerialID),
robustBufferAccess(robustBufferAccess) robustBufferAccess(robustBufferAccess)
{ {
ASSERT(insns.size() > 0); ASSERT(insns.size() > 0);
...@@ -800,20 +800,18 @@ namespace sw ...@@ -800,20 +800,18 @@ namespace sw
auto capability = static_cast<spv::Capability>(insn.word(1)); auto capability = static_cast<spv::Capability>(insn.word(1));
switch (capability) switch (capability)
{ {
case spv::CapabilityMatrix: case spv::CapabilityMatrix: capabilities.Matrix = true; break;
case spv::CapabilityShader: case spv::CapabilityShader: capabilities.Shader = true; break;
case spv::CapabilityInputAttachment: case spv::CapabilityInputAttachment: capabilities.InputAttachment = true; break;
case spv::CapabilitySampled1D: case spv::CapabilitySampled1D: capabilities.Sampled1D = true; break;
case spv::CapabilityImage1D: case spv::CapabilityImage1D: capabilities.Image1D = true; break;
case spv::CapabilitySampledBuffer: case spv::CapabilitySampledBuffer: capabilities.SampledBuffer = true; break;
case spv::CapabilityImageBuffer: case spv::CapabilityImageBuffer: capabilities.ImageBuffer = true; break;
case spv::CapabilityImageQuery: case spv::CapabilityImageQuery: capabilities.ImageQuery = true; break;
case spv::CapabilityDerivativeControl: case spv::CapabilityDerivativeControl: capabilities.DerivativeControl = true; break;
case spv::CapabilityMultiView: case spv::CapabilityGroupNonUniform: capabilities.GroupNonUniform = true; break;
case spv::CapabilityDeviceGroup: case spv::CapabilityMultiView: capabilities.MultiView = true; break;
case spv::CapabilityGroupNonUniform: case spv::CapabilityDeviceGroup: capabilities.DeviceGroup = true; break;
break;
default: default:
UNSUPPORTED("Unsupported capability %u", insn.word(1)); UNSUPPORTED("Unsupported capability %u", insn.word(1));
} }
......
...@@ -723,6 +723,27 @@ namespace sw ...@@ -723,6 +723,27 @@ namespace sw
return modes; return modes;
} }
struct Capabilities
{
bool Matrix : 1;
bool Shader : 1;
bool InputAttachment : 1;
bool Sampled1D : 1;
bool Image1D : 1;
bool SampledBuffer : 1;
bool ImageBuffer : 1;
bool ImageQuery : 1;
bool DerivativeControl : 1;
bool GroupNonUniform : 1;
bool MultiView : 1;
bool DeviceGroup : 1;
};
Capabilities const &getUsedCapabilities() const
{
return capabilities;
}
enum AttribType : unsigned char enum AttribType : unsigned char
{ {
ATTRIBTYPE_FLOAT, ATTRIBTYPE_FLOAT,
...@@ -873,7 +894,8 @@ namespace sw ...@@ -873,7 +894,8 @@ namespace sw
private: private:
const uint32_t codeSerialID; const uint32_t codeSerialID;
Modes modes; Modes modes = {};
Capabilities capabilities = {};
HandleMap<Type> types; HandleMap<Type> types;
HandleMap<Object> defs; HandleMap<Object> defs;
HandleMap<Function> functions; HandleMap<Function> functions;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment