nir: Add a vulkan_resource_index intrinsic
authorJason Ekstrand <jason.ekstrand@intel.com>
Tue, 27 Oct 2015 18:45:15 +0000 (11:45 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Tue, 27 Oct 2015 20:41:08 +0000 (13:41 -0700)
src/glsl/nir/nir_intrinsics.h

index 68a18b9c11a8a7ec2258d95d9db5c18b7e70cd0d..9ef8f5bc6eb98017b0f1a4ceaba835eb46ef6347 100644 (file)
@@ -156,6 +156,25 @@ INTRINSIC(image_size, 0, ARR(), true, 4, 1, 0,
 INTRINSIC(image_samples, 0, ARR(), true, 1, 1, 0,
           NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER)
 
+/*
+ * Vulkan descriptor set intrinsic
+ *
+ * The Vulkan API uses a different binding model from GL.  In the Vulkan
+ * API, all external resources are represented by a tripple:
+ *
+ * (descriptor set, binding, array index)
+ *
+ * where the array index is the only thing allowed to be indirect.  The
+ * vulkan_surface_index intrinsic takes the descriptor set and binding as
+ * its first two indices and the array index as its source.  The third
+ * index is a nir_variable_mode in case that's useful to the backend.
+ *
+ * The intended usage is that the shader will call vulkan_surface_index to
+ * get an index and then pass that as the buffer index ubo/ssbo calls.
+ */
+INTRINSIC(vulkan_resource_index, 1, ARR(1), true, 1, 0, 3,
+          NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER)
+
 /*
  * SSBO atomic intrinsics
  *