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

Fix typo in TranslateCBAddressUserLegacy. (#128)

Xiang Li 8 жил өмнө
parent
commit
b63197d2e3

+ 2 - 1
lib/HLSL/HLOperationLower.cpp

@@ -4715,7 +4715,7 @@ void TranslateCBAddressUserLegacy(Instruction *user, Value *handle,
       _Analysis_assume_(resultSize <= 16);
       Value *idxList[16];
       bool colMajor = subOp == HLSubscriptOpcode::ColMatSubscript ||
-          subOp == HLSubscriptOpcode::RowMatElement;
+          subOp == HLSubscriptOpcode::ColMatElement;
       bool dynamicIndexing = !isa<ConstantInt>(idx) &&
                              !isa<ConstantAggregateZero>(idx) &&
                              !isa<ConstantDataSequential>(idx);
@@ -4740,6 +4740,7 @@ void TranslateCBAddressUserLegacy(Instruction *user, Value *handle,
                   dyn_cast<ConstantDataSequential>(idx)) {
             unsigned count = elts->getNumElements();
             DXASSERT(count <= 16, "up to 4x4 elements in vector or matrix");
+
             for (unsigned i = 0; i < count; i += 2) {
               unsigned rowIdx = elts->getElementAsInteger(i);
               unsigned colIdx = elts->getElementAsInteger(i + 1);

+ 19 - 0
tools/clang/test/CodeGenHLSL/matElt.hlsl

@@ -0,0 +1,19 @@
+// RUN: %dxc -E main -T cs_6_0 -Zi -Od %s | FileCheck %s
+
+
+// CHECK: @dx.op.cbufferLoadLegacy.f32(i32 59
+// CHECK: 3
+// CHECK: extractvalue
+// CHECK: 2
+// CHECK: extractvalue
+// CHECK: 3
+
+RWStructuredBuffer<float> o;
+
+float4x4 m;
+
+[numthreads(8,8,1)]
+void main( uint2 tid : SV_DispatchThreadID, uint2 gid : SV_GroupID, uint2 gtid : SV_GroupThreadID, uint gidx : SV_GroupIndex )
+{
+o[gid.x] = m._34 + m._44;
+}

+ 5 - 0
tools/clang/unittests/HLSL/CompilerTest.cpp

@@ -401,6 +401,7 @@ public:
   TEST_METHOD(CodeGenLoop3)
   TEST_METHOD(CodeGenLoop4)
   TEST_METHOD(CodeGenLoop5)
+  TEST_METHOD(CodeGenMatElt)
   TEST_METHOD(CodeGenMatInit)
   TEST_METHOD(CodeGenMatMulMat)
   TEST_METHOD(CodeGenMatOps)
@@ -2291,6 +2292,10 @@ TEST_F(CompilerTest, CodeGenLoop5) {
   CodeGenTest(L"..\\CodeGenHLSL\\loop5.hlsl");
 }
 
+TEST_F(CompilerTest, CodeGenMatElt) {
+  CodeGenTestCheck(L"..\\CodeGenHLSL\\matElt.hlsl");
+}
+
 TEST_F(CompilerTest, CodeGenMatInit) {
   CodeGenTest(L"..\\CodeGenHLSL\\matInit.hlsl");
 }