浏览代码

[spirv] Fixed bug of missing breaks in switch.

Ehsan 6 年之前
父节点
当前提交
0e827c7ba8

+ 3 - 4
tools/clang/include/clang/SPIRV/SpirvBuilder.h

@@ -318,10 +318,9 @@ public:
   /// The given 'lod' is used as the Lod argument in the case of
   /// OpImageQuerySizeLod, and it is used as the 'coordinate' parameter in the
   /// case of OpImageQueryLod.
-  SpirvImageQuery *
-  SpirvBuilder::createImageQuery(spv::Op opcode, QualType resultType,
-                                 SourceLocation loc, SpirvInstruction *image,
-                                 SpirvInstruction *lod = nullptr);
+  SpirvImageQuery *createImageQuery(spv::Op opcode, QualType resultType,
+                                    SourceLocation loc, SpirvInstruction *image,
+                                    SpirvInstruction *lod = nullptr);
 
   /// \brief Creates a select operation with the given values for true and false
   /// cases and returns the instruction pointer.

+ 7 - 0
tools/clang/lib/SPIRV/CapabilityVisitor.cpp

@@ -395,10 +395,12 @@ bool CapabilityVisitor::visitInstruction(SpirvInstruction *instr) {
     break;
   case spv::Op::OpGroupNonUniformElect:
     spvBuilder.requireCapability(spv::Capability::GroupNonUniform);
+    break;
   case spv::Op::OpGroupNonUniformAny:
   case spv::Op::OpGroupNonUniformAll:
   case spv::Op::OpGroupNonUniformAllEqual:
     spvBuilder.requireCapability(spv::Capability::GroupNonUniformVote);
+    break;
   case spv::Op::OpGroupNonUniformBallot:
   case spv::Op::OpGroupNonUniformInverseBallot:
   case spv::Op::OpGroupNonUniformBallotBitExtract:
@@ -408,6 +410,7 @@ bool CapabilityVisitor::visitInstruction(SpirvInstruction *instr) {
   case spv::Op::OpGroupNonUniformBroadcast:
   case spv::Op::OpGroupNonUniformBroadcastFirst:
     spvBuilder.requireCapability(spv::Capability::GroupNonUniformBallot);
+    break;
   case spv::Op::OpGroupNonUniformIAdd:
   case spv::Op::OpGroupNonUniformFAdd:
   case spv::Op::OpGroupNonUniformIMul:
@@ -425,9 +428,13 @@ bool CapabilityVisitor::visitInstruction(SpirvInstruction *instr) {
   case spv::Op::OpGroupNonUniformLogicalOr:
   case spv::Op::OpGroupNonUniformLogicalXor:
     spvBuilder.requireCapability(spv::Capability::GroupNonUniformArithmetic);
+    break;
   case spv::Op::OpGroupNonUniformQuadBroadcast:
   case spv::Op::OpGroupNonUniformQuadSwap:
     spvBuilder.requireCapability(spv::Capability::GroupNonUniformQuad);
+    break;
+  default:
+    break;
   }
 
   return true;

+ 1 - 3
tools/clang/lib/SPIRV/CapabilityVisitor.h

@@ -23,8 +23,7 @@ class CapabilityVisitor : public Visitor {
 public:
   CapabilityVisitor(SpirvContext &spvCtx, const SpirvCodeGenOptions &opts,
                     SpirvBuilder &builder)
-      : Visitor(opts, spvCtx), spvContext(spvCtx), spvBuilder(builder) {}
-
+      : Visitor(opts, spvCtx), spvBuilder(builder) {}
 
   bool visit(SpirvDecoration *decor);
   bool visit(SpirvEntryPoint *);
@@ -53,7 +52,6 @@ private:
   spv::Capability getNonUniformCapability(const SpirvType *);
 
 private:
-  SpirvContext &spvContext;        /// SPIR-V context
   SpirvBuilder &spvBuilder;        /// SPIR-V builder
   spv::ExecutionModel shaderModel; /// Execution model
 };