Description of a two-dimensional surface
#include <graphics/display.h>
typedef struct disp_surface {
int size;
unsigned pixel_format;
unsigned offset;
unsigned char *vidptr;
uintptr_t paddr;
unsigned stride;
unsigned flags;
int width;
int height;
disp_color_t *palette;
int palette_valid_entries;
disp_adapter_t *adapter;
unsigned reserved;
} disp_surface_t;
The disp_surface_t structure describes a two-dimensional
surface.
It's used as an argument to several
functions, and is also used within other structures, such as
disp_draw_context_t.
The members include:
- size
- The size of this structure.
Any time a driver creates a structure of this type, it should
set this member to sizeof (disp_surface_t).
- pixel_format
- The pixel format.
For more information, see
“Pixel formats”
in the Writing a Graphics Driver chapter.
- offset
- A device-dependent address that points to the start of the surface data.
- vidptr
- The virtual (CPU) address that points to the start of the surface data.
- paddr
- The physical (bus) address that points to the start of the surface data.
- stride
- The number of bytes from the beginning of one scanline to the beginning
of the next (see diagram below).
- flags
- Surface flags, defined below.
- width
- The width of the surface, in pixels (see diagram below).
- height
- The height of the surface, in scan lines (see diagram below).
- palette
- A pointer to the palette for this surface.
If not a palette type, this pointer is NULL.
- pal_valid_entries
- The number of entries that are valid in the pal_ptr palette.
For palette-based surface data, pixel values in the data shouldn't exceed
this value, otherwise they might reference past the end of the palette array.
- adapter
- A pointer to the
disp_adapter_t
structure for the device that created this surface (if any).
The three members, stride, height, and width
are used to define a surface as follows:
Memory layout.
The entire content of the box represents the total memory area allocated, and
the unshaded portions represent the memory area that's actually usable for the
surface.
|
Don't overwrite the “not used” areas; it might be used to
store other surfaces. |
The flags member is a bitmap of the following values:
- DISP_SURFACE_DISPLAYABLE
- The surface can be displayed via CRT controller.
- DISP_SURFACE_CPU_LINEAR_READABLE
- The CPU can read this surface directly.
- DISP_SURFACE_CPU_LINEAR_WRITEABLE
- The CPU can write to this surface directly.
- DISP_SURFACE_2D_TARGETABLE
- The 2D engine can render into this surface.
- DISP_SURFACE_2D_READABLE
- The surface is read-accessible by 2D engine.
- DISP_SURFACE_3D_TARGETABLE
- The 3D engine can render into surface.
- DISP_SURFACE_3D_READABLE
- The surface is read-accessible by 3D engine, for example, for textures.
- DISP_SURFACE_VMI_TARGETABLE
- Video capture hardware can write frames into this surface.
- DISP_SURFACE_PAGE_ALIGNED
- Surface memory starts on a page boundary.
- DISP_SURFACE_BYTES_REVERSED
- Surface memory accesses by CPU are byte-swapped. Only valid for 16 and 32bpp surfaces. See the section on Pixel formats in the Writing a Graphics Driver chapter.
- DISP_SURFACE_NON_CACHEABLE
- The CPU shouldn't map the surface memory as cacheable.
- DISP_SURFACE_PHYS_CONTIG
- The surface memory is physically contiguous.
- DISP_SURFACE_DRIVER_NOT_OWNER
- The surface wasn't created by your device driver
- DISP_SURFACE_ALPHA_MAP
- The surface can be used as an alpha map for a blending operation.
Neutrino
disp_adapter_t,
disp_draw_context_t,
disp_draw_contextfuncs_t,
disp_draw_corefuncs_t,
disp_draw_miscfuncs_t,
disp_memfuncs_t,
disp_modefuncs_t,
disp_vcapfuncs_t