浏览代码

Make the Spirv output add the invariant flag if the position was marked as precise (#2)

Signed-off-by: rgba16f <[email protected]>
rgba16f [Amazon] 4 年之前
父节点
当前提交
c630db98ef
共有 1 个文件被更改,包括 8 次插入0 次删除
  1. 8 0
      tools/clang/lib/SPIRV/SpirvBuilder.cpp

+ 8 - 0
tools/clang/lib/SPIRV/SpirvBuilder.cpp

@@ -1001,6 +1001,14 @@ SpirvVariable *SpirvBuilder::addStageBuiltinVar(QualType type,
       loc, var, spv::Decoration::BuiltIn, {static_cast<uint32_t>(builtin)});
       loc, var, spv::Decoration::BuiltIn, {static_cast<uint32_t>(builtin)});
   mod->addDecoration(decor);
   mod->addDecoration(decor);
 
 
+  // If precise is enabled, Position is additionally decorated with Invariant.
+  if (isPrecise && builtin == spv::BuiltIn::Position)
+  {
+    auto *invariantDecor = new (context) SpirvDecoration(
+        loc, var, spv::Decoration::Invariant);
+    mod->addDecoration(invariantDecor);
+  }
+
   // Add variable to cache.
   // Add variable to cache.
   builtinVars.emplace_back(storageClass, builtin, var);
   builtinVars.emplace_back(storageClass, builtin, var);