From 3424e17b9a9beca85c0ef60e195eb544faea8995 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 7 Jul 2020 14:28:31 -0400 Subject: [PATCH] zink: unify code for emitting named uint-based variable instructions Reviewed-by: Erik Faye-Lund Part-of: --- .../drivers/zink/nir_to_spirv/nir_to_spirv.c | 35 +++++-------------- 1 file changed, 9 insertions(+), 26 deletions(-) diff --git a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c index b00ad603700..47971cf36dc 100644 --- a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c +++ b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c @@ -1606,33 +1606,16 @@ emit_load_front_face(struct ntv_context *ctx, nir_intrinsic_instr *intr) } static void -emit_load_instance_id(struct ntv_context *ctx, nir_intrinsic_instr *intr) +emit_load_uint_input(struct ntv_context *ctx, nir_intrinsic_instr *intr, SpvId *var_id, const char *var_name, SpvBuiltIn builtin) { SpvId var_type = spirv_builder_type_uint(&ctx->builder, 32); - if (!ctx->instance_id_var) - ctx->instance_id_var = create_builtin_var(ctx, var_type, - SpvStorageClassInput, - "gl_InstanceId", - SpvBuiltInInstanceIndex); + if (!*var_id) + *var_id = create_builtin_var(ctx, var_type, + SpvStorageClassInput, + var_name, + builtin); - SpvId result = spirv_builder_emit_load(&ctx->builder, var_type, - ctx->instance_id_var); - assert(1 == nir_dest_num_components(intr->dest)); - store_dest(ctx, &intr->dest, result, nir_type_uint); -} - -static void -emit_load_vertex_id(struct ntv_context *ctx, nir_intrinsic_instr *intr) -{ - SpvId var_type = spirv_builder_type_uint(&ctx->builder, 32); - if (!ctx->vertex_id_var) - ctx->vertex_id_var = create_builtin_var(ctx, var_type, - SpvStorageClassInput, - "gl_VertexID", - SpvBuiltInVertexIndex); - - SpvId result = spirv_builder_emit_load(&ctx->builder, var_type, - ctx->vertex_id_var); + SpvId result = spirv_builder_emit_load(&ctx->builder, var_type, *var_id); assert(1 == nir_dest_num_components(intr->dest)); store_dest(ctx, &intr->dest, result, nir_type_uint); } @@ -1662,11 +1645,11 @@ emit_intrinsic(struct ntv_context *ctx, nir_intrinsic_instr *intr) break; case nir_intrinsic_load_instance_id: - emit_load_instance_id(ctx, intr); + emit_load_uint_input(ctx, intr, &ctx->instance_id_var, "gl_InstanceId", SpvBuiltInInstanceIndex); break; case nir_intrinsic_load_vertex_id: - emit_load_vertex_id(ctx, intr); + emit_load_uint_input(ctx, intr, &ctx->vertex_id_var, "gl_VertexId", SpvBuiltInVertexIndex); break; default: