mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 22:08:26 +02:00
etnaviv: init shader caps
Acked-by: Alyssa Rosenzweig <alyssa@rosenzweig.io> Acked-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/33176>
This commit is contained in:
parent
332502d9a2
commit
99605fb3a8
1 changed files with 56 additions and 0 deletions
|
|
@ -240,6 +240,61 @@ etna_screen_get_shader_param(struct pipe_screen *pscreen,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
etna_init_single_shader_caps(struct etna_screen *screen, enum pipe_shader_type shader)
|
||||
{
|
||||
struct pipe_shader_caps *caps =
|
||||
(struct pipe_shader_caps *)&screen->base.shader_caps[shader];
|
||||
|
||||
bool ubo_enable = screen->info->halti >= 2;
|
||||
if (DBG_ENABLED(ETNA_DBG_DEQP))
|
||||
ubo_enable = true;
|
||||
|
||||
caps->max_instructions =
|
||||
caps->max_alu_instructions =
|
||||
caps->max_tex_instructions =
|
||||
caps->max_tex_indirections = ETNA_MAX_TOKENS;
|
||||
|
||||
caps->max_control_flow_depth = ETNA_MAX_DEPTH; /* XXX */
|
||||
|
||||
/* Maximum number of inputs for the vertex shader is the number
|
||||
* of vertex elements - each element defines one vertex shader
|
||||
* input register. For the fragment shader, this is the number
|
||||
* of varyings. */
|
||||
caps->max_inputs = shader == PIPE_SHADER_FRAGMENT ?
|
||||
screen->specs.max_varyings : screen->specs.vertex_max_elements;
|
||||
caps->max_outputs = screen->specs.max_vs_outputs;
|
||||
caps->max_temps = 64; /* Max native temporaries. */
|
||||
caps->max_const_buffers = ubo_enable ? ETNA_MAX_CONST_BUF : 1;
|
||||
caps->cont_supported = true;
|
||||
caps->indirect_temp_addr = true;
|
||||
caps->indirect_const_addr = true;
|
||||
caps->tgsi_sqrt_supported = VIV_FEATURE(screen, ETNA_FEATURE_HAS_SQRT_TRIG);
|
||||
caps->integers = screen->info->halti >= 2;
|
||||
|
||||
caps->max_texture_samplers =
|
||||
caps->max_sampler_views = shader == PIPE_SHADER_FRAGMENT
|
||||
? screen->specs.fragment_sampler_count
|
||||
: screen->specs.vertex_sampler_count;
|
||||
|
||||
caps->max_const_buffer0_size =
|
||||
ubo_enable ? 16384 /* 16384 so state tracker enables UBOs */ :
|
||||
(shader == PIPE_SHADER_FRAGMENT
|
||||
? screen->specs.max_ps_uniforms * sizeof(float[4])
|
||||
: screen->specs.max_vs_uniforms * sizeof(float[4]));
|
||||
|
||||
caps->supported_irs =
|
||||
(1 << PIPE_SHADER_IR_TGSI) |
|
||||
(1 << PIPE_SHADER_IR_NIR);
|
||||
}
|
||||
|
||||
static void
|
||||
etna_init_shader_caps(struct etna_screen *screen)
|
||||
{
|
||||
etna_init_single_shader_caps(screen, PIPE_SHADER_VERTEX);
|
||||
etna_init_single_shader_caps(screen, PIPE_SHADER_FRAGMENT);
|
||||
}
|
||||
|
||||
static void
|
||||
etna_init_screen_caps(struct etna_screen *screen)
|
||||
{
|
||||
|
|
@ -1084,6 +1139,7 @@ etna_screen_create(struct etna_device *dev, struct etna_gpu *gpu,
|
|||
etna_query_screen_init(pscreen);
|
||||
etna_resource_screen_init(pscreen);
|
||||
|
||||
etna_init_shader_caps(screen);
|
||||
etna_init_screen_caps(screen);
|
||||
|
||||
util_dynarray_init(&screen->supported_pm_queries, NULL);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue