Skip to content

[DirectX] RootSignature's v2::DescriptorRange is misordered #145438

@bogner

Description

@bogner

We currently have the v2::DescriptorRange inherit from the v1::DescriptorRange and add a Flags field, but this is incorrect. In both the 1.0 and 1.1 root signature formats, the OffsetInDescriptorsFromTableStart comes last. That is, v1::DescriptorRange is laid out as follows:

struct DescriptorRange {
  uint32_t RangeType;
  uint32_t NumDescriptors;
  uint32_t BaseShaderRegister;
  uint32_t RegisterSpace;
  uint32_t OffsetInDescriptorsFromTableStart;
};

This matches what we have today, but v2::DescriptorRange is laid out like so:

struct DescriptorRange {
  uint32_t RangeType;
  uint32_t NumDescriptors;
  uint32_t BaseShaderRegister;
  uint32_t RegisterSpace;
  uint32_t Flags;
  uint32_t OffsetInDescriptorsFromTableStart;
};

This does not match what we have today, as we have the OffsetInDescriptorsFromTableStart and Flags fields reversed. This causes obvious issues when we feed shaders that have root signatures with descriptor ranges into any driver.

Metadata

Metadata

Assignees

Type

Projects

Status

Closed

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions