2
0
Эх сурвалжийг харах

Fix assert when use glc resource as call arg. (#3459)

* Fix assert when use glc resource as call arg.
Xiang Li 4 жил өмнө
parent
commit
53ff86a118

+ 3 - 0
tools/clang/lib/CodeGen/CGHLSLMS.cpp

@@ -2383,6 +2383,9 @@ void CGMSHLSLRuntime::MarkRetTemp(CodeGenFunction &CGF, Value *V,
 void CGMSHLSLRuntime::MarkCallArgumentTemp(CodeGenFunction &CGF, llvm::Value *V,
 void CGMSHLSLRuntime::MarkCallArgumentTemp(CodeGenFunction &CGF, llvm::Value *V,
                                            clang::QualType QualTy) {
                                            clang::QualType QualTy) {
   // Save object properties for call arg temp.
   // Save object properties for call arg temp.
+  // Ignore V already in property map.
+  if (objectProperties.GetResource(V).isValid())
+    return;
   AddValToPropertyMap(V, QualTy);
   AddValToPropertyMap(V, QualTy);
 }
 }
 
 

+ 15 - 0
tools/clang/test/HLSLFileCheck/hlsl/types/modifiers/globallycoherent/globallycoherent_for_arg.hlsl

@@ -0,0 +1,15 @@
+// RUN: %dxc -E main -T ps_6_0 %s | FileCheck %s
+
+// Make sure not crash.
+// CHECK:call %dx.types.ResRet.f32 @dx.op.bufferLoad.f32
+
+globallycoherent RWBuffer<float> u;
+
+float read(RWBuffer<float> buf) {
+  return buf[0];
+}
+
+float main() : SV_Target {
+
+  return read(u);
+}