static struct feature vivante_chipFeatures[] __maybe_unused = { #define FEATURE(x) { chipFeatures_##x, #x } FEATURE(FAST_CLEAR), FEATURE(SPECIAL_ANTI_ALIASING), FEATURE(PIPE_3D), FEATURE(DXT_TEXTURE_COMPRESSION), FEATURE(DEBUG_MODE), FEATURE(Z_COMPRESSION), FEATURE(YUV420_SCALER), FEATURE(MSAA), FEATURE(DC), FEATURE(PIPE_2D), FEATURE(ETC1_TEXTURE_COMPRESSION), FEATURE(FAST_SCALER), FEATURE(HIGH_DYNAMIC_RANGE), FEATURE(YUV420_TILER), FEATURE(MODULE_CG), FEATURE(MIN_AREA), FEATURE(NO_EARLY_Z), FEATURE(NO_422_TEXTURE), FEATURE(BUFFER_INTERLEAVING), FEATURE(BYTE_WRITE_2D), FEATURE(NO_SCALER), FEATURE(YUY2_AVERAGING), FEATURE(HALF_PE_CACHE), FEATURE(HALF_TX_CACHE), FEATURE(YUY2_RENDER_TARGET), FEATURE(MEM32), FEATURE(PIPE_VG), FEATURE(VGTS), FEATURE(FE20), FEATURE(BYTE_WRITE_3D), FEATURE(RS_YUV_TARGET), FEATURE(32_BIT_INDICES), #undef FEATURE }; static struct feature vivante_chipMinorFeatures0[] __maybe_unused = { #define FEATURE(x) { chipMinorFeatures0_##x, #x } FEATURE(FLIP_Y), FEATURE(DUAL_RETURN_BUS), FEATURE(ENDIANNESS_CONFIG), FEATURE(TEXTURE_8K), FEATURE(CORRECT_TEXTURE_CONVERTER), FEATURE(SPECIAL_MSAA_LOD), FEATURE(FAST_CLEAR_FLUSH), FEATURE(2DPE20), FEATURE(CORRECT_AUTO_DISABLE), FEATURE(RENDERTARGET_8K), FEATURE(2BITPERTILE), FEATURE(SEPARATE_TILE_STATUS_WHEN_INTERLEAVED), FEATURE(SUPER_TILED), FEATURE(VG_20), FEATURE(TS_EXTENDED_COMMANDS), FEATURE(COMPRESSION_FIFO_FIXED), FEATURE(HAS_SIGN_FLOOR_CEIL), FEATURE(VG_FILTER), FEATURE(VG_21), FEATURE(SHADER_HAS_W), FEATURE(HAS_SQRT_TRIG), FEATURE(MORE_MINOR_FEATURES), FEATURE(MC20), FEATURE(MSAA_SIDEBAND), FEATURE(BUG_FIXES0), FEATURE(VAA), FEATURE(BYPASS_IN_MSAA), FEATURE(HZ), FEATURE(NEW_TEXTURE), FEATURE(2D_A8_TARGET), FEATURE(CORRECT_STENCIL), FEATURE(ENHANCE_VR), #undef FEATURE }; static struct feature vivante_chipMinorFeatures1[] __maybe_unused = { #define FEATURE(x) { chipMinorFeatures1_##x, #x } FEATURE(RSUV_SWIZZLE), FEATURE(V2_COMPRESSION), FEATURE(VG_DOUBLE_BUFFER), FEATURE(EXTRA_EVENT_STATES), FEATURE(NO_STRIPING_NEEDED), FEATURE(TEXTURE_STRIDE), FEATURE(BUG_FIXES3), FEATURE(AUTO_DISABLE), FEATURE(AUTO_RESTART_TS), FEATURE(DISABLE_PE_GATING), FEATURE(L2_WINDOWING), FEATURE(HALF_FLOAT), FEATURE(PIXEL_DITHER), FEATURE(TWO_STENCIL_REFERENCE), FEATURE(EXTENDED_PIXEL_FORMAT), FEATURE(CORRECT_MIN_MAX_DEPTH), FEATURE(2D_DITHER), FEATURE(BUG_FIXES5), FEATURE(NEW_2D), FEATURE(NEW_FP), FEATURE(TEXTURE_HALIGN), FEATURE(NON_POWER_OF_TWO), FEATURE(LINEAR_TEXTURE_SUPPORT), FEATURE(HALTI0), FEATURE(CORRECT_OVERFLOW_VG), FEATURE(NEGATIVE_LOG_FIX), FEATURE(RESOLVE_OFFSET), FEATURE(OK_TO_GATE_AXI_CLOCK), FEATURE(MMU_VERSION), FEATURE(WIDE_LINE), FEATURE(BUG_FIXES6), FEATURE(FC_FLUSH_STALL), #undef FEATURE }; static struct feature vivante_chipMinorFeatures2[] __maybe_unused = { #define FEATURE(x) { chipMinorFeatures2_##x, #x } FEATURE(LINE_LOOP), FEATURE(LOGIC_OP), FEATURE(UNK2), FEATURE(SUPERTILED_TEXTURE), FEATURE(UNK4), FEATURE(RECT_PRIMITIVE), FEATURE(COMPOSITION), FEATURE(CORRECT_AUTO_DISABLE_COUNT), FEATURE(UNK8), FEATURE(UNK9), FEATURE(UNK10), FEATURE(HALTI1), FEATURE(UNK12), FEATURE(UNK13), FEATURE(UNK14), FEATURE(EXTRA_TEXTURE_STATE), FEATURE(FULL_DIRECTFB), FEATURE(2D_TILING), FEATURE(THREAD_WALKER_IN_PS), FEATURE(TILE_FILLER), FEATURE(UNK20), FEATURE(2D_MULTI_SOURCE_BLIT), FEATURE(UNK22), FEATURE(UNK23), FEATURE(UNK24), FEATURE(MIXED_STREAMS), FEATURE(2D_420_L2CACHE), FEATURE(UNK27), FEATURE(2D_NO_INDEX8_BRUSH), FEATURE(TEXTURE_TILED_READ), FEATURE(UNK30), FEATURE(UNK31), #undef FEATURE }; static struct feature vivante_chipMinorFeatures3[] __maybe_unused = { #define FEATURE(x) { chipMinorFeatures3_##x, #x } FEATURE(ROTATION_STALL_FIX), FEATURE(UNK1), FEATURE(2D_MULTI_SOURCE_BLT_EX), FEATURE(UNK3), FEATURE(UNK4), FEATURE(UNK5), FEATURE(UNK6), FEATURE(UNK7), FEATURE(FAST_MSAA), FEATURE(UNK9), FEATURE(BUG_FIXES10), FEATURE(UNK11), FEATURE(BUG_FIXES11), FEATURE(UNK13), FEATURE(UNK14), FEATURE(UNK15), FEATURE(UNK16), FEATURE(UNK17), FEATURE(ACE), FEATURE(UNK19), FEATURE(UNK20), FEATURE(UNK21), FEATURE(UNK22), FEATURE(UNK23), FEATURE(UNK24), FEATURE(UNK25), FEATURE(NEW_HZ), FEATURE(UNK27), FEATURE(UNK28), FEATURE(UNK29), FEATURE(UNK30), FEATURE(UNK31), #undef FEATURE }; static struct feature vivante_chipMinorFeatures4[] __maybe_unused = { #define FEATURE(x) { chipMinorFeatures4_##x, #x } FEATURE(UNK0), FEATURE(UNK1), FEATURE(UNK2), FEATURE(UNK3), FEATURE(UNK4), FEATURE(UNK5), FEATURE(UNK6), FEATURE(UNK7), FEATURE(UNK8), FEATURE(UNK9), FEATURE(UNK10), FEATURE(UNK11), FEATURE(UNK12), FEATURE(UNK13), FEATURE(UNK14), FEATURE(UNK15), FEATURE(HALTI2), FEATURE(UNK17), FEATURE(SMALL_MSAA), FEATURE(UNK19), FEATURE(UNK20), FEATURE(UNK21), FEATURE(UNK22), FEATURE(UNK23), FEATURE(UNK24), FEATURE(UNK25), FEATURE(UNK26), FEATURE(UNK27), FEATURE(UNK28), FEATURE(UNK29), FEATURE(UNK30), FEATURE(UNK31), #undef FEATURE }; static struct feature vivante_chipMinorFeatures5[] __maybe_unused = { #define FEATURE(x) { chipMinorFeatures5_##x, #x } FEATURE(UNK0), FEATURE(UNK1), FEATURE(UNK2), FEATURE(UNK3), FEATURE(UNK4), FEATURE(UNK5), FEATURE(UNK6), FEATURE(UNK7), FEATURE(UNK8), FEATURE(HALTI3), FEATURE(UNK10), FEATURE(UNK11), FEATURE(UNK12), FEATURE(UNK13), FEATURE(UNK14), FEATURE(UNK15), FEATURE(UNK16), FEATURE(UNK17), FEATURE(UNK18), FEATURE(UNK19), FEATURE(UNK20), FEATURE(UNK21), FEATURE(UNK22), FEATURE(UNK23), FEATURE(UNK24), FEATURE(UNK25), FEATURE(UNK26), FEATURE(UNK27), FEATURE(UNK28), FEATURE(UNK29), FEATURE(UNK30), FEATURE(UNK31), #undef FEATURE };