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
bool robustBufferAccess)
: insns{insns}, inputs{MAX_INTERFACE_COMPONENTS},
outputs{MAX_INTERFACE_COMPONENTS},
codeSerialID(codeSerialID), modes{},
codeSerialID(codeSerialID),
robustBufferAccess(robustBufferAccess)
{
ASSERT(insns.size() > 0);
......@@ -800,20 +800,18 @@ namespace sw
auto capability = static_cast<spv::Capability>(insn.word(1));
switch (capability)
{
case spv::CapabilityMatrix:
case spv::CapabilityShader:
case spv::CapabilityInputAttachment:
case spv::CapabilitySampled1D:
case spv::CapabilityImage1D:
case spv::CapabilitySampledBuffer:
case spv::CapabilityImageBuffer:
case spv::CapabilityImageQuery:
case spv::CapabilityDerivativeControl:
case spv::CapabilityMultiView:
case spv::CapabilityDeviceGroup:
case spv::CapabilityGroupNonUniform:
break;
case spv::CapabilityMatrix: capabilities.Matrix = true; break;
case spv::CapabilityShader: capabilities.Shader = true; break;
case spv::CapabilityInputAttachment: capabilities.InputAttachment = true; break;
case spv::CapabilitySampled1D: capabilities.Sampled1D = true; break;
case spv::CapabilityImage1D: capabilities.Image1D = true; break;
case spv::CapabilitySampledBuffer: capabilities.SampledBuffer = true; break;
case spv::CapabilityImageBuffer: capabilities.ImageBuffer = true; break;
case spv::CapabilityImageQuery: capabilities.ImageQuery = true; break;
case spv::CapabilityDerivativeControl: capabilities.DerivativeControl = true; break;
case spv::CapabilityGroupNonUniform: capabilities.GroupNonUniform = true; break;
case spv::CapabilityMultiView: capabilities.MultiView = true; break;
case spv::CapabilityDeviceGroup: capabilities.DeviceGroup = true; break;
default:
UNSUPPORTED("Unsupported capability %u", insn.word(1));
}
......
......@@ -723,6 +723,27 @@ namespace sw
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
{
ATTRIBTYPE_FLOAT,
......@@ -873,7 +894,8 @@ namespace sw
private:
const uint32_t codeSerialID;
Modes modes;
Modes modes = {};
Capabilities capabilities = {};
HandleMap<Type> types;
HandleMap<Object> defs;
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