diff --git a/util/test/demos/d3d12/d3d12_descriptor_indexing.cpp b/util/test/demos/d3d12/d3d12_descriptor_indexing.cpp index be4967a9c..55064e738 100644 --- a/util/test/demos/d3d12/d3d12_descriptor_indexing.cpp +++ b/util/test/demos/d3d12/d3d12_descriptor_indexing.cpp @@ -137,24 +137,25 @@ float4 main(v2f IN) : SV_Target0 if(t.tex == 0) { - ret *= texArray1[t.binding].SampleLevel(sArray1[t.binding], uv.xy, 0); - ret *= texArray1[t.binding+1].SampleLevel(sArray1[t.binding+1], uv.xy, 0); - ret *= texArray1[t.binding+2].SampleLevel(sArray1[t.binding+2], uv.xy, 0); + ret += texArray1[t.binding].SampleLevel(sArray1[t.binding], uv.xy, 0); + ret += texArray1[t.binding+1].SampleLevel(sArray1[t.binding+1], uv.xy, 0); + ret += texArray1[t.binding+2].SampleLevel(sArray1[t.binding+2], uv.xy, 0); } else if(t.tex == 1) { - ret *= texArray2[t.binding].SampleLevel(s, uv.xy, 0); - ret *= texArray2[t.binding+10].SampleLevel(s, uv.xy, 0); - ret *= texArray2[20].SampleLevel(s, uv.xy, 0); + ret += texArray2[t.binding].SampleLevel(s, uv.xy, 0); + ret += texArray2[t.binding+10].SampleLevel(s, uv.xy, 0); + ret += texArray2[20].SampleLevel(s, uv.xy, 0); } else if(t.tex == 2) { - ret *= texArray3[t.binding].SampleLevel(s, uv.xy, 0); + ret += texArray3[t.binding].SampleLevel(s, uv.xy, 0); } uv *= 1.8f; } + ret /= 100.0f; return ret; } } @@ -198,6 +199,9 @@ struct alias2 float4 main(v2f IN) : SV_Target0 { StructuredBuffer buf = ResourceDescriptorHeap[8]; + int ZERO = floor(IN.uv.x/(IN.uv.x+1.0e-6f)); + int ONE = ZERO + 1; + if(IN.uv.y < 0.1f) { SamplerState s = SamplerDescriptorHeap[0]; @@ -222,9 +226,9 @@ float4 main(v2f IN) : SV_Target0 Texture2D tex1 = ResourceDescriptorHeap[t.binding]; Texture2D tex2 = ResourceDescriptorHeap[t.binding+1]; Texture2D tex3 = ResourceDescriptorHeap[t.binding+2]; - ret *= tex1.SampleLevel(s1, uv.xy, 0); - ret *= tex2.SampleLevel(s2, uv.xy, 0); - ret *= tex3.SampleLevel(s3, uv.xy, 0); + ret += tex1.SampleLevel(s1, uv.xy, 0); + ret += tex2.SampleLevel(s2, uv.xy, 0); + ret += tex3.SampleLevel(s3, uv.xy, 0); RWStructuredBuffer uav = ResourceDescriptorHeap[10]; uav[0] = t.binding; } @@ -235,32 +239,33 @@ float4 main(v2f IN) : SV_Target0 SamplerState s3 = SamplerDescriptorHeap[21]; Texture2D tex1 = ResourceDescriptorHeap[40+t.binding]; Texture2D tex2 = ResourceDescriptorHeap[40+t.binding+10]; - ConstantBuffer cbv = ResourceDescriptorHeap[9]; + ConstantBuffer cbv = ResourceDescriptorHeap[ONE*9]; Texture2D tex3 = ResourceDescriptorHeap[cbv.tex_idx]; - ret *= tex1.SampleLevel(s1, uv.xy, 0); - ret *= tex2.SampleLevel(s2, uv.xy, 0); - ret *= tex3.SampleLevel(s3, uv.xy, 0); + ret += tex1.SampleLevel(s1, uv.xy, 0); + ret += tex2.SampleLevel(s2, uv.xy, 0); + ret += tex3.SampleLevel(s3, uv.xy, 0); } else if(t.tex == 2) { SamplerState s = SamplerDescriptorHeap[25]; Texture2D tex = ResourceDescriptorHeap[80+t.binding]; - ret *= tex.SampleLevel(s, uv.xy, 0); + ret += tex.SampleLevel(s, uv.xy, 0); } else if(t.tex == 3) { StructuredBuffer alias1buf = ResourceDescriptorHeap[150+t.binding]; - ret *= alias1buf[0].Color; + ret += alias1buf[0].Color; } else if(t.tex == 4) { StructuredBuffer alias2buf = ResourceDescriptorHeap[150+t.binding]; - ret *= alias2buf[0].Color; + ret += alias2buf[0].Color; } uv *= 1.8f; } + ret /= 100.0f; return ret; } } @@ -490,6 +495,8 @@ float4 main(v2f IN) : SV_Target0 MakeSRV(smiley).CreateGPU(60); MakeSRV(smiley).CreateGPU(99); MakeSRV(smiley).CreateGPU(103); + // index 6 is the resource index from constBuf + MakeSRV(smiley).CreateGPU(6); MakeCBV(constBuf).SizeBytes(256).CreateGPU(9); if(namer) namer->SetName(9, "constBuf"); diff --git a/util/test/tests/D3D12/D3D12_Descriptor_Indexing.py b/util/test/tests/D3D12/D3D12_Descriptor_Indexing.py index 8935a967f..6590070bc 100644 --- a/util/test/tests/D3D12/D3D12_Descriptor_Indexing.py +++ b/util/test/tests/D3D12/D3D12_Descriptor_Indexing.py @@ -153,6 +153,11 @@ class D3D12_Descriptor_Indexing(rdtest.TestCase): rdtest.log.success("Dynamic usage is as expected for {}".format(sm)) + v = pipe.GetViewport(0) + x = int(v.x) + int(v.width / 2) + y = int(v.y) + int(v.height // 2) + self.check_debug_pixel(x, y) + for sm in ["sm_6_6_heap"]: base = self.find_action("Tests " + sm) if base == None: @@ -239,3 +244,7 @@ class D3D12_Descriptor_Indexing(rdtest.TestCase): loc.logicalBindName, a.access.byteOffset)) rdtest.log.success("Dynamic usage is as expected for {}".format(sm)) + v = pipe.GetViewport(0) + x = int(v.x) + int(v.width / 2) + y = int(v.y) + int(v.height // 2) + self.check_debug_pixel(x, y)