.. _SD.GraphicsProgramming.OpenWFD: .. include:: /content/swdocs.rsts .. spelling:: OpenWFD !!!!!!! This topic describes the Khronos \ |tm| Open Windowing Foundation - Display \ |tm| (OpenWFD) API that can be used to interact with the display hardware. OpenWFD does not require the presence of a native windowing system. OpenWFD is a Khronos API that provides a low-level hardware abstraction interface for windowing systems, and applications can interact directly with the display by using the OpenWFD API. The specification of the OpenWFD API is available at Khronos' registry at `OpenWF Display 1.0 Specification `_ (also referred to as the spec). The display architecture on Jetson includes an OpenWFD driver (also referred to as the WFD driver) that supports a subset of the core OpenWFD APIs in the spec and additional NVIDIA specific extensions. Usage guidelines for the core OpenWFD APIs can be obtained from the spec, and deviations from the spec or additional details will be described in this section. Supported OpenWFD APIs @@@@@@@@@@@@@@@@@@@@@@ The following table provides a list of the supported core OpenWFD APIs on the WFD driver: .. list-table:: Supported OpenWFD APIs :widths: 25 25 :header-rows: 1 * - API - Support in the OpenWFD driver * - `wfdGetStrings` - Supported * - `wfdIsExtensionSupported` - Supported * - `wfdGetError` - Supported * - `wfdEnumerateDevices` - Supported * - `wfdCreateDevice` - Supported * - `wfdDestroyDevice` - Supported * - `wfdDeviceCommit` - Supported * - `wfdGetDeviceAttribi` - Supported * - `wfdSetDeviceAttribi` - Supported * - `wfdCreateEvent` - Not supported * - `wfdDestroyEvent` - Not supported * - `wfdGetEventAttribi` - Not supported * - `wfdDeviceEventAsync` - Not supported * - `wfdDeviceEventWait` - Not supported * - `wfdDeviceEventFilter` - Not supported * - `wfdEnumeratePorts` - Supported * - `wfdCreatePort` - Supported * - `wfdDestroyPort` - Supported * - `wfdGetPortModes` - Supported * - `wfdGetPortModeAttrib{i/f}` - Supported * - `wfdSetPortMode` - Supported * - `wfdGetCurrentPortMode` - Supported * - `wfdGetPortAttribi` - Supported * - `wfdGetPortAttribf` - Supported * - `wfdGetPortAttribiv` - Supported * - `wfdGetPortAttribfv` - Supported * - `wfdSetPortAttribi` - Supported * - `wfdSetPortAttribf` - Supported * - `wfdSetPortAttribiv` - Supported * - `wfdSetPortAttribfv` - Supported * - `wfdBindPipelineToPort` - Supported * - `wfdGetDisplayDataFormats` - Not supported * - `wfdGetDisplayData` - Not supported * - `wfdEnumeratePipelines` - Not supported * - `wfdCreatePipeline` - Supported * - `wfdDestroyPipeline` - Supported * - `wfdCreateSourceFromImage` - Not supported * - `wfdCreateSourceFromStream` - Not supported * - `wfdDestroySource` - Supported * - `wfdCreateMaskFromImage` - Not supported * - `wfdCreateMaskFromStream` - Not supported * - `wfdDestroyMask` - Not supported * - `wfdBindSourceToPipeline` - Supported * - `wfdBindMaskToPipeline` - Not supported * - `wfdGetPipelineAttribi` - Supported * - `wfdGetPipelineAttribf` - Supported * - `wfdGetPipelineAttribiv` - Supported * - `wfdGetPipelineAttribfv` - Supported * - `wfdSetPipelineAttribi` - Supported * - `wfdSetPipelineAttribf` - Supported * - `wfdSetPipelineAttribiv` - Supported * - `wfdSetPipelineAttribfv` - Supported * - `wfdGetPipelineTransparency` - Supported * - `wfdSetPipelineTSColor` - Not supported * - `wfdGetPipelineLayerOrder` - Supported The following OpenWFD attributes are not implemented: * `WFD_PORT_POWER_MODE` * `WFD_PORT_PROTECTION_ENABLE` * `WFD_PORT_PARTIAL_REFRESH_ENABLE` * `WFD_PORT_GAMMA` * `WFD_PIPELINE_SHAREABLE` * `WFD_PIPELINE_SCALE_FILTER` The following OpenWFD attributes have limited support for querying: `WFD_PORT_BACKGROUND_COLOR` - Cannot be queried via the `wfdGetPortAttribi` API. The `wfdGetPortAttribiv` and `wfdGetPortAttribfv` APIs can still be used for querying `WFD_PORT_BACKGROUND_COLOR`. Supported OpenWFD Extensions @@@@@@@@@@@@@@@@@@@@@@@@@@@@ The following OpenWFD extensions are supported by the OpenWFD Driver: * `WFD_NVX_create_source_from_nvscibuf` * `WFD_NVX_commit_non_blocking` * `WFD_NVX_nvscisync` * `WFD_NVX_port_mode_timings` For more information about these extensions, refer to the `Jetson Linux API Reference Guide `_, which is included in the Jetson Linux documentation package. OpenWFD Usage Guidelines @@@@@@@@@@@@@@@@@@@@@@@@ * To enable the `WFD_NVX_create_source_from_nvscibuf` extension, before you include the `wfd.h` and `wfdext.h` headers, define the `WFD_NVX_create_source_from_nvscibuf` macro. * Define the `WFD_WFDEXT_PROTOTYPES` macro before you include the `wfd.h` and `wfdext.h` headers. * To clear the contents on a `WFDPipeline` (performing a null flip), call `wfdBindSourceToPipeline` with `0` for the `WFDSource` argument before you call `wfdDeviceCommit` on the `WFDPipeline`. * To commit to multiple `WFDPipeline` handles that are bound to the same `WFDPort`, we recommended that you call `wfdDeviceCommit*` with `WFDCommitType` set to `WFD_COMMIT_ENTIRE_PORT`. * When you use `WFD_COMMIT_ENTIRE_PORT` in a `wfdDeviceCommit` call, the `WFDPipeline` objects that are part of the commit must have a surface bound(normal flip) or have no surfaces bound (null flip). A mix of normal and a null flip in one `WFD_COMMIT_ENTIRE_PORT` `wfdDeviceCommit` call is not allowed due to a limitation on the Display driver. * To ensure that errors are caught, invoke the `wfdGetError` API after calls to the following OpenWFD APIs that take a `WFDDevice` handle as one of the inputs and return `void`: * `wfdDeviceCommit` * `wfdDeviceCommitWithNvSciSyncFenceNVX` * `wfdDestroyPort` * `wfdSetPortMode` * `wfdGetPortAttrib{iv/fv}` * `wfdSetPortAttrib{i/v/iv/fv}` * `wfdBindPipelineToPort` * `wfdDestroyPipeline` * `wfdDestroySource` * `wfdBindSourceToPipeline` * `wfdGetPipelineAttrib{iv/fv}` * `wfdSetPipelineAttrib{i/v/iv/fv}`