Intel Surface Layout (ISL)¶
The Intel Surface Layout library (ISL) is a subproject in Mesa for doing surface layout calculations for Intel graphics drivers. It was originally written by Chad Versace and is now maintained by Jason Ekstrand and Nanley Chery.
The core representation of a surface in ISL is isl_surf
.
-
struct
isl_surf
¶ Public Members
-
enum isl_surf_dim
dim
¶ Dimensionality of the surface
-
enum isl_dim_layout
dim_layout
¶ Spatial layout of the surface in memory
This is dependent on isl_surf::dim and hardware generation.
-
enum isl_msaa_layout
msaa_layout
¶ Spatial layout of the samples if isl_surf::samples > 1
-
enum isl_tiling
tiling
¶ Memory tiling used by the surface
-
enum isl_format
format
¶ Base image format of the surface
This need not be the same as the format specified in isl_view::format when a surface state is constructed. It must, however, have the same number of bits per pixel or else memory calculations will go wrong.
-
struct isl_extent3d
image_alignment_el
¶ Alignment of the upper-left sample of each subimage, in units of surface elements.
-
struct isl_extent4d
logical_level0_px
¶ Logical extent of the surface’s base level, in units of pixels. This is identical to the extent defined in isl_surf_init_info.
-
struct isl_extent4d
phys_level0_sa
¶ Physical extent of the surface’s base level, in units of physical surface samples.
Consider isl_dim_layout as an operator that transforms a logical surface layout to a physical surface layout. Then
logical_layout := (isl_surf::dim, isl_surf::logical_level0_px) isl_surf::phys_level0_sa := isl_surf::dim_layout * logical_layout
-
uint32_t
levels
¶ Number of miplevels in the surface
-
uint32_t
samples
¶ Number of samples in the surface
- Invariant
samples >= 1
-
uint64_t
size_B
¶ Total size of the surface, in bytes.
-
uint32_t
alignment_B
¶ Required alignment for the surface’s base address.
-
uint32_t
row_pitch_B
¶ The interpretation of this field depends on the value of isl_tile_info::physical_extent_B. In particular, the width of the surface in tiles is row_pitch_B / isl_tile_info::physical_extent_B.width and the distance in bytes between vertically adjacent tiles in the image is given by row_pitch_B * isl_tile_info::physical_extent_B.height.
For linear images where isl_tile_info::physical_extent_B.height == 1, this cleanly reduces to being the distance, in bytes, between vertically adjacent surface elements.
-
uint32_t
array_pitch_el_rows
¶ Pitch between physical array slices, in rows of surface elements.
-
isl_surf_usage_flags_t
usage
¶ Copy of isl_surf_init_info::usage.
-
enum isl_surf_dim