[Mesa-dev] [PATCH 34/36] isl: Add enum conversions that assert on invalid enums
Michael Schellenberger
mschellenbergercosta at googlemail.com
Thu Jun 30 07:45:40 UTC 2016
Hi Jason,
Am 30.06.2016 um 02:37 schrieb Jason Ekstrand:
> ---
> src/intel/isl/isl_surface_state.c | 124 +++++++++++++++++++++++---------------
> 1 file changed, 74 insertions(+), 50 deletions(-)
>
> diff --git a/src/intel/isl/isl_surface_state.c b/src/intel/isl/isl_surface_state.c
> index 1b269a3..0a2d877 100644
> --- a/src/intel/isl/isl_surface_state.c
> +++ b/src/intel/isl/isl_surface_state.c
> @@ -41,67 +41,91 @@ __gen_combine_address(void *data, void *loc, uint64_t addr, uint32_t delta)
> #define __PASTE(x, y) __PASTE2(x, y)
> #define isl_genX(x) __PASTE(isl_, genX(x))
>
> +static inline uint8_t
> +isl_to_gen_halign(unsigned halign)
> +{
> + switch (halign) {
> #if GEN_GEN >= 8
> -static const uint8_t isl_to_gen_halign[] = {
> - [4] = HALIGN4,
> - [8] = HALIGN8,
> - [16] = HALIGN16,
> -};
> + case 4: return HALIGN4;
> + case 8: return HALIGN8;
> + case 16: return HALIGN16;
> #elif GEN_GEN >= 7
While you are at it can you make that ==7 do avoid the overlap?
--Michael
> -static const uint8_t isl_to_gen_halign[] = {
> - [4] = HALIGN_4,
> - [8] = HALIGN_8,
> -};
> + case 4: return HALIGN_4;
> + case 8: return HALIGN_8;
> #endif
> + default:
> + unreachable("Invalid horizontal alignment");
> + }
> +}
>
> +static inline uint8_t
> +isl_to_gen_valign(unsigned valign)
> +{
> + switch (valign) {
> #if GEN_GEN >= 8
> -static const uint8_t isl_to_gen_valign[] = {
> - [4] = VALIGN4,
> - [8] = VALIGN8,
> - [16] = VALIGN16,
> -};
> + case 4: return VALIGN4;
> + case 8: return VALIGN8;
> + case 16: return VALIGN16;
> #elif GEN_GEN >= 6
> -static const uint8_t isl_to_gen_valign[] = {
> - [2] = VALIGN_2,
> - [4] = VALIGN_4,
> -};
> + case 2: return VALIGN_2;
> + case 4: return VALIGN_4;
> #endif
> + default:
> + unreachable("Invalid horizontal alignment");
> + }
> +}
>
> #if GEN_GEN >= 8
> -static const uint8_t isl_to_gen_tiling[] = {
> - [ISL_TILING_LINEAR] = LINEAR,
> - [ISL_TILING_X] = XMAJOR,
> - [ISL_TILING_Y0] = YMAJOR,
> - [ISL_TILING_Yf] = YMAJOR,
> - [ISL_TILING_Ys] = YMAJOR,
> - [ISL_TILING_W] = WMAJOR,
> +static inline uint8_t
> +isl_to_gen_tiling(enum isl_tiling tiling)
> +{
> + switch (tiling) {
> + case ISL_TILING_LINEAR: return LINEAR;
> + case ISL_TILING_X: return XMAJOR;
> + case ISL_TILING_Y0: return YMAJOR;
> + case ISL_TILING_Yf: return YMAJOR;
> + case ISL_TILING_Ys: return YMAJOR;
> + case ISL_TILING_W: return WMAJOR;
> + default:
> + unreachable("Invalid tiling");
> + }
> };
> #endif
>
> #if GEN_GEN >= 7
> -static const uint32_t isl_to_gen_multisample_layout[] = {
> - [ISL_MSAA_LAYOUT_NONE] = MSFMT_MSS,
> - [ISL_MSAA_LAYOUT_INTERLEAVED] = MSFMT_DEPTH_STENCIL,
> - [ISL_MSAA_LAYOUT_ARRAY] = MSFMT_MSS,
> -};
> +static inline uint32_t
> +isl_to_gen_msaa_layout(enum isl_msaa_layout layout)
> +{
> + switch (layout) {
> + case ISL_MSAA_LAYOUT_NONE: return MSFMT_MSS;
> + case ISL_MSAA_LAYOUT_INTERLEAVED: return MSFMT_DEPTH_STENCIL;
> + case ISL_MSAA_LAYOUT_ARRAY: return MSFMT_MSS;
> + default:
> + unreachable("Invalid msaa_layout");
> + }
> +}
> #endif
>
> +static inline uint32_t
> +isl_to_gen_aux_usage(enum isl_aux_usage usage)
> +{
> + switch (usage) {
> #if GEN_GEN >= 9
> -static const uint32_t isl_to_gen_aux_mode[] = {
> - [ISL_AUX_USAGE_NONE] = AUX_NONE,
> - [ISL_AUX_USAGE_HIZ] = AUX_HIZ,
> - [ISL_AUX_USAGE_MCS] = AUX_CCS_D,
> - [ISL_AUX_USAGE_CCS_D] = AUX_CCS_D,
> - [ISL_AUX_USAGE_CCS_E] = AUX_CCS_E,
> -};
> + case ISL_AUX_USAGE_NONE: return AUX_NONE;
> + case ISL_AUX_USAGE_HIZ: return AUX_HIZ;
> + case ISL_AUX_USAGE_MCS: return AUX_CCS_D;
> + case ISL_AUX_USAGE_CCS_D: return AUX_CCS_D;
> + case ISL_AUX_USAGE_CCS_E: return AUX_CCS_E;
> #elif GEN_GEN >= 8
> -static const uint32_t isl_to_gen_aux_mode[] = {
> - [ISL_AUX_USAGE_NONE] = AUX_NONE,
> - [ISL_AUX_USAGE_HIZ] = AUX_HIZ,
> - [ISL_AUX_USAGE_MCS] = AUX_MCS,
> - [ISL_AUX_USAGE_CCS_D] = AUX_MCS,
> -};
> + case ISL_AUX_USAGE_NONE: return AUX_NONE;
> + case ISL_AUX_USAGE_HIZ: return AUX_HIZ;
> + case ISL_AUX_USAGE_MCS: return AUX_MCS;
> + case ISL_AUX_USAGE_CCS_D: return AUX_MCS;
> #endif
> + default:
> + unreachable("Invalid aux usage");
> + }
> +}
>
> static uint8_t
> get_surftype(enum isl_surf_dim dim, isl_surf_usage_flags_t usage)
> @@ -334,9 +358,9 @@ isl_genX(surf_fill_state_s)(const struct isl_device *dev, void *state,
>
> #if GEN_GEN >= 6
> const struct isl_extent3d image_align = get_image_alignment(info->surf);
> - s.SurfaceVerticalAlignment = isl_to_gen_valign[image_align.height];
> + s.SurfaceVerticalAlignment = isl_to_gen_valign(image_align.height);
> #if GEN_GEN >= 7
> - s.SurfaceHorizontalAlignment = isl_to_gen_halign[image_align.width];
> + s.SurfaceHorizontalAlignment = isl_to_gen_halign(image_align.width);
> #endif
> #endif
>
> @@ -364,7 +388,7 @@ isl_genX(surf_fill_state_s)(const struct isl_device *dev, void *state,
> #endif
>
> #if GEN_GEN >= 8
> - s.TileMode = isl_to_gen_tiling[info->surf->tiling];
> + s.TileMode = isl_to_gen_tiling(info->surf->tiling);
> #else
> s.TiledSurface = info->surf->tiling != ISL_TILING_LINEAR,
> s.TileWalk = info->surf->tiling == ISL_TILING_Y0 ? TILEWALK_YMAJOR :
> @@ -394,7 +418,7 @@ isl_genX(surf_fill_state_s)(const struct isl_device *dev, void *state,
> s.NumberofMultisamples = ffs(info->surf->samples) - 1;
> #if GEN_GEN >= 7
> s.MultisampledSurfaceStorageFormat =
> - isl_to_gen_multisample_layout[info->surf->msaa_layout];
> + isl_to_gen_msaa_layout(info->surf->msaa_layout);
> #endif
> #endif
>
> @@ -460,7 +484,7 @@ isl_genX(surf_fill_state_s)(const struct isl_device *dev, void *state,
> s.AuxiliarySurfacePitch = pitch_in_tiles - 1;
> s.AuxiliarySurfaceQPitch = get_qpitch(info->aux_surf) >> 2;
> s.AuxiliarySurfaceBaseAddress = info->aux_address;
> - s.AuxiliarySurfaceMode = isl_to_gen_aux_mode[info->aux_usage];
> + s.AuxiliarySurfaceMode = isl_to_gen_aux_usage(info->aux_usage);
> #else
> assert(info->aux_usage == ISL_AUX_USAGE_MCS ||
> info->aux_usage == ISL_AUX_USAGE_CCS_D);
> @@ -549,9 +573,9 @@ isl_genX(buffer_fill_state_s)(void *state,
> s.SurfaceFormat = info->format;
>
> #if GEN_GEN >= 6
> - s.SurfaceVerticalAlignment = isl_to_gen_valign[4];
> + s.SurfaceVerticalAlignment = isl_to_gen_valign(4);
> #if GEN_GEN >= 7
> - s.SurfaceHorizontalAlignment = isl_to_gen_halign[4];
> + s.SurfaceHorizontalAlignment = isl_to_gen_halign(4);
> s.SurfaceArray = false;
> #endif
> #endif
More information about the mesa-dev
mailing list