From cfb81f58a0c3f5f8dfde3d0783ff5211b657f895 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Thu, 30 Nov 2017 15:56:39 -0800 Subject: [PATCH] nir: Add a vulkan_resource_reindex intrinsic This is required for being able to handle OpPtrAccessChain in SPIR-V where the base type of the incoming pointer requires us to add to the block index instead of the byte offset. Reviewed-by: Kristian H. Kristensen --- src/compiler/nir/nir_intrinsics.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/compiler/nir/nir_intrinsics.h b/src/compiler/nir/nir_intrinsics.h index 20bef339ac4..ccf8e06336c 100644 --- a/src/compiler/nir/nir_intrinsics.h +++ b/src/compiler/nir/nir_intrinsics.h @@ -210,7 +210,7 @@ INTRINSIC(image_samples, 0, ARR(0), true, 1, 1, 0, xx, xx, xx, NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER) /* - * Vulkan descriptor set intrinsic + * Vulkan descriptor set intrinsics * * The Vulkan API uses a different binding model from GL. In the Vulkan * API, all external resources are represented by a tuple: @@ -224,10 +224,17 @@ INTRINSIC(image_samples, 0, ARR(0), true, 1, 1, 0, xx, xx, xx, * * 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. + * + * The vulkan_resource_reindex intrinsic takes a resource index in src0 + * (the result of a vulkan_resource_index or vulkan_resource_reindex) which + * corresponds to the tuple (set, binding, index) and computes an index + * corresponding to tuple (set, binding, idx + src1). */ INTRINSIC(vulkan_resource_index, 1, ARR(1), true, 1, 0, 2, DESC_SET, BINDING, xx, NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER) +INTRINSIC(vulkan_resource_reindex, 2, ARR(1, 1), true, 1, 0, 0, xx, xx, xx, + NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER) /* * variable atomic intrinsics -- 2.30.2