etnaviv: Switch to etna_core APIs

This removes the in-driver feature handling and switches to the one from
common.

Signed-off-by: Christian Gmeiner <cgmeiner@igalia.com>
Reviewed-by: Lucas Stach <l.stach@pengutronix.de>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28574>
This commit is contained in:
Christian Gmeiner
2024-04-01 11:43:21 +02:00
committed by Marge Bot
parent 358e1f10c5
commit d600b45ccc
2 changed files with 6 additions and 229 deletions

View File

@@ -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;

View File

@@ -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 *