class PipeScalerControlTigerLake
Defined at line 155 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h
PS_CTRL (Pipe Scaler Control) for Tiger Lake
A pipe Scaler can be used to scale the output of a display pipe or a display
plane. It can scale up / down the resolution and / or scale up the
downsampled chroma pixels or subplanes (for YUV images).
Each pipe has two scalers and they can be assigned to any plane (except for
color) or the display output.
This register is double buffered. See PipeScalerWindowSize for arming and
dis-arming double-buffer updates.
This register has bits that are reserved but not MBZ (must be zero). So, it
can only be safely updated via read-modify-write operations.
Tiger Lake: IHD-OS-TGL-Vol 2c-1.22-Rev 2.0 Part 2, Pages 998-1003
Public Members
field_is_enabled_164
field_chroma_upscaling_enabled_173
field_adaptive_filtering_enabled_186
field_scaled_plane_index_203
field_normal_filter_selection_249
field_adaptive_filter_selection_264
field_pipe_scaler_location_294
field_RsvdZ_296
field_RsvdZ_297
field_RsvdZ_298
field_RsvdZ_299
field_double_buffer_update_disabling_allowed_305
field_y_plane_binding_raw_318
field_y_plane_vertical_filter_set_353
field_y_plane_horizontal_filter_set_361
field_vertical_filter_set_373
field_horizontal_filter_set_382
field_RsvdZ_384
static const uint32_t kBaseAddr
Public Methods
template <, >
typename SelfType::ValueType is_enabled ()
Enables the pipe scaler.
Before enabling the scaler, software should make sure that the scaler
configuration fulfills all the scaler constraints.
Defined at line 164 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h
template <, >
SelfType & set_is_enabled (typename SelfType::ValueType val)
Enables the pipe scaler.
Before enabling the scaler, software should make sure that the scaler
configuration fulfills all the scaler constraints.
Defined at line 164 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h
template <, >
typename SelfType::ValueType chroma_upscaling_enabled ()
If true, the scaler performs YUV chroma upsampling while scaling the
output, which is also called "planar mode" in some documentation.
This bit must be true if and only if the following conditions are met:
- The scaler must be bound to a universal plane instead of a pipe.
- The plane it binds to must be an SDR plane (Plane 4 or 5).
- The plane's active image must be of YUV 420 format.
Defined at line 173 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h
template <, >
SelfType & set_chroma_upscaling_enabled (typename SelfType::ValueType val)
If true, the scaler performs YUV chroma upsampling while scaling the
output, which is also called "planar mode" in some documentation.
This bit must be true if and only if the following conditions are met:
- The scaler must be bound to a universal plane instead of a pipe.
- The plane it binds to must be an SDR plane (Plane 4 or 5).
- The plane's active image must be of YUV 420 format.
Defined at line 173 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h
template <, >
typename SelfType::ValueType adaptive_filtering_enabled ()
Enables the "Adaptive filtering" mode of the pipe scaler.
When set to true, a multi-threshold adaptive filter will be used for
vertical and horizontal filtering. The `filter_selection` field will be
ignored, instead `adaptive_filter_selection` will be used to choose the
filter type.
There are two sets of adaptive filtering thresholds for each pipe scaler.
Threshold values (in `PipeScalerAdaptiveFilterThresholds` register) and
threshold set selection (in `*_filter_set` field) must be programmed before
this bit being enabled.
Defined at line 186 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h
template <, >
SelfType & set_adaptive_filtering_enabled (typename SelfType::ValueType val)
Enables the "Adaptive filtering" mode of the pipe scaler.
When set to true, a multi-threshold adaptive filter will be used for
vertical and horizontal filtering. The `filter_selection` field will be
ignored, instead `adaptive_filter_selection` will be used to choose the
filter type.
There are two sets of adaptive filtering thresholds for each pipe scaler.
Threshold values (in `PipeScalerAdaptiveFilterThresholds` register) and
threshold set selection (in `*_filter_set` field) must be programmed before
this bit being enabled.
Defined at line 186 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h
template <, >
typename SelfType::ValueType scaled_plane_index ()
Selects the index of the plane where the output is scaled. An index of 0
indicates that the output of the whole pipe is scaled.
The value of `scaled_plane_index` must not exceed the number of
planes supported by the pipe. On Tiger Lake, each pipe has 7 planes.
The caller must guarantee that the plane / pipe fulfills all the
constraints below:
- The input size of the pipe / plane must be at least 8 scanlines.
- IF (Interlaced fetch) mode must be disabled.
- Keying can only be enabled if the scaling factor is 1.
- The pixel format must not be 8-bit indexed or XR_BIAS.
- Floating point source pixel values must be within the [0.0, 1.0] range.
- For HDR planes (Plane 1 - 3), the `plane_scaling_enabled` field of the
`PLANE_CUS_CTL` register must be enabled.
Defined at line 203 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h
template <, >
SelfType & set_scaled_plane_index (typename SelfType::ValueType val)
Selects the index of the plane where the output is scaled. An index of 0
indicates that the output of the whole pipe is scaled.
The value of `scaled_plane_index` must not exceed the number of
planes supported by the pipe. On Tiger Lake, each pipe has 7 planes.
The caller must guarantee that the plane / pipe fulfills all the
constraints below:
- The input size of the pipe / plane must be at least 8 scanlines.
- IF (Interlaced fetch) mode must be disabled.
- Keying can only be enabled if the scaling factor is 1.
- The pixel format must not be 8-bit indexed or XR_BIAS.
- Floating point source pixel values must be within the [0.0, 1.0] range.
- For HDR planes (Plane 1 - 3), the `plane_scaling_enabled` field of the
`PLANE_CUS_CTL` register must be enabled.
Defined at line 203 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h
template <, >
NormalFilterSelection normal_filter_selection ()
Selects the filter to use for the non-adaptive filter.
This field only works on non-adaptive mode. If `adaptive_filtering_enabled`
is true, this field will be ignored and `adaptive_filter_selection` will
be used instead.
Defined at line 249 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h
template <, >
SelfType & set_normal_filter_selection (NormalFilterSelection val)
Selects the filter to use for the non-adaptive filter.
This field only works on non-adaptive mode. If `adaptive_filtering_enabled`
is true, this field will be ignored and `adaptive_filter_selection` will
be used instead.
Defined at line 249 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h
template <, >
AdaptiveFilterSelection adaptive_filter_selection ()
Selects the filter to use for the adaptive filter.
This field only works on adaptive mode. If `adaptive_filtering_enabled`
is false, this field will be ignored and `normal_filter_selection` will
be used instead.
Defined at line 264 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h
template <, >
SelfType & set_adaptive_filter_selection (AdaptiveFilterSelection val)
Selects the filter to use for the adaptive filter.
This field only works on adaptive mode. If `adaptive_filtering_enabled`
is false, this field will be ignored and `normal_filter_selection` will
be used instead.
Defined at line 264 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h
template <, >
PipeScalerLocation pipe_scaler_location ()
Specifies the scaler interface on the display pipeline that the pipe
scaler binds to. See `PipeScalerLocation` for details.
This field is effective only when the scaler is bound to the pipe, i.e.
`scaler_binding_selection` field is 0.
Defined at line 294 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h
template <, >
SelfType & set_pipe_scaler_location (PipeScalerLocation val)
Specifies the scaler interface on the display pipeline that the pipe
scaler binds to. See `PipeScalerLocation` for details.
This field is effective only when the scaler is bound to the pipe, i.e.
`scaler_binding_selection` field is 0.
Defined at line 294 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h
template <, >
typename SelfType::ValueType double_buffer_update_disabling_allowed ()
If true, double-buffer updates can be disabled for this plane.
This field applies when the DOUBLE_BUFFER_CTL register is used to disable
the double-buffering of all the resources that allow disabling.
Defined at line 305 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h
template <, >
SelfType & set_double_buffer_update_disabling_allowed (typename SelfType::ValueType val)
If true, double-buffer updates can be disabled for this plane.
This field applies when the DOUBLE_BUFFER_CTL register is used to disable
the double-buffering of all the resources that allow disabling.
Defined at line 305 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h
template <, >
SelfType & set_y_plane_binding_raw (typename SelfType::ValueType val)
Selects the Y plane surface matching the UV plane selected in
`scaled_plane_index`.
This field is effective only if planar mode is enabled.
Only the following values are valid for this field:
- 6 (0b110): indicating Plane 6 is used as input Y plane;
- 7 (0b111): indicating Plane 7 is used as input Y plane.
`y_plane_binding()` and `set_y_plane_binding()` helper methods can be used
to get / set the value of this field.
Defined at line 318 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h
template <, >
typename SelfType::ValueType y_plane_binding_raw ()
Selects the Y plane surface matching the UV plane selected in
`scaled_plane_index`.
This field is effective only if planar mode is enabled.
Only the following values are valid for this field:
- 6 (0b110): indicating Plane 6 is used as input Y plane;
- 7 (0b111): indicating Plane 7 is used as input Y plane.
`y_plane_binding()` and `set_y_plane_binding()` helper methods can be used
to get / set the value of this field.
Defined at line 318 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h
uint32_t y_plane_binding ()
Helper method to get the value of this field with validity check.
Defined at line 321 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h
PipeScalerControlTigerLake & set_y_plane_binding (uint32_t plane_id)
Helper method to set the value of this field with validity check.
Defined at line 335 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h
template <, >
SelfType & set_y_plane_vertical_filter_set (typename SelfType::ValueType val)
Selects the filter coefficient / threshold set used by the *vertical*
filter for the Y semi-plane bound to the scaler in YUV planar mode.
It's used only in the following conditions:
- When `chrome_upsampling_enabled` is true and `adaptive_filter_enabled`
is true, it indicates the adaptive filter threshold set index for Y
plane scaling filter.
- When `chrome_upsampling_enabled` is true, adaptive filtering is
disabled and `normal_filter_select` is `kProgrammed`, it indicates the
programmed filter coefficient set index for Y plane scaling filter.
Otherwise, this field will be ignored.
Defined at line 353 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h
template <, >
typename SelfType::ValueType y_plane_vertical_filter_set ()
Selects the filter coefficient / threshold set used by the *vertical*
filter for the Y semi-plane bound to the scaler in YUV planar mode.
It's used only in the following conditions:
- When `chrome_upsampling_enabled` is true and `adaptive_filter_enabled`
is true, it indicates the adaptive filter threshold set index for Y
plane scaling filter.
- When `chrome_upsampling_enabled` is true, adaptive filtering is
disabled and `normal_filter_select` is `kProgrammed`, it indicates the
programmed filter coefficient set index for Y plane scaling filter.
Otherwise, this field will be ignored.
Defined at line 353 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h
template <, >
SelfType & set_y_plane_horizontal_filter_set (typename SelfType::ValueType val)
Selects the filter coefficient / threshold set used by the *horizontal*
filter for the Y semi-plane bound to the scaler in YUV planar mode.
The semantics of this field is similar to
`y_plane_vertical_filter_set_selection` but it applies to the horizontal
filter instead.
Defined at line 361 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h
template <, >
typename SelfType::ValueType y_plane_horizontal_filter_set ()
Selects the filter coefficient / threshold set used by the *horizontal*
filter for the Y semi-plane bound to the scaler in YUV planar mode.
The semantics of this field is similar to
`y_plane_vertical_filter_set_selection` but it applies to the horizontal
filter instead.
Defined at line 361 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h
template <, >
SelfType & set_vertical_filter_set (typename SelfType::ValueType val)
Selects the filter coefficient / threshold set used by the *vertical*
filter for the plane (or UV semi-plane, if `chroma_upscaling_enabled`
is true) or pipe bound to the scaler.
It's used in the following conditions:
- If `adaptive_filter_enabled` is true, this field indicates the index of
the adaptive filter threshold set.
- If `adaptive_filter_enabled` is false and `normal_filter_select` is
`kProgrammed`, this field indicates the selected filter coefficient set.
Otherwise, this field is ignored.
Defined at line 373 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h
template <, >
typename SelfType::ValueType vertical_filter_set ()
Selects the filter coefficient / threshold set used by the *vertical*
filter for the plane (or UV semi-plane, if `chroma_upscaling_enabled`
is true) or pipe bound to the scaler.
It's used in the following conditions:
- If `adaptive_filter_enabled` is true, this field indicates the index of
the adaptive filter threshold set.
- If `adaptive_filter_enabled` is false and `normal_filter_select` is
`kProgrammed`, this field indicates the selected filter coefficient set.
Otherwise, this field is ignored.
Defined at line 373 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h
template <, >
typename SelfType::ValueType horizontal_filter_set ()
Selects the filter coefficient / threshold set used by the *horizontal*
filter for the plane (or UV semi-plane, if `chroma_upscaling_enabled` is
true) or pipe bound to the scaler.
The semantics of this field is similar to
`vertical_filter_set_selection` but it applies to the horizontal
filter instead.
Defined at line 382 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h
template <, >
SelfType & set_horizontal_filter_set (typename SelfType::ValueType val)
Selects the filter coefficient / threshold set used by the *horizontal*
filter for the plane (or UV semi-plane, if `chroma_upscaling_enabled` is
true) or pipe bound to the scaler.
The semantics of this field is similar to
`vertical_filter_set_selection` but it applies to the horizontal
filter instead.
Defined at line 382 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h
Enumerations
enum NormalFilterSelection
| Name | Value |
|---|---|
| kMedium | 0b00 |
| kProgrammed | 0b01 |
| kEdgeEnhance | 0b10 |
| kBilinear | 0b11 |
Defined at line 205 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h
enum AdaptiveFilterSelection
| Name | Value |
|---|---|
| kMedium | 0b00 |
| kEdgeEnhance | 0b10 |
Defined at line 251 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h
enum PipeScalerLocation
| Name | Value |
|---|---|
| kAfterOutputColorSpaceConversion | 0b0 |
| kAfterColorSpaceConversion | 0b1 |
This enum class specifies the scaler interface on the display pipeline that
the pipe scaler binds to.
Tiger Lake: Section "Pipes", IHD-OS-TGL-Vol 12-1.22-Rev 2.0 Part 2, Pages 117
Defined at line 270 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h