ADCE: Fix combinator initialization
authorGregF <greg@LunarG.com>
Fri, 2 Feb 2018 23:57:39 +0000 (16:57 -0700)
committerDavid Neto <dneto@google.com>
Mon, 5 Feb 2018 21:54:03 +0000 (16:54 -0500)
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.

source/opt/feature_manager.h
source/opt/ir_context.cpp

index 615234f..9c2a05c 100644 (file)
@@ -41,6 +41,11 @@ class FeatureManager {
   // 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);
index 9285e3f..ce6ac0b 100644 (file)
@@ -474,9 +474,8 @@ void IRContext::AddCombinatorsForExtension(ir::Instruction* extension) {
 }
 
 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);