zink: add ntv handling for geometry shader variables
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Wed, 14 Oct 2020 14:32:36 +0000 (10:32 -0400)
committerMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Fri, 16 Oct 2020 13:15:22 +0000 (09:15 -0400)
these can reuse the unified loader codepath

Reviewed-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7139>

src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c

index ab4e5dd..498cb27 100644 (file)
@@ -68,7 +68,8 @@ struct ntv_context {
    unsigned char *shader_slot_map;
    unsigned char shader_slots_reserved;
 
-   SpvId front_face_var, instance_id_var, vertex_id_var;
+   SpvId front_face_var, instance_id_var, vertex_id_var,
+         primitive_id_var, invocation_id_var; // geometry
 };
 
 static SpvId
@@ -1672,6 +1673,14 @@ emit_intrinsic(struct ntv_context *ctx, nir_intrinsic_instr *intr)
       emit_load_uint_input(ctx, intr, &ctx->vertex_id_var, "gl_VertexId", SpvBuiltInVertexIndex);
       break;
 
+   case nir_intrinsic_load_primitive_id:
+      emit_load_uint_input(ctx, intr, &ctx->primitive_id_var, "gl_PrimitiveIdIn", SpvBuiltInPrimitiveId);
+      break;
+
+   case nir_intrinsic_load_invocation_id:
+      emit_load_uint_input(ctx, intr, &ctx->invocation_id_var, "gl_InvocationId", SpvBuiltInInvocationId);
+      break;
+
    default:
       fprintf(stderr, "emit_intrinsic: not implemented (%s)\n",
               nir_intrinsic_infos[intr->intrinsic].name);