RDNA

Vulkan driver for AMD RDNA GPUs.

  • CP : Command Processor

  • SDMA: System DMA Transfers data CPU<->GPU or GPU<->GPU for textures. Can swizzle into optimal layouts (Morton order)

  • PM4:

  • SI_DMA: Old (Southern Islands / GCN 1.0) DMA engine. Not supported.

  • PM4: Packet Microcode 4: command language used by CP

  • PKT3: Packet type (within PM4) for most rings.

  • GFX1030: RDNA 2

  • VCN: Video Core Next (replacer for old UVD and VCE)

  • MEC: MicroEngine Compute

  • ACE: Async Compute Engine

DRM (Direct Rendering Manager):

  • BO: Buffer Object (allocation)

  • HW_IP: each different ‘chip’ basically (HW_IP_GFX, HW_IP_SDMA).

  • IB: Indirect Buffer: Allocated on BO, can be submitted to a HW_IP.

  • CS: Command Stream

AMD (& afaik NV) support predication in multiple ways. In AMD, we can both skip over commands in the CP, but also many packets can read from the predication register. Skipping commands is done for arbitrary va atomic ops (i believe), and the register is for stuff like DRAW_VISIBLE. I believe it would be awesome to support an api like:

auto x = kes_malloc(dev, size, 4, KesMemoryDefault);
auto pred = kes_malloc(dev, 1, 4, KesMemoryDefault);

auto l1 = kes_start_recording(compute);

kes_cmd_conditional_begin(l1, pred, KesCondOpEqual);
kes_cmd_memset(l1, x.gpu, size, 2);
kes_cmd_memcpy(l1, y.gpu, x.gpu, size);
kes_cmd_conditional_end(l1);

kes_submit(compute, l1);

This would be awesome, as it would actually expose this stuff without weird extensions like VK_conditional_rendering.