From 800a9706f01e0e32240b416290b98af3dd5f0702 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Tue, 27 Oct 2015 11:45:15 -0700 Subject: [PATCH] nir: Add a vulkan_resource_index intrinsic --- src/glsl/nir/nir_intrinsics.h | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/glsl/nir/nir_intrinsics.h b/src/glsl/nir/nir_intrinsics.h index 68a18b9c11a..9ef8f5bc6eb 100644 --- a/src/glsl/nir/nir_intrinsics.h +++ b/src/glsl/nir/nir_intrinsics.h @@ -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 * -- 2.30.2