diff --git a/src/gallium/drivers/etnaviv/etnaviv_screen.c b/src/gallium/drivers/etnaviv/etnaviv_screen.c index a414febf8ab..0d96de5e0bc 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_screen.c +++ b/src/gallium/drivers/etnaviv/etnaviv_screen.c @@ -1069,7 +1069,7 @@ etna_get_specs(struct etna_screen *screen) */ if (!VIV_FEATURE(screen, ETNA_FEATURE_MC20) && !VIV_FEATURE(screen, ETNA_FEATURE_MMU_VERSION)) - screen->features[viv_chipFeatures] &= ~chipFeatures_FAST_CLEAR; + etna_core_disable_feature(screen->info, ETNA_FEATURE_FAST_CLEAR); return true; @@ -1130,7 +1130,6 @@ etna_screen_create(struct etna_device *dev, struct etna_gpu *gpu, { struct etna_screen *screen = CALLOC_STRUCT(etna_screen); struct pipe_screen *pscreen; - uint64_t val; if (!screen) return NULL; @@ -1153,84 +1152,6 @@ etna_screen_create(struct etna_device *dev, struct etna_gpu *gpu, goto fail; } - if (etna_gpu_get_param(screen->gpu, ETNA_GPU_FEATURES_0, &val)) { - DBG("could not get ETNA_GPU_FEATURES_0"); - goto fail; - } - screen->features[0] = val; - - if (etna_gpu_get_param(screen->gpu, ETNA_GPU_FEATURES_1, &val)) { - DBG("could not get ETNA_GPU_FEATURES_1"); - goto fail; - } - screen->features[1] = val; - - if (etna_gpu_get_param(screen->gpu, ETNA_GPU_FEATURES_2, &val)) { - DBG("could not get ETNA_GPU_FEATURES_2"); - goto fail; - } - screen->features[2] = val; - - if (etna_gpu_get_param(screen->gpu, ETNA_GPU_FEATURES_3, &val)) { - DBG("could not get ETNA_GPU_FEATURES_3"); - goto fail; - } - screen->features[3] = val; - - if (etna_gpu_get_param(screen->gpu, ETNA_GPU_FEATURES_4, &val)) { - DBG("could not get ETNA_GPU_FEATURES_4"); - goto fail; - } - screen->features[4] = val; - - if (etna_gpu_get_param(screen->gpu, ETNA_GPU_FEATURES_5, &val)) { - DBG("could not get ETNA_GPU_FEATURES_5"); - goto fail; - } - screen->features[5] = val; - - if (etna_gpu_get_param(screen->gpu, ETNA_GPU_FEATURES_6, &val)) { - DBG("could not get ETNA_GPU_FEATURES_6"); - goto fail; - } - screen->features[6] = val; - - if (etna_gpu_get_param(screen->gpu, ETNA_GPU_FEATURES_7, &val)) { - DBG("could not get ETNA_GPU_FEATURES_7"); - goto fail; - } - screen->features[7] = val; - - if (etna_gpu_get_param(screen->gpu, ETNA_GPU_FEATURES_8, &val)) { - DBG("could not get ETNA_GPU_FEATURES_8"); - goto fail; - } - screen->features[8] = val; - - if (etna_gpu_get_param(screen->gpu, ETNA_GPU_FEATURES_9, &val)) { - DBG("could not get ETNA_GPU_FEATURES_9"); - goto fail; - } - screen->features[9] = val; - - if (etna_gpu_get_param(screen->gpu, ETNA_GPU_FEATURES_10, &val)) { - DBG("could not get ETNA_GPU_FEATURES_10"); - goto fail; - } - screen->features[10] = val; - - if (etna_gpu_get_param(screen->gpu, ETNA_GPU_FEATURES_11, &val)) { - DBG("could not get ETNA_GPU_FEATURES_11"); - goto fail; - } - screen->features[11] = val; - - if (etna_gpu_get_param(screen->gpu, ETNA_GPU_FEATURES_12, &val)) { - DBG("could not get ETNA_GPU_FEATURES_12"); - goto fail; - } - screen->features[12] = val; - if (!etna_get_specs(screen)) goto fail; @@ -1241,17 +1162,17 @@ etna_screen_create(struct etna_device *dev, struct etna_gpu *gpu, /* apply debug options that disable individual features */ if (DBG_ENABLED(ETNA_DBG_NO_EARLY_Z)) - screen->features[viv_chipFeatures] |= chipFeatures_NO_EARLY_Z; + etna_core_disable_feature(screen->info, ETNA_FEATURE_NO_EARLY_Z); if (DBG_ENABLED(ETNA_DBG_NO_TS)) - screen->features[viv_chipFeatures] &= ~chipFeatures_FAST_CLEAR; + etna_core_disable_feature(screen->info, ETNA_FEATURE_FAST_CLEAR); if (DBG_ENABLED(ETNA_DBG_NO_AUTODISABLE)) - screen->features[viv_chipMinorFeatures1] &= ~chipMinorFeatures1_AUTO_DISABLE; + etna_core_disable_feature(screen->info, ETNA_FEATURE_AUTO_DISABLE); if (DBG_ENABLED(ETNA_DBG_NO_SUPERTILE)) screen->specs.can_supertile = 0; if (DBG_ENABLED(ETNA_DBG_NO_SINGLEBUF)) screen->specs.single_buffer = 0; if (!DBG_ENABLED(ETNA_DBG_LINEAR_PE)) - screen->features[viv_chipMinorFeatures2] &= ~chipMinorFeatures2_LINEAR_PE; + etna_core_disable_feature(screen->info, ETNA_FEATURE_LINEAR_PE); pscreen->destroy = etna_screen_destroy; pscreen->get_screen_fd = etna_screen_get_fd; diff --git a/src/gallium/drivers/etnaviv/etnaviv_screen.h b/src/gallium/drivers/etnaviv/etnaviv_screen.h index 5867c9dcbea..2bdf257658d 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_screen.h +++ b/src/gallium/drivers/etnaviv/etnaviv_screen.h @@ -41,36 +41,9 @@ #include "util/u_helpers.h" #include "util/u_queue.h" #include "compiler/nir/nir.h" -#include "hw/common.xml.h" struct etna_bo; -/* Enum with indices for each of the feature words */ -enum viv_features_word { - viv_chipFeatures = 0, - viv_chipMinorFeatures0 = 1, - viv_chipMinorFeatures1 = 2, - viv_chipMinorFeatures2 = 3, - viv_chipMinorFeatures3 = 4, - viv_chipMinorFeatures4 = 5, - viv_chipMinorFeatures5 = 6, - viv_chipMinorFeatures6 = 7, - viv_chipMinorFeatures7 = 8, - viv_chipMinorFeatures8 = 9, - viv_chipMinorFeatures9 = 10, - viv_chipMinorFeatures10 = 11, - viv_chipMinorFeatures11 = 12, - viv_chipMinorFeatures12 = 13, - VIV_FEATURES_WORD_COUNT /* Must be last */ -}; - -/** Convenience macro to probe features from state.xml.h: - * _VIV_FEATURE(chipFeatures, FAST_CLEAR) - * _VIV_FEATURE(chipMinorFeatures1, AUTO_DISABLE) - */ -#define _VIV_FEATURE(screen, word, feature) \ - ((screen->features[viv_ ## word] & (word ## _ ## feature)) != 0) - struct etna_screen { struct pipe_screen base; @@ -84,7 +57,6 @@ struct etna_screen { struct slab_parent_pool transfer_pool; struct etna_core_info *info; - uint32_t features[VIV_FEATURES_WORD_COUNT]; struct etna_specs specs; @@ -103,123 +75,7 @@ struct etna_screen { static inline bool VIV_FEATURE(const struct etna_screen *screen, enum etna_feature feature) { - switch (feature) { - case ETNA_FEATURE_FAST_CLEAR: - return _VIV_FEATURE(screen, chipFeatures, FAST_CLEAR); - case ETNA_FEATURE_32_BIT_INDICES: - return _VIV_FEATURE(screen, chipFeatures, 32_BIT_INDICES); - case ETNA_FEATURE_MSAA: - return _VIV_FEATURE(screen, chipFeatures, MSAA); - case ETNA_FEATURE_DXT_TEXTURE_COMPRESSION: - return _VIV_FEATURE(screen, chipFeatures, DXT_TEXTURE_COMPRESSION); - case ETNA_FEATURE_ETC1_TEXTURE_COMPRESSION: - return _VIV_FEATURE(screen, chipFeatures, ETC1_TEXTURE_COMPRESSION); - case ETNA_FEATURE_NO_EARLY_Z: - return _VIV_FEATURE(screen, chipFeatures, NO_EARLY_Z); - - case ETNA_FEATURE_MC20: - return _VIV_FEATURE(screen, chipMinorFeatures0, MC20); - case ETNA_FEATURE_RENDERTARGET_8K: - return _VIV_FEATURE(screen, chipMinorFeatures0, RENDERTARGET_8K); - case ETNA_FEATURE_TEXTURE_8K: - return _VIV_FEATURE(screen, chipMinorFeatures0, TEXTURE_8K); - case ETNA_FEATURE_HAS_SIGN_FLOOR_CEIL: - return _VIV_FEATURE(screen, chipMinorFeatures0, HAS_SIGN_FLOOR_CEIL); - case ETNA_FEATURE_HAS_SQRT_TRIG: - return _VIV_FEATURE(screen, chipMinorFeatures0, HAS_SQRT_TRIG); - case ETNA_FEATURE_2BITPERTILE: - return _VIV_FEATURE(screen, chipMinorFeatures0, 2BITPERTILE); - case ETNA_FEATURE_SUPER_TILED: - return _VIV_FEATURE(screen, chipMinorFeatures0, SUPER_TILED); - - case ETNA_FEATURE_AUTO_DISABLE: - return _VIV_FEATURE(screen, chipMinorFeatures1, AUTO_DISABLE); - case ETNA_FEATURE_TEXTURE_HALIGN: - return _VIV_FEATURE(screen, chipMinorFeatures1, TEXTURE_HALIGN); - case ETNA_FEATURE_MMU_VERSION: - return _VIV_FEATURE(screen, chipMinorFeatures1, MMU_VERSION); - case ETNA_FEATURE_HALF_FLOAT: - return _VIV_FEATURE(screen, chipMinorFeatures1, HALF_FLOAT); - case ETNA_FEATURE_WIDE_LINE: - return _VIV_FEATURE(screen, chipMinorFeatures1, WIDE_LINE); - case ETNA_FEATURE_HALTI0: - return _VIV_FEATURE(screen, chipMinorFeatures1, HALTI0); - case ETNA_FEATURE_NON_POWER_OF_TWO: - return _VIV_FEATURE(screen, chipMinorFeatures1, NON_POWER_OF_TWO); - case ETNA_FEATURE_LINEAR_TEXTURE_SUPPORT: - return _VIV_FEATURE(screen, chipMinorFeatures1, LINEAR_TEXTURE_SUPPORT); - - case ETNA_FEATURE_LINEAR_PE: - return _VIV_FEATURE(screen, chipMinorFeatures2, LINEAR_PE); - case ETNA_FEATURE_SUPERTILED_TEXTURE: - return _VIV_FEATURE(screen, chipMinorFeatures2, SUPERTILED_TEXTURE); - case ETNA_FEATURE_LOGIC_OP: - return _VIV_FEATURE(screen, chipMinorFeatures2, LOGIC_OP); - case ETNA_FEATURE_HALTI1: - return _VIV_FEATURE(screen, chipMinorFeatures2, HALTI1); - case ETNA_FEATURE_SEAMLESS_CUBE_MAP: - return _VIV_FEATURE(screen, chipMinorFeatures2, SEAMLESS_CUBE_MAP); - case ETNA_FEATURE_LINE_LOOP: - return _VIV_FEATURE(screen, chipMinorFeatures2, LINE_LOOP); - case ETNA_FEATURE_TEXTURE_TILED_READ: - return _VIV_FEATURE(screen, chipMinorFeatures2, TEXTURE_TILED_READ); - case ETNA_FEATURE_BUG_FIXES8: - return _VIV_FEATURE(screen, chipMinorFeatures2, BUG_FIXES8); - - case ETNA_FEATURE_PE_DITHER_FIX: - return _VIV_FEATURE(screen, chipMinorFeatures3, PE_DITHER_FIX); - case ETNA_FEATURE_INSTRUCTION_CACHE: - return _VIV_FEATURE(screen, chipMinorFeatures3, INSTRUCTION_CACHE); - case ETNA_FEATURE_HAS_FAST_TRANSCENDENTALS: - return _VIV_FEATURE(screen, chipMinorFeatures3, HAS_FAST_TRANSCENDENTALS); - - case ETNA_FEATURE_SMALL_MSAA: - return _VIV_FEATURE(screen, chipMinorFeatures4, SMALL_MSAA); - case ETNA_FEATURE_BUG_FIXES18: - return _VIV_FEATURE(screen, chipMinorFeatures4, BUG_FIXES18); - case ETNA_FEATURE_TEXTURE_ASTC: - return _VIV_FEATURE(screen, chipMinorFeatures4, TEXTURE_ASTC); - case ETNA_FEATURE_SINGLE_BUFFER: - return _VIV_FEATURE(screen, chipMinorFeatures4, SINGLE_BUFFER); - case ETNA_FEATURE_HALTI2: - return _VIV_FEATURE(screen, chipMinorFeatures4, HALTI2); - - case ETNA_FEATURE_BLT_ENGINE: - return _VIV_FEATURE(screen, chipMinorFeatures5, BLT_ENGINE); - case ETNA_FEATURE_HALTI3: - return _VIV_FEATURE(screen, chipMinorFeatures5, HALTI3); - case ETNA_FEATURE_HALTI4: - return _VIV_FEATURE(screen, chipMinorFeatures5, HALTI4); - case ETNA_FEATURE_HALTI5: - return _VIV_FEATURE(screen, chipMinorFeatures5, HALTI5); - case ETNA_FEATURE_RA_WRITE_DEPTH: - return _VIV_FEATURE(screen, chipMinorFeatures5, RA_WRITE_DEPTH); - - case ETNA_FEATURE_CACHE128B256BPERLINE: - return _VIV_FEATURE(screen, chipMinorFeatures6, CACHE128B256BPERLINE); - case ETNA_FEATURE_NEW_GPIPE: - return _VIV_FEATURE(screen, chipMinorFeatures6, NEW_GPIPE); - case ETNA_FEATURE_NO_ASTC: - return _VIV_FEATURE(screen, chipMinorFeatures6, NO_ASTC); - case ETNA_FEATURE_V4_COMPRESSION: - return _VIV_FEATURE(screen, chipMinorFeatures6, V4_COMPRESSION); - - case ETNA_FEATURE_RS_NEW_BASEADDR: - return _VIV_FEATURE(screen, chipMinorFeatures7, RS_NEW_BASEADDR); - case ETNA_FEATURE_PE_NO_ALPHA_TEST: - return _VIV_FEATURE(screen, chipMinorFeatures7, PE_NO_ALPHA_TEST); - - case ETNA_FEATURE_SH_NO_ONECONST_LIMIT: - return _VIV_FEATURE(screen, chipMinorFeatures8, SH_NO_ONECONST_LIMIT); - - case ETNA_FEATURE_DEC400: - return _VIV_FEATURE(screen, chipMinorFeatures10, DEC400); - - default: - break; - } - - unreachable("invalid feature enum value"); + return etna_core_has_feature(screen->info, feature); } static inline struct etna_screen *