Mesa (master): zink: implement load_vertex_id
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri Jan 3 22:39:58 UTC 2020
Module: Mesa
Branch: master
Commit: e51bf4914c4412644b4049385286596abead22d8
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=e51bf4914c4412644b4049385286596abead22d8
Author: Erik Faye-Lund <erik.faye-lund at collabora.com>
Date: Fri Jan 3 12:21:02 2020 +0100
zink: implement load_vertex_id
Not 100% sure if this matches the semantics, but it seems to pass the
tests, so it seems like an improvement.
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>
---
.../drivers/zink/nir_to_spirv/nir_to_spirv.c | 22 +++++++++++++++++++++-
1 file changed, 21 insertions(+), 1 deletion(-)
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 3ccf90d83ca..b9fb5380b17 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
@@ -56,7 +56,7 @@ struct ntv_context {
bool block_started;
SpvId loop_break, loop_cont;
- SpvId front_face_var;
+ SpvId front_face_var, vertex_id_var;
};
static SpvId
@@ -1280,6 +1280,22 @@ emit_load_front_face(struct ntv_context *ctx, nir_intrinsic_instr *intr)
store_dest_uint(ctx, &intr->dest, result);
}
+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);
+ assert(1 == nir_dest_num_components(intr->dest));
+ store_dest_uint(ctx, &intr->dest, result);
+}
+
static void
emit_intrinsic(struct ntv_context *ctx, nir_intrinsic_instr *intr)
{
@@ -1304,6 +1320,10 @@ emit_intrinsic(struct ntv_context *ctx, nir_intrinsic_instr *intr)
emit_load_front_face(ctx, intr);
break;
+ case nir_intrinsic_load_vertex_id:
+ emit_load_vertex_id(ctx, intr);
+ break;
+
default:
fprintf(stderr, "emit_intrinsic: not implemented (%s)\n",
nir_intrinsic_infos[intr->intrinsic].name);
More information about the mesa-commit
mailing list