The combinator initialization was only looking at the capabilities
in the shader and not the inferred capabilities. Geometry and tessellation
shaders were not setting the Shader capability which is inferred. So the
combinator set was not initialized correctly causing problems for ADCE.
// Analyzes |module| and records enabled extensions and capabilities.
void Analyze(ir::Module* module);
+ libspirv::CapabilitySet* GetCapabilities() { return &capabilities_; }
+ const libspirv::CapabilitySet* GetCapabilities() const {
+ return &capabilities_;
+ }
+
private:
// Analyzes |module| and records enabled extensions.
void AddExtensions(ir::Module* module);
}
void IRContext::InitializeCombinators() {
- for (auto& capability : module()->capabilities()) {
- AddCombinatorsForCapability(capability.GetSingleWordInOperand(0));
- }
+ get_feature_mgr()->GetCapabilities()->ForEach(
+ [this](SpvCapability cap) { AddCombinatorsForCapability(cap); });
for (auto& extension : module()->ext_inst_imports()) {
AddCombinatorsForExtension(&extension);