v3dv/pipeline: set 16bit return_size for shadows always
So far we were pre-generating two variants, an all 16 bit return_size and an all 32-bit return_size, as at pipeline creation time we don't know the texture format that it would be used finally used. But it is possible to override or at least refine the 32bit case, as we know in advance that all shadow textures can (and in fact should) use return_size 16bit. Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6766>
This commit is contained in:
committed by
Marge Bot
parent
229cce4056
commit
fa7fbdb088
@@ -2851,7 +2851,8 @@ cmd_buffer_populate_v3d_key(struct v3d_key *key,
|
||||
}
|
||||
}
|
||||
}
|
||||
v3dv_update_v3d_key(key, v3d_key_return_size);
|
||||
v3d_key_update_return_size(cmd_buffer->state.pipeline, key,
|
||||
v3d_key_return_size);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1589,16 +1589,25 @@ v3dv_get_shader_variant(struct v3dv_pipeline_stage *p_stage,
|
||||
/* This methods updates the return size for a given key. It assumes that it
|
||||
* was already properly populated. So for example values for key->num_tex_used
|
||||
* should be correct at this point
|
||||
*
|
||||
* Note that even the @return_size to set is 32bit, it could be overriden to
|
||||
* 16bit, like for shadow textures, that we know in advance that they are
|
||||
* always 16bit.
|
||||
*/
|
||||
void
|
||||
v3dv_update_v3d_key(struct v3d_key *key,
|
||||
uint32_t return_size)
|
||||
v3d_key_update_return_size(struct v3dv_pipeline *pipeline,
|
||||
struct v3d_key *key,
|
||||
uint32_t return_size)
|
||||
{
|
||||
assert(return_size == 32 || return_size == 16);
|
||||
struct v3dv_descriptor_map *texture_map = &pipeline->texture_map;
|
||||
|
||||
for (uint32_t tex_idx = 0; tex_idx < key->num_tex_used; tex_idx++) {
|
||||
key->tex[tex_idx].return_size = return_size;
|
||||
key->tex[tex_idx].return_channels = return_size == 16 ? 2 : 4;
|
||||
key->tex[tex_idx].return_size =
|
||||
texture_map->is_shadow[tex_idx] ? 16 : return_size;
|
||||
|
||||
key->tex[tex_idx].return_channels =
|
||||
key->tex[tex_idx].return_size == 16 ? 2 : 4;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1632,7 +1641,7 @@ pregenerate_shader_variants(struct v3dv_pipeline_stage *p_stage,
|
||||
return variant_16;
|
||||
}
|
||||
|
||||
v3dv_update_v3d_key(key, 32);
|
||||
v3d_key_update_return_size(p_stage->pipeline, key, 32);
|
||||
|
||||
struct v3dv_shader_variant *variant_32 =
|
||||
v3dv_get_shader_variant(p_stage, cache, key, key_size,
|
||||
|
||||
@@ -1739,7 +1739,9 @@ struct v3dv_cl_reloc v3dv_write_uniforms_wg_offsets(struct v3dv_cmd_buffer *cmd_
|
||||
struct v3dv_pipeline_stage *p_stage,
|
||||
uint32_t **wg_count_offsets);
|
||||
|
||||
void v3dv_update_v3d_key(struct v3d_key *key, uint32_t return_size);
|
||||
void v3d_key_update_return_size(struct v3dv_pipeline *pipeline,
|
||||
struct v3d_key *key,
|
||||
uint32_t return_size);
|
||||
|
||||
struct v3dv_shader_variant *
|
||||
v3dv_get_shader_variant(struct v3dv_pipeline_stage *p_stage,
|
||||
|
||||
Reference in New Issue
Block a user