From 2192e620bb0c68b75ff45165d0b117c7ecb77268 Mon Sep 17 00:00:00 2001 From: Christian Gmeiner Date: Mon, 26 Feb 2024 09:07:25 +0100 Subject: [PATCH] etnaviv: hwdb: Add etna_query_feature_db(..) This function is used to - find a database entry - fill our etna_device_info struct If no database entry is found we just return false. Signed-off-by: Christian Gmeiner Reviewed-by: Lucas Stach Part-of: --- src/etnaviv/hwdb/.clang-format | 7 +++ src/etnaviv/hwdb/etna_hwdb.c | 88 ++++++++++++++++++++++++++++++++++ src/etnaviv/hwdb/etna_hwdb.h | 12 +++++ src/etnaviv/hwdb/meson.build | 45 +++++++++++++++++ src/etnaviv/meson.build | 1 + 5 files changed, 153 insertions(+) create mode 100644 src/etnaviv/hwdb/.clang-format create mode 100644 src/etnaviv/hwdb/etna_hwdb.c create mode 100644 src/etnaviv/hwdb/etna_hwdb.h create mode 100644 src/etnaviv/hwdb/meson.build diff --git a/src/etnaviv/hwdb/.clang-format b/src/etnaviv/hwdb/.clang-format new file mode 100644 index 00000000000..b1a43d91fe2 --- /dev/null +++ b/src/etnaviv/hwdb/.clang-format @@ -0,0 +1,7 @@ + +BasedOnStyle: InheritParentConfig +DisableFormat: false + +AlignConsecutiveBitFields: true +ColumnLimit: 100 +BreakStringLiterals: false diff --git a/src/etnaviv/hwdb/etna_hwdb.c b/src/etnaviv/hwdb/etna_hwdb.c new file mode 100644 index 00000000000..f79bc225995 --- /dev/null +++ b/src/etnaviv/hwdb/etna_hwdb.c @@ -0,0 +1,88 @@ +/* + * Copyright © 2024 Igalia S.L. + * SPDX-License-Identifier: MIT + */ + +#include "etna_hwdb.h" + +#include "etna_core_info.h" +#include "hwdb.h" + +/* clang-format off */ +#define ETNA_FEATURE(member, feature) \ + if (db->member) \ + etna_core_enable_feature(info, ETNA_FEATURE_##feature) +/* clang-format on */ + +bool +etna_query_feature_db(struct etna_core_info *info) +{ + gcsFEATURE_DATABASE *db = gcQueryFeatureDB(info->model, info->revision, info->product_id, + info->eco_id, info->customer_id); + + if (!db) + return false; + + ETNA_FEATURE(REG_FastClear, FAST_CLEAR); + ETNA_FEATURE(REG_FE20BitIndex, 32_BIT_INDICES); + ETNA_FEATURE(REG_MSAA, MSAA); + ETNA_FEATURE(REG_DXTTextureCompression, DXT_TEXTURE_COMPRESSION); + ETNA_FEATURE(REG_ETC1TextureCompression, ETC1_TEXTURE_COMPRESSION); + ETNA_FEATURE(REG_NoEZ, NO_EARLY_Z); + + ETNA_FEATURE(REG_MC20, MC20); + ETNA_FEATURE(REG_Render8K, RENDERTARGET_8K); + ETNA_FEATURE(REG_Texture8K, TEXTURE_8K); + ETNA_FEATURE(REG_ExtraShaderInstructions0, HAS_SIGN_FLOOR_CEIL); + ETNA_FEATURE(REG_ExtraShaderInstructions1, HAS_SQRT_TRIG); + ETNA_FEATURE(REG_TileStatus2Bits, 2BITPERTILE); + ETNA_FEATURE(REG_SuperTiled32x32, SUPER_TILED); + + ETNA_FEATURE(REG_CorrectAutoDisable1, AUTO_DISABLE); + ETNA_FEATURE(REG_TextureHorizontalAlignmentSelect, TEXTURE_HALIGN); + ETNA_FEATURE(REG_MMU, MMU_VERSION); + ETNA_FEATURE(REG_HalfFloatPipe, HALF_FLOAT); + ETNA_FEATURE(REG_WideLine, WIDE_LINE); + ETNA_FEATURE(REG_Halti0, HALTI0); + ETNA_FEATURE(REG_NonPowerOfTwo, NON_POWER_OF_TWO); + ETNA_FEATURE(REG_LinearTextureSupport, LINEAR_TEXTURE_SUPPORT); + + ETNA_FEATURE(REG_LinearPE, LINEAR_PE); + ETNA_FEATURE(REG_SuperTiledTexture, SUPERTILED_TEXTURE); + ETNA_FEATURE(REG_LogicOp, LOGIC_OP); + ETNA_FEATURE(REG_Halti1, HALTI1); + ETNA_FEATURE(REG_SeamlessCubeMap, SEAMLESS_CUBE_MAP); + ETNA_FEATURE(REG_LineLoop, LINE_LOOP); + ETNA_FEATURE(REG_TextureTileStatus, TEXTURE_TILED_READ); + ETNA_FEATURE(REG_BugFixes8, BUG_FIXES8); + + ETNA_FEATURE(REG_BugFixes15, PE_DITHER_FIX); + ETNA_FEATURE(REG_InstructionCache, INSTRUCTION_CACHE); + ETNA_FEATURE(REG_ExtraShaderInstructions2, HAS_FAST_TRANSCENDENTALS); + + ETNA_FEATURE(REG_SmallMSAA, SMALL_MSAA); + ETNA_FEATURE(REG_BugFixes18, BUG_FIXES18); + ETNA_FEATURE(REG_TXEnhancements4, TEXTURE_ASTC); + ETNA_FEATURE(REG_PEEnhancements3, SINGLE_BUFFER); + ETNA_FEATURE(REG_Halti2, HALTI2); + + ETNA_FEATURE(REG_BltEngine, BLT_ENGINE); + ETNA_FEATURE(REG_Halti3, HALTI3); + ETNA_FEATURE(REG_Halti4, HALTI4); + ETNA_FEATURE(REG_Halti5, HALTI5); + ETNA_FEATURE(REG_RAWriteDepth, RA_WRITE_DEPTH); + + ETNA_FEATURE(CACHE128B256BPERLINE, CACHE128B256BPERLINE); + ETNA_FEATURE(NEW_GPIPE, NEW_GPIPE); + ETNA_FEATURE(NO_ASTC, NO_ASTC); + ETNA_FEATURE(V4Compression, V4_COMPRESSION); + + ETNA_FEATURE(RS_NEW_BASEADDR, RS_NEW_BASEADDR); + ETNA_FEATURE(PE_NO_ALPHA_TEST, PE_NO_ALPHA_TEST); + + ETNA_FEATURE(SH_NO_ONECONST_LIMIT, SH_NO_ONECONST_LIMIT); + + ETNA_FEATURE(DEC400, DEC400); + + return true; +} diff --git a/src/etnaviv/hwdb/etna_hwdb.h b/src/etnaviv/hwdb/etna_hwdb.h new file mode 100644 index 00000000000..22a75c6a060 --- /dev/null +++ b/src/etnaviv/hwdb/etna_hwdb.h @@ -0,0 +1,12 @@ +/* + * Copyright © 2024 Igalia S.L. + * SPDX-License-Identifier: MIT + */ + +#pragma once + +#include + +struct etna_core_info; + +bool etna_query_feature_db(struct etna_core_info *info); diff --git a/src/etnaviv/hwdb/meson.build b/src/etnaviv/hwdb/meson.build new file mode 100644 index 00000000000..175deb8581e --- /dev/null +++ b/src/etnaviv/hwdb/meson.build @@ -0,0 +1,45 @@ +# +# Copyright © 2024 Igalia S.L. +# SPDX-License-Identifier: MIT +# + +prog_python = import('python').find_installation('python3') +has_pycparser = run_command( + prog_python, '-c', + ''' +try: + from packaging.version import Version +except: + from distutils.version import StrictVersion as Version +import pycparser +assert Version(pycparser.__version__) >= Version("2.20") + ''', check: false) +if has_pycparser.returncode() != 0 + error('Python (3.x) pycparser module >= 2.20 required to build mesa.') +endif + +prog_hwdb = files('hwdb.h.py') +hwdb_h = custom_target( + 'hwdb.h', + input: [ + 'amlogic/gc_feature_database.h', + 'nxp/gc_feature_database.h', + 'st/gc_feature_database.h' + ], + output: 'hwdb.h', + command: [prog_python, prog_hwdb, '--output', '@OUTPUT@', '@INPUT@'], +) + +libetnaviv_hwdb_files = [ + hwdb_h, + 'etna_hwdb.c', +] + +libetnaviv_hwdb = static_library( + 'etnaviv_hwdb', + libetnaviv_hwdb_files, + dependencies: idep_etna_common, + c_args : [no_override_init_args], + gnu_symbol_visibility : 'hidden', + build_by_default : false, +) diff --git a/src/etnaviv/meson.build b/src/etnaviv/meson.build index 5fcd884079a..7ccffd080aa 100644 --- a/src/etnaviv/meson.build +++ b/src/etnaviv/meson.build @@ -21,6 +21,7 @@ inc_etnaviv = include_directories(['.']) subdir('common') +subdir('hwdb') subdir('drm') subdir('isa')