mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-30 20:50:09 +01:00
radv/meta: add common shader vertex generation function
Instead of passing in the same 1.0, -1.0 combinations via vertex buffers, we can just use vertex id to have the vertex shader build them. This function introduces the generator code needed, later patches will use this. Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
0e6d532d32
commit
399ebd2a84
2 changed files with 39 additions and 0 deletions
|
|
@ -416,3 +416,36 @@ radv_meta_save_graphics_reset_vport_scissor_novertex(struct radv_meta_saved_stat
|
|||
cmd_buffer->state.dynamic.scissor.count = 0;
|
||||
cmd_buffer->state.dirty |= dirty_state;
|
||||
}
|
||||
|
||||
nir_ssa_def *radv_meta_gen_rect_vertices(nir_builder *vs_b)
|
||||
{
|
||||
|
||||
nir_intrinsic_instr *vertex_id = nir_intrinsic_instr_create(vs_b->shader, nir_intrinsic_load_vertex_id_zero_base);
|
||||
nir_ssa_dest_init(&vertex_id->instr, &vertex_id->dest, 1, 32, "vertexid");
|
||||
nir_builder_instr_insert(vs_b, &vertex_id->instr);
|
||||
|
||||
/* vertex 0 - -1.0, -1.0 */
|
||||
/* vertex 1 - -1.0, 1.0 */
|
||||
/* vertex 2 - 1.0, -1.0 */
|
||||
/* so channel 0 is vertex_id != 2 ? -1.0 : 1.0
|
||||
channel 1 is vertex id != 1 ? -1.0 : 1.0 */
|
||||
|
||||
nir_ssa_def *c0cmp = nir_ine(vs_b, &vertex_id->dest.ssa,
|
||||
nir_imm_int(vs_b, 2));
|
||||
nir_ssa_def *c1cmp = nir_ine(vs_b, &vertex_id->dest.ssa,
|
||||
nir_imm_int(vs_b, 1));
|
||||
|
||||
nir_ssa_def *comp[4];
|
||||
comp[0] = nir_bcsel(vs_b, c0cmp,
|
||||
nir_imm_float(vs_b, -1.0),
|
||||
nir_imm_float(vs_b, 1.0));
|
||||
|
||||
comp[1] = nir_bcsel(vs_b, c1cmp,
|
||||
nir_imm_float(vs_b, -1.0),
|
||||
nir_imm_float(vs_b, 1.0));
|
||||
comp[2] = nir_imm_float(vs_b, 0.0);
|
||||
comp[3] = nir_imm_float(vs_b, 1.0);
|
||||
nir_ssa_def *outvec = nir_vec(vs_b, comp, 4);
|
||||
|
||||
return outvec;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -221,6 +221,12 @@ void radv_meta_resolve_compute_image(struct radv_cmd_buffer *cmd_buffer,
|
|||
void radv_blit_to_prime_linear(struct radv_cmd_buffer *cmd_buffer,
|
||||
struct radv_image *image,
|
||||
struct radv_image *linear_image);
|
||||
|
||||
/* common nir builder helpers */
|
||||
#include "nir_builder.h"
|
||||
|
||||
nir_ssa_def *radv_meta_gen_rect_vertices(nir_builder *vs_b);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue