Explorar el Código

[spirv] Emit warning for $Globals member initializers (#1235)

Lei Zhang hace 7 años
padre
commit
3601a46c3e

+ 6 - 0
tools/clang/lib/SPIRV/DeclResultIdMapper.cpp

@@ -646,6 +646,12 @@ void DeclResultIdMapper::createGlobalsCBuffer(const VarDecl *var) {
   uint32_t index = 0;
   for (const auto *decl : typeTranslator.collectDeclsInDeclContext(context))
     if (const auto *varDecl = dyn_cast<VarDecl>(decl)) {
+      if (const auto *init = varDecl->getInit()) {
+        emitWarning(
+            "variable '%0' will be placed in $Globals so initializer ignored",
+            init->getExprLoc())
+            << var->getName() << init->getSourceRange();
+      }
       if (const auto *attr = varDecl->getAttr<VKBindingAttr>()) {
         emitError("variable '%0' will be placed in $Globals so cannot have "
                   "vk::binding attribute",

+ 1 - 1
tools/clang/lib/SPIRV/SPIRVEmitter.cpp

@@ -1192,7 +1192,7 @@ void SPIRVEmitter::doHLSLBufferDecl(const HLSLBufferDecl *bufferDecl) {
     if (const auto *varMember = dyn_cast<VarDecl>(member)) {
       if (const auto *init = varMember->getInit())
         emitWarning("%select{tbuffer|cbuffer}0 member initializer "
-                    "ignored since no equivalent in Vulkan",
+                    "ignored since no Vulkan equivalent",
                     init->getExprLoc())
             << bufferDecl->isCBuffer() << init->getSourceRange();
 

+ 2 - 1
tools/clang/test/CodeGenSPIRV/var.globals.error.hlsl

@@ -1,7 +1,8 @@
 // Run: %dxc -T vs_6_0 -E main
 
-[[vk::binding(10, 2)]] float4 gVec;
+[[vk::binding(10, 2)]] float4 gVec = 1.0;
 
 float4 main() : A { return gVec; }
 
+// CHECK: :3:38: warning: variable 'gVec' will be placed in $Globals so initializer ignored
 // CHECK: :3:3: error: variable 'gVec' will be placed in $Globals so cannot have vk::binding attribute

+ 2 - 2
tools/clang/test/CodeGenSPIRV/var.init.cbuffer.hlsl

@@ -9,5 +9,5 @@ float main() : A {
     return 1.0;
 }
 
-// CHECK: :4:15: warning: cbuffer member initializer ignored since no equivalent in Vulkan
-// CHECK: :5:16: warning: cbuffer member initializer ignored since no equivalent in Vulkan
+// CHECK: :4:15: warning: cbuffer member initializer ignored since no Vulkan equivalent
+// CHECK: :5:16: warning: cbuffer member initializer ignored since no Vulkan equivalent

+ 2 - 3
tools/clang/test/CodeGenSPIRV/var.init.tbuffer.hlsl

@@ -9,6 +9,5 @@ float main() : A {
     return 1.0;
 }
 
-// CHECK: :4:15: warning: tbuffer member initializer ignored since no equivalent in Vulkan
-// CHECK: :5:16: warning: tbuffer member initializer ignored since no equivalent in Vulkan
-
+// CHECK: :4:15: warning: tbuffer member initializer ignored since no Vulkan equivalent
+// CHECK: :5:16: warning: tbuffer member initializer ignored since no Vulkan equivalent