@@ -88,7 +88,7 @@ float4 main() : SV_Target0
8888 std::string pixel_resArray = R"EOSHADER(
8989
9090Texture2DArray<float> resArray[4] : register(t10, space1);
91- SamplerState samplerArray[4 ] : register(s10, space1);
91+ SamplerState samplerArray[8 ] : register(s10, space1);
9292
9393cbuffer consts : register(b3)
9494{
@@ -336,7 +336,7 @@ float4 main(float4 pos : SV_Position) : SV_Target0
336336 ID3D12RootSignaturePtr sig_resArray = MakeSig ({
337337 cbvParam (D3D12_SHADER_VISIBILITY_PIXEL, 0 , 3 ),
338338 tableParam (D3D12_SHADER_VISIBILITY_PIXEL, D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 1 , 10 , 4 , 30 ),
339- tableParam (D3D12_SHADER_VISIBILITY_PIXEL, D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER, 1 , 10 , 4 , 30 ),
339+ tableParam (D3D12_SHADER_VISIBILITY_PIXEL, D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER, 1 , 10 , 8 , 30 ),
340340 });
341341 ID3D12RootSignaturePtr sig_bindless = MakeSig ({
342342 cbvParam (D3D12_SHADER_VISIBILITY_PIXEL, 0 , 3 ),
@@ -355,6 +355,15 @@ float4 main(float4 pos : SV_Position) : SV_Target0
355355 tableParam (D3D12_SHADER_VISIBILITY_PIXEL, D3D12_DESCRIPTOR_RANGE_TYPE_CBV, 1 , 0 , 8 , 0 ),
356356 });
357357
358+ D3D12_SAMPLER_DESC samplerDesc = {};
359+ samplerDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR;
360+ samplerDesc.AddressU = samplerDesc.AddressV = samplerDesc.AddressW =
361+ D3D12_TEXTURE_ADDRESS_MODE_WRAP;
362+ UINT increment = dev->GetDescriptorHandleIncrementSize (D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER);
363+ D3D12_CPU_DESCRIPTOR_HANDLE samplerStart = m_Sampler->GetCPUDescriptorHandleForHeapStart ();
364+ for (int i = 0 ; i < 128 ; ++i)
365+ dev->CreateSampler (&samplerDesc, {samplerStart.ptr + increment * i});
366+
358367 ID3D12PipelineStatePtr pso_5_0 = MakePSO ()
359368 .RootSig (sig_5_0)
360369 .InputLayout ()
@@ -489,6 +498,7 @@ float4 main(float4 pos : SV_Position) : SV_Target0
489498 .RTV ()
490499 .InitialState (D3D12_RESOURCE_STATE_RENDER_TARGET);
491500
501+ ID3D12DescriptorHeap *heaps[] = {m_CBVUAVSRV.GetInterfacePtr (), m_Sampler.GetInterfacePtr ()};
492502 while (Running ())
493503 {
494504 ID3D12GraphicsCommandListPtr cmd = GetCommandBuffer ();
@@ -512,7 +522,7 @@ float4 main(float4 pos : SV_Position) : SV_Target0
512522 IASetVertexBuffer (cmd, vb, sizeof (DefaultA2V), 0 );
513523 cmd->SetPipelineState (pso_5_0);
514524 cmd->SetGraphicsRootSignature (sig_5_0);
515- cmd->SetDescriptorHeaps (1 , &m_CBVUAVSRV. GetInterfacePtr () );
525+ cmd->SetDescriptorHeaps (2 , heaps );
516526 cmd->SetGraphicsRootConstantBufferView (0 , cb->GetGPUVirtualAddress ());
517527 cmd->SetGraphicsRootDescriptorTable (1 , m_CBVUAVSRV->GetGPUDescriptorHandleForHeapStart ());
518528 cmd->SetGraphicsRootDescriptorTable (2 , m_CBVUAVSRV->GetGPUDescriptorHandleForHeapStart ());
@@ -525,33 +535,36 @@ float4 main(float4 pos : SV_Position) : SV_Target0
525535 setMarker (cmd, " sm_5_1" );
526536 cmd->SetPipelineState (pso_5_1);
527537 cmd->SetGraphicsRootSignature (sig_5_1);
528- cmd->SetDescriptorHeaps (1 , &m_CBVUAVSRV. GetInterfacePtr () );
538+ cmd->SetDescriptorHeaps (2 , heaps );
529539 cmd->SetGraphicsRootConstantBufferView (0 , cb->GetGPUVirtualAddress ());
530540 cmd->SetGraphicsRootDescriptorTable (1 , m_CBVUAVSRV->GetGPUDescriptorHandleForHeapStart ());
531541 cmd->SetGraphicsRootDescriptorTable (2 , m_CBVUAVSRV->GetGPUDescriptorHandleForHeapStart ());
532542 cmd->SetGraphicsRootDescriptorTable (3 , m_CBVUAVSRV->GetGPUDescriptorHandleForHeapStart ());
543+ cmd->SetGraphicsRootDescriptorTable (4 , m_Sampler->GetGPUDescriptorHandleForHeapStart ());
533544 cmd->DrawInstanced (3 , 1 , 0 , 0 );
534545
535546 setMarker (cmd, " ResArray" );
536547 cmd->SetPipelineState (pso_resArray);
537548 cmd->SetGraphicsRootSignature (sig_resArray);
538- cmd->SetDescriptorHeaps (1 , &m_CBVUAVSRV. GetInterfacePtr () );
549+ cmd->SetDescriptorHeaps (2 , heaps );
539550 cmd->SetGraphicsRootConstantBufferView (0 , cb->GetGPUVirtualAddress ());
540551 cmd->SetGraphicsRootDescriptorTable (1 , m_CBVUAVSRV->GetGPUDescriptorHandleForHeapStart ());
552+ cmd->SetGraphicsRootDescriptorTable (2 , m_Sampler->GetGPUDescriptorHandleForHeapStart ());
541553 cmd->DrawInstanced (3 , 1 , 0 , 0 );
542554
543555 setMarker (cmd, " Bindless" );
544556 cmd->SetPipelineState (pso_bindless);
545557 cmd->SetGraphicsRootSignature (sig_bindless);
546- cmd->SetDescriptorHeaps (1 , &m_CBVUAVSRV. GetInterfacePtr () );
558+ cmd->SetDescriptorHeaps (2 , heaps );
547559 cmd->SetGraphicsRootConstantBufferView (0 , cb->GetGPUVirtualAddress ());
548560 cmd->SetGraphicsRootDescriptorTable (1 , m_CBVUAVSRV->GetGPUDescriptorHandleForHeapStart ());
561+ cmd->SetGraphicsRootDescriptorTable (2 , m_Sampler->GetGPUDescriptorHandleForHeapStart ());
549562 cmd->DrawInstanced (3 , 1 , 0 , 0 );
550563
551564 setMarker (cmd, " ResourceAccess" );
552565 cmd->SetPipelineState (pso_resourceAccess);
553566 cmd->SetGraphicsRootSignature (sig_resourceAccess);
554- cmd->SetDescriptorHeaps (1 , &m_CBVUAVSRV. GetInterfacePtr () );
567+ cmd->SetDescriptorHeaps (2 , heaps );
555568 cmd->SetGraphicsRootDescriptorTable (0 , m_CBVUAVSRV->GetGPUDescriptorHandleForHeapStart ());
556569 cmd->SetGraphicsRootDescriptorTable (1 , m_CBVUAVSRV->GetGPUDescriptorHandleForHeapStart ());
557570 cmd->SetGraphicsRootDescriptorTable (2 , m_CBVUAVSRV->GetGPUDescriptorHandleForHeapStart ());
@@ -570,7 +583,7 @@ float4 main(float4 pos : SV_Position) : SV_Target0
570583 IASetVertexBuffer (cmd, vb, sizeof (DefaultA2V), 0 );
571584 cmd->SetPipelineState (pso_6_0);
572585 cmd->SetGraphicsRootSignature (sig_5_0);
573- cmd->SetDescriptorHeaps (1 , &m_CBVUAVSRV. GetInterfacePtr () );
586+ cmd->SetDescriptorHeaps (2 , heaps );
574587 cmd->SetGraphicsRootConstantBufferView (0 , cb->GetGPUVirtualAddress ());
575588 cmd->SetGraphicsRootDescriptorTable (1 , m_CBVUAVSRV->GetGPUDescriptorHandleForHeapStart ());
576589 cmd->SetGraphicsRootDescriptorTable (2 , m_CBVUAVSRV->GetGPUDescriptorHandleForHeapStart ());
@@ -583,33 +596,36 @@ float4 main(float4 pos : SV_Position) : SV_Target0
583596 setMarker (cmd, " SM6.0 Table" );
584597 cmd->SetPipelineState (pso2_6_0);
585598 cmd->SetGraphicsRootSignature (sig_5_1);
586- cmd->SetDescriptorHeaps (1 , &m_CBVUAVSRV. GetInterfacePtr () );
599+ cmd->SetDescriptorHeaps (2 , heaps );
587600 cmd->SetGraphicsRootConstantBufferView (0 , cb->GetGPUVirtualAddress ());
588601 cmd->SetGraphicsRootDescriptorTable (1 , m_CBVUAVSRV->GetGPUDescriptorHandleForHeapStart ());
589602 cmd->SetGraphicsRootDescriptorTable (2 , m_CBVUAVSRV->GetGPUDescriptorHandleForHeapStart ());
590603 cmd->SetGraphicsRootDescriptorTable (3 , m_CBVUAVSRV->GetGPUDescriptorHandleForHeapStart ());
604+ cmd->SetGraphicsRootDescriptorTable (4 , m_Sampler->GetGPUDescriptorHandleForHeapStart ());
591605 cmd->DrawInstanced (3 , 1 , 0 , 0 );
592606
593607 setMarker (cmd, " SM6.0 ResArray" );
594608 cmd->SetPipelineState (pso_6_0_resArray);
595609 cmd->SetGraphicsRootSignature (sig_resArray);
596- cmd->SetDescriptorHeaps (1 , &m_CBVUAVSRV. GetInterfacePtr () );
610+ cmd->SetDescriptorHeaps (2 , heaps );
597611 cmd->SetGraphicsRootConstantBufferView (0 , cb->GetGPUVirtualAddress ());
598612 cmd->SetGraphicsRootDescriptorTable (1 , m_CBVUAVSRV->GetGPUDescriptorHandleForHeapStart ());
613+ cmd->SetGraphicsRootDescriptorTable (2 , m_Sampler->GetGPUDescriptorHandleForHeapStart ());
599614 cmd->DrawInstanced (3 , 1 , 0 , 0 );
600615
601616 setMarker (cmd, " SM6.0 Bindless" );
602617 cmd->SetPipelineState (pso_6_0_bindless);
603618 cmd->SetGraphicsRootSignature (sig_bindless);
604- cmd->SetDescriptorHeaps (1 , &m_CBVUAVSRV. GetInterfacePtr () );
619+ cmd->SetDescriptorHeaps (2 , heaps );
605620 cmd->SetGraphicsRootConstantBufferView (0 , cb->GetGPUVirtualAddress ());
606621 cmd->SetGraphicsRootDescriptorTable (1 , m_CBVUAVSRV->GetGPUDescriptorHandleForHeapStart ());
622+ cmd->SetGraphicsRootDescriptorTable (2 , m_Sampler->GetGPUDescriptorHandleForHeapStart ());
607623 cmd->DrawInstanced (3 , 1 , 0 , 0 );
608624
609625 setMarker (cmd, " SM6.0 ResourceAccess" );
610626 cmd->SetPipelineState (pso_6_0_resourceAccess);
611627 cmd->SetGraphicsRootSignature (sig_resourceAccess);
612- cmd->SetDescriptorHeaps (1 , &m_CBVUAVSRV. GetInterfacePtr () );
628+ cmd->SetDescriptorHeaps (2 , heaps );
613629 cmd->SetGraphicsRootDescriptorTable (0 , m_CBVUAVSRV->GetGPUDescriptorHandleForHeapStart ());
614630 cmd->SetGraphicsRootDescriptorTable (1 , m_CBVUAVSRV->GetGPUDescriptorHandleForHeapStart ());
615631 cmd->SetGraphicsRootDescriptorTable (2 , m_CBVUAVSRV->GetGPUDescriptorHandleForHeapStart ());
@@ -630,7 +646,7 @@ float4 main(float4 pos : SV_Position) : SV_Target0
630646 IASetVertexBuffer (cmd, vb, sizeof (DefaultA2V), 0 );
631647 cmd->SetPipelineState (pso_6_6);
632648 cmd->SetGraphicsRootSignature (sig_5_0);
633- cmd->SetDescriptorHeaps (1 , &m_CBVUAVSRV. GetInterfacePtr () );
649+ cmd->SetDescriptorHeaps (2 , heaps );
634650 cmd->SetGraphicsRootConstantBufferView (0 , cb->GetGPUVirtualAddress ());
635651 cmd->SetGraphicsRootDescriptorTable (1 , m_CBVUAVSRV->GetGPUDescriptorHandleForHeapStart ());
636652 cmd->SetGraphicsRootDescriptorTable (2 , m_CBVUAVSRV->GetGPUDescriptorHandleForHeapStart ());
@@ -643,33 +659,36 @@ float4 main(float4 pos : SV_Position) : SV_Target0
643659 setMarker (cmd, " SM6.6 Table" );
644660 cmd->SetPipelineState (pso2_6_6);
645661 cmd->SetGraphicsRootSignature (sig_5_1);
646- cmd->SetDescriptorHeaps (1 , &m_CBVUAVSRV. GetInterfacePtr () );
662+ cmd->SetDescriptorHeaps (2 , heaps );
647663 cmd->SetGraphicsRootConstantBufferView (0 , cb->GetGPUVirtualAddress ());
648664 cmd->SetGraphicsRootDescriptorTable (1 , m_CBVUAVSRV->GetGPUDescriptorHandleForHeapStart ());
649665 cmd->SetGraphicsRootDescriptorTable (2 , m_CBVUAVSRV->GetGPUDescriptorHandleForHeapStart ());
650666 cmd->SetGraphicsRootDescriptorTable (3 , m_CBVUAVSRV->GetGPUDescriptorHandleForHeapStart ());
667+ cmd->SetGraphicsRootDescriptorTable (4 , m_Sampler->GetGPUDescriptorHandleForHeapStart ());
651668 cmd->DrawInstanced (3 , 1 , 0 , 0 );
652669
653670 setMarker (cmd, " SM6.6 ResArray" );
654671 cmd->SetPipelineState (pso_6_6_resArray);
655672 cmd->SetGraphicsRootSignature (sig_resArray);
656- cmd->SetDescriptorHeaps (1 , &m_CBVUAVSRV. GetInterfacePtr () );
673+ cmd->SetDescriptorHeaps (2 , heaps );
657674 cmd->SetGraphicsRootConstantBufferView (0 , cb->GetGPUVirtualAddress ());
658675 cmd->SetGraphicsRootDescriptorTable (1 , m_CBVUAVSRV->GetGPUDescriptorHandleForHeapStart ());
676+ cmd->SetGraphicsRootDescriptorTable (2 , m_Sampler->GetGPUDescriptorHandleForHeapStart ());
659677 cmd->DrawInstanced (3 , 1 , 0 , 0 );
660678
661679 setMarker (cmd, " SM6.6 Bindless" );
662680 cmd->SetPipelineState (pso_6_6_bindless);
663681 cmd->SetGraphicsRootSignature (sig_bindless);
664- cmd->SetDescriptorHeaps (1 , &m_CBVUAVSRV. GetInterfacePtr () );
682+ cmd->SetDescriptorHeaps (2 , heaps );
665683 cmd->SetGraphicsRootConstantBufferView (0 , cb->GetGPUVirtualAddress ());
666684 cmd->SetGraphicsRootDescriptorTable (1 , m_CBVUAVSRV->GetGPUDescriptorHandleForHeapStart ());
685+ cmd->SetGraphicsRootDescriptorTable (2 , m_Sampler->GetGPUDescriptorHandleForHeapStart ());
667686 cmd->DrawInstanced (3 , 1 , 0 , 0 );
668687
669688 setMarker (cmd, " SM6.6 ResourceAccess" );
670689 cmd->SetPipelineState (pso_6_6_resourceAccess);
671690 cmd->SetGraphicsRootSignature (sig_resourceAccess);
672- cmd->SetDescriptorHeaps (1 , &m_CBVUAVSRV. GetInterfacePtr () );
691+ cmd->SetDescriptorHeaps (2 , heaps );
673692 cmd->SetGraphicsRootDescriptorTable (0 , m_CBVUAVSRV->GetGPUDescriptorHandleForHeapStart ());
674693 cmd->SetGraphicsRootDescriptorTable (1 , m_CBVUAVSRV->GetGPUDescriptorHandleForHeapStart ());
675694 cmd->SetGraphicsRootDescriptorTable (2 , m_CBVUAVSRV->GetGPUDescriptorHandleForHeapStart ());
0 commit comments