[PATCH vkd3d 2/4] vkd3d-shader: Add a descriptor binding offset for merged resource arrays.

Conor McCarthy cmccarthy at codeweavers.com
Wed May 26 03:06:17 CDT 2021


Signed-off-by: Conor McCarthy <cmccarthy at codeweavers.com>
---
 include/vkd3d_shader.h    | 12 ++++++++++--
 libs/vkd3d-shader/spirv.c |  1 +
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/include/vkd3d_shader.h b/include/vkd3d_shader.h
index 03225d37..b320de8d 100644
--- a/include/vkd3d_shader.h
+++ b/include/vkd3d_shader.h
@@ -194,6 +194,8 @@ enum vkd3d_shader_descriptor_type
     VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_DESCRIPTOR_TYPE),
 };
 
+#define VKD3D_SHADER_SINGLE_BINDING 0x7FFFFFFF
+
 /**
  * A common structure describing the bind point of a descriptor or descriptor
  * array in the target environment.
@@ -208,10 +210,16 @@ struct vkd3d_shader_descriptor_binding
     /** The binding index of the descriptor. */
     unsigned int binding;
     /**
-     * The size of this descriptor array. Descriptor arrays are not supported in
-     * this version of vkd3d-shader, and therefore this value must be 1.
+     * The size of this descriptor array. If descriptor indexing is not
+     * supported by the Vulkan device, this value must be 1.
      */
     unsigned int count;
+    /**
+     * The offset of the first descriptor in the binding relative to the
+     * register index used to map it. Valid if this binding is contained within
+     * a larger merged array, otherwise VKD3D_SHADER_SINGLE_BINDING.
+    */
+    int offset;
 };
 
 enum vkd3d_shader_binding_flag
diff --git a/libs/vkd3d-shader/spirv.c b/libs/vkd3d-shader/spirv.c
index 0e75b0ae..d477b384 100644
--- a/libs/vkd3d-shader/spirv.c
+++ b/libs/vkd3d-shader/spirv.c
@@ -2569,6 +2569,7 @@ static struct vkd3d_shader_descriptor_binding vkd3d_dxbc_compiler_get_descriptor
 done:
     binding.set = 0;
     binding.count = 1;
+    binding.offset = 0;
     binding.binding = compiler->binding_idx++;
     return binding;
 }
-- 
2.31.1




More information about the wine-devel mailing list