Информация о поверхности
#include <gf/gf.h>
typedef struct {
gf_sid_t sid;
int w;
int h;
gf_format_t format;
unsigned stride;
uint64_t paddr;
uint8_t* vaddr;
gf_palette_t palette;
unsigned flags;
} gf_surface_info_t;
Структура gf_surface_info_t
имеет как минимум следующие поля:
- sid
- Уникальный идентификатор графической поверхности, созданной io-display. Уникальность гарантируется в пределах графического устройства. Если поверхность была создана не менеджером io-display (например, при использовании gf_surface_attach()), поле устанавливается в значение
GF_SID_INVALID
. - w, h
- Ширина и высота поверхности в пикселях.
- format
- Формат данных (пикселей) в поверхности. Список доступных форматов указан на странице gf_format_t.
- stride
- Число байт на одну строку данных (scanline).
- paddr
- Физический адрес ассоциированного с поверхностью буфера. Поле актуально только при установленном флаге
GF_SURFACE_PHYS_CONTIG
в поле flags данной структуры. - vaddr
- Виртуальный адрес ассоциированного с поверхностью буфера. Поле актуально только если поверхность создавалась при установленном флаге
GF_SURFACE_CREATE_CPU_LINEAR_ACCESSIBLE
. - palette
- Палитра поверхности. См. тип gf_palette_t. Поле актуально только для формата поверхности GF_FORMAT_PAL8.
- flags
- Флаги, характеризующие дополнительные атрибуты поверхности:
- GF_SURFACE_DISPLAYABLE
- Повехность может использоваться в качестве базовой для контроллера дисплеев.
- GF_SURFACE_CPU_LINEAR_READABLE
- Возможно прямое чтение данных в поверхности со стороны CPU.
- GF_SURFACE_CPU_LINEAR_WRITEABLE
- Возможна прямая запись данных в поверхность со стороны CPU.
- GF_SURFACE_2D_READABLE
- Поверхность доступна для чтения со стороны 2D ускорителя.
- GF_SURFACE_2D_TARGETABLE
- Поверхность доступна для рендеринга со стороны 2D ускорителя.
- GF_SURFACE_3D_READABLE
- Поверхность доступна для чтения со стороны 3D ускорителя (флаг не носит практического характера и сохранен лишь из соображений обратной совместимости).
- GF_SURFACE_3D_TARGETABLE
- Поверхность доступна для рендеринга со стороны 3D ускорителя (флаг не носит практического характера и сохранен лишь из соображений обратной совместимости).
- GF_SURFACE_ALPHA_MAP
- Поверхность может использоваться 2D ускорителем в качестве альфа-карты.
- GF_SURFACE_SCALER_DISPLAYABLE
- Поверхность может использоваться скейлером видео-оверлея (флаг не носит практического характера и сохранен лишь из соображений обратной совместимости).
- GF_SURFACE_VMI_TARGETABLE
- Поверхность может использоваться встроенным видео ядром для записи кадров (флаг не носит практического характера и сохранен лишь из соображений обратной совместимости).
- GF_SURFACE_DMA_SAFE
- Поверхность доступна DMA устроствам в качестве непрерывного блока памяти.
- GF_SURFACE_PAGE_ALIGNED
- Память поверхности выделена от начала страницы памяти и ее линейный размер кратен размеру страницы.
- GF_SURFACE_BYTES_REVERSED
- Порядок байт в поверхности обратный. Флаг актуален только для 16- и 32- битных поверхностей.
- GF_SURFACE_NON_CACHEABLE
- Память данной поверхности должна маппироваться как не кешируемая.
- GF_SURFACE_WT_CACHEABLE
- Память данной поверхности может быть смаппирована как WT-кешируемая (write-through cacheable), но не WB-кешируемая (write-back cacheable).
- GF_SURFACE_PHYS_CONTIG
- Память поверхности физически непрерывна.
- GF_SURFACE_DRIVER_NOT_OWNER
- Драйвер графической подсистемы не является владельцем этой поверхности и не создавал ее.
| В большинстве случаев есть однозначная взаимосвязь перечисленных флагов со значениями GF_SURFACE_CREATE_xxxx параметра flags, передаваемого функциям gf_surface_create() и gf_surface_create_layer(). Так, перечисленные ниже флаги создания будут представлены в структуре gf_surface_info_t следующими значениями: - GF_SURFACE_CREATE_2D_ACCESSIBLE
- При успешном создании поверхности превратятся в комбинацию
GF_SURFACE_2D_READABLE и/или GF_SURFACE_2D_TARGETABLE флагов. - GF_SURFACE_CREATE_3D_ACCESSIBLE
- При успешном создании поверхности превратятся в комбинацию
GF_SURFACE_3D_READABLE и/или GF_SURFACE_3D_TARGETABLE флагов. Все остальные флаги, доступные через поле flags структуры gf_surface_info_t и не имеющие соответствующего отражения на этапе создания поверхности, используются только для уведомления о дополнительных возможностях поверхности. Любые иные попытки связать две совокупности флагов являются потенциальным источником ошибок. |
Графическая подсистема ЗОСРВ «Нейтрино», Graphics Framework
gf_surface_get_info()
Предыдущий раздел: GF API