--- 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 -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 -- 2.5.0.400.gff86faf _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev