@@ -544,3 +544,73 @@ Version 1.1 Root Descriptor
544544The Version 1.1 RootDescriptor_V1_1 extends the base structure with the following additional fields:
545545
546546#. **Flags **: Provides additional metadata about the descriptor's usage pattern.
547+
548+ Root Descriptor Table
549+ ~~~~~~~~~~~~~~~~~~~~~
550+
551+ Descriptor tables provide a flexible mechanism for grouping and managing multiple resource descriptors within
552+ a single root signature parameter. They enable efficient binding of complex shader resource sets while minimizing
553+ root signature space consumption.
554+
555+ .. code-block :: cpp
556+
557+ struct DescriptorRange_V1_0 {
558+ dxbc::DescriptorRangeType RangeType;
559+ uint32_t NumDescriptors;
560+ uint32_t BaseShaderRegister;
561+ uint32_t RegisterSpace;
562+ uint32_t OffsetInDescriptorsFromTableStart;
563+ };
564+
565+ struct DescriptorRange_V1_1 {
566+ dxbc::DescriptorRangeType RangeType;
567+ uint32_t NumDescriptors;
568+ uint32_t BaseShaderRegister;
569+ uint32_t RegisterSpace;
570+ uint32_t OffsetInDescriptorsFromTableStart;
571+ Copy// New flags for Version 1.1
572+ enum Flags {
573+ None = 0x0,
574+ // Descriptors are static and known at root signature creation
575+ DESCRIPTORS_STATIC = 0x1,
576+ // Descriptors remain constant during command list execution
577+ DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS = 0x2,
578+ // Descriptors may change frequently
579+ DESCRIPTORS_VOLATILE = 0x4
580+ };
581+
582+ // Bitfield of flags from the Flags enum
583+ uint32_t Flags;
584+ };
585+
586+ struct RootDescriptorTable {
587+ uint32_t NumDescriptorRanges;
588+ uint32_t DescriptorRangesOffset;
589+ };
590+
591+
592+ Descriptor Range Version 1.0
593+ ''''''''''''''''''''''''''''
594+
595+ The Version 1.0 ``DescriptorRange_V1_0 `` provides basic descriptor range definition:
596+
597+ #. **RangeType **: Type of descriptors (CBV, SRV, UAV, or Sampler)
598+ #. **NumDescriptors **: Number of descriptors in the range
599+ #. **BaseShaderRegister **: First shader register in the range
600+ #. **RegisterSpace **: Register space for the range
601+ #. **OffsetInDescriptorsFromTableStart **: Offset from the descriptor heap start
602+
603+ Descriptor Range Version 1.1
604+ ''''''''''''''''''''''''''''
605+ The Version 1.1 DescriptorRange_V1_1 extends the base structure with performance optimization flags.
606+
607+ #. **Flags **: Provide additional information about the descriptors and enable further driver optimizations.
608+
609+ Root Descriptor Table
610+ '''''''''''''''''''''
611+
612+ RootDescriptorTable provides basic table structure:
613+
614+ #. **NumDescriptorRanges **: Number of descriptor ranges
615+ #. **DescriptorRangesOffset **: Offset to descriptor range array
616+
0 commit comments