etnaviv: remove etna_screen_get_param and etna_screen_get_paramf

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Christian Gmeiner <cgmeiner@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32955>
This commit is contained in:
Qiang Yu 2025-01-07 16:52:50 +08:00 committed by Marge Bot
parent 90594a00a9
commit efdbd4c84c

View file

@ -149,228 +149,6 @@ etna_screen_get_device_vendor(struct pipe_screen *pscreen)
return "Vivante";
}
static int
etna_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
{
struct etna_screen *screen = etna_screen(pscreen);
switch (param) {
/* Supported features (boolean caps). */
case PIPE_CAP_BLEND_EQUATION_SEPARATE:
case PIPE_CAP_FS_COORD_ORIGIN_UPPER_LEFT:
case PIPE_CAP_FS_COORD_PIXEL_CENTER_HALF_INTEGER:
case PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD:
case PIPE_CAP_FRAGMENT_SHADER_DERIVATIVES:
case PIPE_CAP_TEXTURE_BARRIER:
case PIPE_CAP_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION:
case PIPE_CAP_TGSI_TEXCOORD:
case PIPE_CAP_VERTEX_COLOR_UNCLAMPED:
case PIPE_CAP_MIXED_COLOR_DEPTH_BITS:
case PIPE_CAP_MIXED_FRAMEBUFFER_SIZES:
case PIPE_CAP_STRING_MARKER:
case PIPE_CAP_FRONTEND_NOOP:
case PIPE_CAP_FRAMEBUFFER_NO_ATTACHMENT:
return 1;
case PIPE_CAP_VERTEX_INPUT_ALIGNMENT:
return PIPE_VERTEX_INPUT_ALIGNMENT_4BYTE;
case PIPE_CAP_NATIVE_FENCE_FD:
return screen->drm_version >= ETNA_DRM_VERSION_FENCE_FD;
case PIPE_CAP_FS_POSITION_IS_SYSVAL:
case PIPE_CAP_FS_FACE_IS_INTEGER_SYSVAL: /* note: not integer */
return 1;
case PIPE_CAP_FS_POINT_IS_SYSVAL:
return 0;
/* Memory */
case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT:
return 256;
case PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT:
return 4096;
case PIPE_CAP_NPOT_TEXTURES:
return true; /* VIV_FEATURE(priv->dev, chipMinorFeatures1,
NON_POWER_OF_TWO); */
case PIPE_CAP_ANISOTROPIC_FILTER:
case PIPE_CAP_TEXTURE_SWIZZLE:
case PIPE_CAP_PRIMITIVE_RESTART:
case PIPE_CAP_PRIMITIVE_RESTART_FIXED_INDEX:
return VIV_FEATURE(screen, ETNA_FEATURE_HALTI0);
case PIPE_CAP_ALPHA_TEST:
return !VIV_FEATURE(screen, ETNA_FEATURE_PE_NO_ALPHA_TEST);
case PIPE_CAP_DRAW_INDIRECT:
return VIV_FEATURE(screen, ETNA_FEATURE_HALTI5);
/* Unsupported features. */
case PIPE_CAP_TEXTURE_BUFFER_OFFSET_ALIGNMENT:
case PIPE_CAP_TEXRECT:
return 0;
/* Stream output. */
case PIPE_CAP_MAX_STREAM_OUTPUT_BUFFERS:
return DBG_ENABLED(ETNA_DBG_DEQP) ? 4 : 0;
case PIPE_CAP_MAX_STREAM_OUTPUT_SEPARATE_COMPONENTS:
case PIPE_CAP_MAX_STREAM_OUTPUT_INTERLEAVED_COMPONENTS:
return 0;
case PIPE_CAP_MAX_VERTEX_ATTRIB_STRIDE:
return 128;
case PIPE_CAP_MAX_VERTEX_ELEMENT_SRC_OFFSET:
return 255;
case PIPE_CAP_MAX_VERTEX_BUFFERS:
return screen->info->gpu.stream_count;
case PIPE_CAP_VS_INSTANCEID:
case PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR:
return VIV_FEATURE(screen, ETNA_FEATURE_HALTI2);
/* Texturing. */
case PIPE_CAP_TEXTURE_HALF_FLOAT_LINEAR:
return VIV_FEATURE(screen, ETNA_FEATURE_HALF_FLOAT);
case PIPE_CAP_TEXTURE_SHADOW_MAP:
return 1;
case PIPE_CAP_MAX_TEXTURE_2D_SIZE:
return screen->specs.max_texture_size;
case PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS: /* TODO: verify */
return screen->info->halti >= 0 ? screen->specs.max_texture_size : 0;
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
if (screen->info->halti < 0)
return 0;
FALLTHROUGH;
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
{
int log2_max_tex_size = util_last_bit(screen->specs.max_texture_size);
assert(log2_max_tex_size > 0);
return log2_max_tex_size;
}
case PIPE_CAP_MIN_TEXTURE_GATHER_OFFSET:
case PIPE_CAP_MIN_TEXEL_OFFSET:
return -8;
case PIPE_CAP_MAX_TEXTURE_GATHER_OFFSET:
case PIPE_CAP_MAX_TEXEL_OFFSET:
return 7;
case PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE:
return screen->specs.seamless_cube_map;
/* Render targets. */
case PIPE_CAP_MAX_RENDER_TARGETS: {
/* If the GPU supports float formats we need to reserve half of
* the available render targets for emulation proposes.
*/
if (VIV_FEATURE(screen, ETNA_FEATURE_HALTI2))
return screen->specs.num_rts / 2;
return screen->specs.num_rts;
}
case PIPE_CAP_INDEP_BLEND_ENABLE:
case PIPE_CAP_INDEP_BLEND_FUNC:
return screen->info->halti >= 5;
/* Queries. */
case PIPE_CAP_OCCLUSION_QUERY:
case PIPE_CAP_CONDITIONAL_RENDER:
case PIPE_CAP_CONDITIONAL_RENDER_INVERTED:
return VIV_FEATURE(screen, ETNA_FEATURE_HALTI0);
/* Preferences */
case PIPE_CAP_TEXTURE_TRANSFER_MODES:
return 0;
case PIPE_CAP_MAX_TEXTURE_UPLOAD_MEMORY_BUDGET: {
/* etnaviv is being run on systems as small as 256MB total RAM so
* we need to provide a sane value for such a device. Limit the
* memory budget to min(~3% of pyhiscal memory, 64MB).
*
* a simple divison by 32 provides the numbers we want.
* 256MB / 32 = 8MB
* 2048MB / 32 = 64MB
*/
uint64_t system_memory;
if (!os_get_total_physical_memory(&system_memory))
system_memory = (uint64_t)4096 << 20;
return MIN2(system_memory / 32, 64 * 1024 * 1024);
}
case PIPE_CAP_MAX_VARYINGS:
return screen->specs.max_varyings;
case PIPE_CAP_SUPPORTED_PRIM_MODES:
case PIPE_CAP_SUPPORTED_PRIM_MODES_WITH_RESTART: {
/* Generate the bitmask of supported draw primitives. */
uint32_t modes = 1 << MESA_PRIM_POINTS |
1 << MESA_PRIM_LINES |
1 << MESA_PRIM_LINE_STRIP |
1 << MESA_PRIM_TRIANGLES |
1 << MESA_PRIM_TRIANGLE_FAN;
/* TODO: The bug relates only to indexed draws, but here we signal
* that there is no support for triangle strips at all. This should
* be refined.
*/
if (VIV_FEATURE(screen, ETNA_FEATURE_BUG_FIXES8))
modes |= 1 << MESA_PRIM_TRIANGLE_STRIP;
if (VIV_FEATURE(screen, ETNA_FEATURE_LINE_LOOP))
modes |= 1 << MESA_PRIM_LINE_LOOP;
return modes;
}
case PIPE_CAP_PCI_GROUP:
case PIPE_CAP_PCI_BUS:
case PIPE_CAP_PCI_DEVICE:
case PIPE_CAP_PCI_FUNCTION:
return 0;
case PIPE_CAP_ACCELERATED:
return 1;
case PIPE_CAP_VIDEO_MEMORY:
return 0;
case PIPE_CAP_UMA:
return 1;
case PIPE_CAP_GRAPHICS:
return !VIV_FEATURE(screen, ETNA_FEATURE_COMPUTE_ONLY);
default:
return u_pipe_screen_get_param_defaults(pscreen, param);
}
}
static float
etna_screen_get_paramf(struct pipe_screen *pscreen, enum pipe_capf param)
{
struct etna_screen *screen = etna_screen(pscreen);
switch (param) {
case PIPE_CAPF_MIN_LINE_WIDTH:
case PIPE_CAPF_MIN_LINE_WIDTH_AA:
case PIPE_CAPF_MIN_POINT_SIZE:
case PIPE_CAPF_MIN_POINT_SIZE_AA:
return 1;
case PIPE_CAPF_POINT_SIZE_GRANULARITY:
case PIPE_CAPF_LINE_WIDTH_GRANULARITY:
return 0.1;
case PIPE_CAPF_MAX_LINE_WIDTH:
case PIPE_CAPF_MAX_LINE_WIDTH_AA:
case PIPE_CAPF_MAX_POINT_SIZE:
case PIPE_CAPF_MAX_POINT_SIZE_AA:
return 8192.0f;
case PIPE_CAPF_MAX_TEXTURE_ANISOTROPY:
return 16.0f;
case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS:
return util_last_bit(screen->specs.max_texture_size);
case PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE:
case PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE:
case PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY:
return 0.0f;
}
debug_printf("unknown paramf %d", param);
return 0;
}
static int
etna_screen_get_shader_param(struct pipe_screen *pscreen,
enum pipe_shader_type shader,
@ -1288,8 +1066,6 @@ etna_screen_create(struct etna_device *dev, struct etna_gpu *gpu,
pscreen->destroy = etna_screen_destroy;
pscreen->get_screen_fd = etna_screen_get_fd;
pscreen->get_param = etna_screen_get_param;
pscreen->get_paramf = etna_screen_get_paramf;
pscreen->get_shader_param = etna_screen_get_shader_param;
pscreen->get_compiler_options = etna_get_compiler_options;
pscreen->get_disk_shader_cache = etna_get_disk_shader_cache;