<!--
{
  "availability" : [

  ],
  "documentType" : "symbol",
  "framework" : "ParavirtualizedGraphics",
  "identifier" : "/documentation/ParavirtualizedGraphics",
  "metadataVersion" : "0.1.0",
  "role" : "Framework",
  "symbol" : {
    "kind" : "Framework",
    "modules" : [
      "Paravirtualized Graphics"
    ],
    "preciseIdentifier" : "ParavirtualizedGraphics"
  },
  "title" : "Paravirtualized Graphics"
}
-->

# Paravirtualized Graphics

Add graphics acceleration to your guest driver stack.

## Overview

If you have an app that implements hardware-level virtualization, performance inside the virtual machine is critical, particularly for graphics. The ParavirtualizedGraphics framework implements hardware-accelerated graphics for macOS running in a virtual machine, hereafter known as the guest. The operating system provides a graphics driver that runs inside the guest, communicating with the framework in the host operating system to take advantage of Metal-accelerated graphics.

To implement accelerated graphics inside your virtualization solution, you need to take the following steps for each virtual machine:

1. Advertise the virtual graphics card in the virtual machine hardware so that macOS can install the correct driver.
2. Create a [`PGDeviceDescriptor`](/documentation/ParavirtualizedGraphics/PGDeviceDescriptor), providing the necessary blocks to connect your virtual machine implementation to the ParavirtualizedGraphics framework. Use this descriptor to create a [`PGDevice`](/documentation/ParavirtualizedGraphics/PGDevice) object, which you keep alive as long as the virtual machine is still active. The ParavirtualizedGraphics framework calls your blocks when it needs to allocate memory or take other relevant actions.
3. Create a [`PGDisplayDescriptor`](/documentation/ParavirtualizedGraphics/PGDisplayDescriptor) for each virtual display that you want to connect to the device, specifying the display’s properties and blocks for the framework to call for display events. Use this descriptor to create a [`PGDisplay`](/documentation/ParavirtualizedGraphics/PGDisplay) object. Handle the appropriate display events to display the graphics data that the framework provides.

## Topics

### PCI Device Characteristics

[`var PG_PCI_DEVICE_ID: Int32`](/documentation/ParavirtualizedGraphics/PG_PCI_DEVICE_ID)

The PCI device identifier to use when advertising the graphics stack inside a virtual machine.

[`var PG_PCI_VENDOR_ID: Int32`](/documentation/ParavirtualizedGraphics/PG_PCI_VENDOR_ID)

The vendor identifier to use when advertising the graphics stack inside a virtual machine.

[`var PG_PCI_BAR_MMIO: Int32`](/documentation/ParavirtualizedGraphics/PG_PCI_BAR_MMIO)

The base address register to use when advertising the graphics stack inside a virtual machine.

[`var PG_PCI_MAX_MSI_VECTORS: Int32`](/documentation/ParavirtualizedGraphics/PG_PCI_MAX_MSI_VECTORS)

The number of MSI vectors that you need to allocate for the graphics configuration.

[`func PGCopyOptionROMURL() -> URL`](/documentation/ParavirtualizedGraphics/PGCopyOptionROMURL())

Copies the URL of the ROM image to use on the guest graphics device.

### Devices

[`class PGDeviceDescriptor`](/documentation/ParavirtualizedGraphics/PGDeviceDescriptor)

A description of the paravirtualized graphics device to create.

[`protocol PGDevice`](/documentation/ParavirtualizedGraphics/PGDevice)

A paravirtualized GPU device object.

### Displays

[`class PGDisplayDescriptor`](/documentation/ParavirtualizedGraphics/PGDisplayDescriptor)

A descriptor for a virtual display.

[`protocol PGDisplay`](/documentation/ParavirtualizedGraphics/PGDisplay)

An object that provides display functionality to the guest operating system in a way that the host-side virtual machine app can intercept.

[`class PGDisplayMode`](/documentation/ParavirtualizedGraphics/PGDisplayMode)

A description of a supported display mode.

[`struct PGDisplayCoord_t`](/documentation/ParavirtualizedGraphics/PGDisplayCoord_t)

Coordinates that describe sizes or offsets within a 2D array of pixels.

### Versioning

### Reference

[ParavirtualizedGraphics Constants](/documentation/ParavirtualizedGraphics/paravirtualizedgraphics-constants)

[ParavirtualizedGraphics Functions](/documentation/ParavirtualizedGraphics/paravirtualizedgraphics-functions)

[ParavirtualizedGraphics Data Types](/documentation/ParavirtualizedGraphics/paravirtualizedgraphics-data-types)

### Variables

[`var HAS_NS_BITMAP_HEADER: Int32`](/documentation/ParavirtualizedGraphics/HAS_NS_BITMAP_HEADER)

[`var PG_SUPPORT_CREATE_DEVICE: Int32`](/documentation/ParavirtualizedGraphics/PG_SUPPORT_CREATE_DEVICE)

### Functions

[`func PGCreateDeviceWithDescriptor(PGDeviceDescriptor) -> (any PGDevice)?`](/documentation/ParavirtualizedGraphics/PGCreateDeviceWithDescriptor(_:))

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)