From 399ebd2a84a133bd2ca3da388a059fd3bafe33f5 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Wed, 19 Apr 2017 06:18:23 +1000 Subject: 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 Signed-off-by: Dave Airlie --- src/amd/vulkan/radv_meta.c | 33 +++++++++++++++++++++++++++++++++ src/amd/vulkan/radv_meta.h | 6 ++++++ 2 files changed, 39 insertions(+) (limited to 'src') diff --git a/src/amd/vulkan/radv_meta.c b/src/amd/vulkan/radv_meta.c index feb2ab8bfa6..bb95b36b56b 100644 --- a/src/amd/vulkan/radv_meta.c +++ b/src/amd/vulkan/radv_meta.c @@ -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; +} diff --git a/src/amd/vulkan/radv_meta.h b/src/amd/vulkan/radv_meta.h index 8702ca4dbbd..6cad94c89e0 100644 --- a/src/amd/vulkan/radv_meta.h +++ b/src/amd/vulkan/radv_meta.h @@ -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 -- cgit v1.2.3