diff --git a/src/gallium/drivers/etnaviv/etnaviv_screen.c b/src/gallium/drivers/etnaviv/etnaviv_screen.c index 04524fdb468..3d5faa6a1ac 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_screen.c +++ b/src/gallium/drivers/etnaviv/etnaviv_screen.c @@ -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;