Browse Source

Keep rowIdx for array of gs input. (#72)

Xiang Li 8 years ago
parent
commit
4fcc616d9b

+ 0 - 1
lib/HLSL/DxilGenerationPass.cpp

@@ -1269,7 +1269,6 @@ void DxilGenerationPass::GenerateDxilInputsOutputs(bool bInput) {
       Value *vertexID = undefVertexIdx;
       if (bNeedVertexID && isArrayTy) {
         vertexID = info.vertexID;
-        idxVal = constZero;
       }
 
       if (LoadInst *ldInst = dyn_cast<LoadInst>(info.user)) {

+ 26 - 0
tools/clang/test/CodeGenHLSL/SimpleGS12.hlsl

@@ -0,0 +1,26 @@
+// RUN: %dxc -E main -T gs_6_0 %s | FileCheck %s
+
+// Make sure the rowIdx is not immediate.
+// CHECK: @dx.op.loadInput.f32(i32 4, i32 0, i32 %
+
+struct VSOut {
+  float4 uv[2] : TEXCOORD0;
+  float4 pos : SV_Position;
+};
+
+struct GSOut {
+  float4 pos : SV_Position;
+};
+
+uint i;
+uint j;
+
+// geometry shader that outputs 3 vertices from a point
+[maxvertexcount(3)]
+[instance(24)]
+void main(triangle VSOut points[3], triangle VSOut points2[3] : Overwrite2, inout PointStream<GSOut> stream) {
+  GSOut o;
+  o.pos = points[j].uv[i] + points2[j].uv[i];
+  stream.Append(o);
+  stream.RestartStrip();
+}

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

@@ -474,6 +474,7 @@ public:
   TEST_METHOD(CodeGenSimpleGS6)
   TEST_METHOD(CodeGenSimpleGS7)
   TEST_METHOD(CodeGenSimpleGS11)
+  TEST_METHOD(CodeGenSimpleGS12)
   TEST_METHOD(CodeGenSimpleHS1)
   TEST_METHOD(CodeGenSimpleHS2)
   TEST_METHOD(CodeGenSimpleHS3)
@@ -2537,6 +2538,10 @@ TEST_F(CompilerTest, CodeGenSimpleGS11) {
   CodeGenTestCheck(L"..\\CodeGenHLSL\\SimpleGS11.hlsl");
 }
 
+TEST_F(CompilerTest, CodeGenSimpleGS12) {
+	CodeGenTestCheck(L"..\\CodeGenHLSL\\SimpleGS12.hlsl");
+}
+
 TEST_F(CompilerTest, CodeGenSimpleHS1) {
   CodeGenTestCheck(L"..\\CodeGenHLSL\\SimpleHS1.hlsl");
 }