diff --git a/tests/layer_validation_tests.cpp b/tests/layer_validation_tests.cpp
index c28af1e..e065518 100644
--- a/tests/layer_validation_tests.cpp
+++ b/tests/layer_validation_tests.cpp
@@ -2843,9 +2843,8 @@
     err = vkCreateSampler(m_device->device(), &sampler_ci, &sampler);
     ASSERT_VK_SUCCESS(err);
 
-    VkDescriptorInfo descriptor_info;
-    memset(&descriptor_info, 0, sizeof(descriptor_info));
-    descriptor_info.imageInfo.sampler = sampler;
+    VkDescriptorImageInfo info = {};
+    info.sampler = sampler;
 
     VkWriteDescriptorSet descriptor_write;
     memset(&descriptor_write, 0, sizeof(descriptor_write));
@@ -2854,7 +2853,7 @@
     descriptor_write.count = 1;
     // This is a mismatched type for the layout which expects BUFFER
     descriptor_write.descriptorType = VK_DESCRIPTOR_TYPE_SAMPLER;
-    descriptor_write.pDescriptors = &descriptor_info;
+    descriptor_write.pImageInfo = &info;
 
     vkUpdateDescriptorSets(m_device->device(), 1, &descriptor_write, 0, NULL);
 
@@ -2941,9 +2940,8 @@
     err = vkCreateSampler(m_device->device(), &sampler_ci, &sampler);
     ASSERT_VK_SUCCESS(err);
 
-    VkDescriptorInfo descriptor_info;
-    memset(&descriptor_info, 0, sizeof(descriptor_info));
-    descriptor_info.imageInfo.sampler = sampler;
+    VkDescriptorImageInfo info = {};
+    info.sampler = sampler;
 
     VkWriteDescriptorSet descriptor_write;
     memset(&descriptor_write, 0, sizeof(descriptor_write));
@@ -2953,7 +2951,7 @@
     descriptor_write.count = 1;
     // This is the wrong type, but out of bounds will be flagged first
     descriptor_write.descriptorType = VK_DESCRIPTOR_TYPE_SAMPLER;
-    descriptor_write.pDescriptors = &descriptor_info;
+    descriptor_write.pImageInfo = &info;
 
     vkUpdateDescriptorSets(m_device->device(), 1, &descriptor_write, 0, NULL);
 
@@ -3039,9 +3037,8 @@
     err = vkCreateSampler(m_device->device(), &sampler_ci, &sampler);
     ASSERT_VK_SUCCESS(err);
 
-    VkDescriptorInfo descriptor_info;
-    memset(&descriptor_info, 0, sizeof(descriptor_info));
-    descriptor_info.imageInfo.sampler = sampler;
+    VkDescriptorImageInfo info = {};
+    info.sampler = sampler;
 
     VkWriteDescriptorSet descriptor_write;
     memset(&descriptor_write, 0, sizeof(descriptor_write));
@@ -3051,7 +3048,7 @@
     descriptor_write.count = 1;
     // This is the wrong type, but out of bounds will be flagged first
     descriptor_write.descriptorType = VK_DESCRIPTOR_TYPE_SAMPLER;
-    descriptor_write.pDescriptors = &descriptor_info;
+    descriptor_write.pImageInfo = &info;
 
     vkUpdateDescriptorSets(m_device->device(), 1, &descriptor_write, 0, NULL);
 
@@ -3138,9 +3135,8 @@
     ASSERT_VK_SUCCESS(err);
 
 
-    VkDescriptorInfo descriptor_info;
-    memset(&descriptor_info, 0, sizeof(descriptor_info));
-    descriptor_info.imageInfo.sampler = sampler;
+    VkDescriptorImageInfo info = {};
+    info.sampler = sampler;
 
     VkWriteDescriptorSet descriptor_write;
     memset(&descriptor_write, 0, sizeof(descriptor_write));
@@ -3149,7 +3145,7 @@
     descriptor_write.count = 1;
     // This is the wrong type, but out of bounds will be flagged first
     descriptor_write.descriptorType = VK_DESCRIPTOR_TYPE_SAMPLER;
-    descriptor_write.pDescriptors = &descriptor_info;
+    descriptor_write.pImageInfo = &info;
 
     vkUpdateDescriptorSets(m_device->device(), 1, &descriptor_write, 0, NULL);
 
diff --git a/tests/vkrenderframework.cpp b/tests/vkrenderframework.cpp
index 0effd81..4ea2eaa 100644
--- a/tests/vkrenderframework.cpp
+++ b/tests/vkrenderframework.cpp
@@ -462,7 +462,7 @@
     m_type_counts.push_back(tc);
 
     m_writes.push_back(vk_testing::Device::write_descriptor_set(vk_testing::DescriptorSet(),
-                m_nextSlot, 0, type, 1, &constantBuffer.m_descriptorInfo));
+                m_nextSlot, 0, type, 1, &constantBuffer.m_descriptorBufferInfo));
 
     return m_nextSlot++;
 }
@@ -474,12 +474,12 @@
     tc.count = 1;
     m_type_counts.push_back(tc);
 
-    VkDescriptorInfo tmp = texture->m_descriptorInfo;
-    tmp.imageInfo.sampler = sampler->handle();
+    VkDescriptorImageInfo tmp = texture->m_imageInfo;
+    tmp.sampler = sampler->handle();
     m_imageSamplerDescriptors.push_back(tmp);
 
     m_writes.push_back(vk_testing::Device::write_descriptor_set(vk_testing::DescriptorSet(),
-                m_nextSlot, 0, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, NULL));
+                m_nextSlot, 0, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, &tmp));
 
     return m_nextSlot++;
 }
@@ -541,7 +541,7 @@
          it != m_writes.end(); it++) {
         it->destSet = m_set->handle();
         if (it->descriptorType == VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER)
-            it->pDescriptors = &m_imageSamplerDescriptors[imageSamplerCount++];
+            it->pImageInfo = &m_imageSamplerDescriptors[imageSamplerCount++];
     }
 
     // do the updates
@@ -551,8 +551,8 @@
 VkImageObj::VkImageObj(VkDeviceObj *dev)
 {
     m_device = dev;
-    m_descriptorInfo.imageInfo.imageView = VK_NULL_HANDLE;
-    m_descriptorInfo.imageInfo.imageLayout = VK_IMAGE_LAYOUT_GENERAL;
+    m_descriptorImageInfo.imageView = VK_NULL_HANDLE;
+    m_descriptorImageInfo.imageLayout = VK_IMAGE_LAYOUT_GENERAL;
 }
 
 void VkImageObj::ImageMemoryBarrier(
@@ -612,7 +612,7 @@
             VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
             VK_MEMORY_INPUT_TRANSFER_BIT;
 
-    if (image_layout == m_descriptorInfo.imageInfo.imageLayout) {
+    if (image_layout == m_descriptorImageInfo.imageLayout) {
         return;
     }
 
@@ -639,7 +639,7 @@
     }
 
     ImageMemoryBarrier(cmd_buf, aspect, output_mask, input_mask, image_layout);
-    m_descriptorInfo.imageInfo.imageLayout = image_layout;
+    m_descriptorImageInfo.imageLayout = image_layout;
 }
 
 void VkImageObj::SetLayout(VkImageAspectFlagBits aspect,
@@ -647,7 +647,7 @@
 {
     VkResult U_ASSERT_ONLY err;
 
-    if (image_layout == m_descriptorInfo.imageInfo.imageLayout) {
+    if (image_layout == m_descriptorImageInfo.imageLayout) {
         return;
     }
 
@@ -810,7 +810,7 @@
     if (colors == NULL)
         colors = tex_colors;
 
-    memset(&m_descriptorInfo,0,sizeof(m_descriptorInfo));
+    memset(&m_imageInfo,0,sizeof(m_imageInfo));
 
     VkImageViewCreateInfo view = {};
     view.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
@@ -834,7 +834,7 @@
     /* create image view */
     view.image = handle();
     m_textureView.init(*m_device, view);
-    m_descriptorInfo.imageInfo.imageView = m_textureView.handle();
+    m_imageInfo.imageView = m_textureView.handle();
 
     data = stagingImage.MapMemory();
 
@@ -879,7 +879,7 @@
     m_device = device;
     m_commandBuffer = 0;
 
-    memset(&m_descriptorInfo,0,sizeof(m_descriptorInfo));
+    memset(&m_descriptorBufferInfo,0,sizeof(m_descriptorBufferInfo));
 }
 
 VkConstantBufferObj::~VkConstantBufferObj()
@@ -896,7 +896,7 @@
     m_device = device;
     m_commandBuffer = 0;
 
-    memset(&m_descriptorInfo,0,sizeof(m_descriptorInfo));
+    memset(&m_descriptorBufferInfo,0,sizeof(m_descriptorBufferInfo));
     m_numVertices = constantCount;
     m_stride = constantSize;
 
@@ -913,9 +913,9 @@
      * or as shader uniform buffers. So, we'll create the shaderbuffer
      * descriptor here so it's ready if needed.
      */
-    this->m_descriptorInfo.bufferInfo.buffer = handle();
-    this->m_descriptorInfo.bufferInfo.offset = 0;
-    this->m_descriptorInfo.bufferInfo.range = allocationSize;
+    this->m_descriptorBufferInfo.buffer = handle();
+    this->m_descriptorBufferInfo.offset = 0;
+    this->m_descriptorBufferInfo.range = allocationSize;
 }
 
 void VkConstantBufferObj::Bind(VkCmdBuffer cmdBuffer, VkDeviceSize offset, uint32_t binding)
@@ -1034,9 +1034,9 @@
     memory().unmap();
 
     // set up the descriptor for the constant buffer
-    this->m_descriptorInfo.bufferInfo.buffer = handle();
-    this->m_descriptorInfo.bufferInfo.offset = 0;
-    this->m_descriptorInfo.bufferInfo.range = allocationSize;
+    this->m_descriptorBufferInfo.buffer = handle();
+    this->m_descriptorBufferInfo.offset = 0;
+    this->m_descriptorBufferInfo.range = allocationSize;
 }
 
 void VkIndexBufferObj::Bind(VkCmdBuffer cmdBuffer, VkDeviceSize offset)
diff --git a/tests/vkrenderframework.h b/tests/vkrenderframework.h
index 24f4071..26aff66 100644
--- a/tests/vkrenderframework.h
+++ b/tests/vkrenderframework.h
@@ -233,7 +233,7 @@
 
     void Bind(VkCmdBuffer cmdBuffer, VkDeviceSize offset, uint32_t binding);
 
-    VkDescriptorInfo                    m_descriptorInfo;
+    VkDescriptorBufferInfo              m_descriptorBufferInfo;
 
 protected:
     VkDeviceObj                        *m_device;
@@ -273,7 +273,7 @@
 
     void layout( VkImageLayout layout )
     {
-        m_descriptorInfo.imageInfo.imageLayout = layout;
+        m_descriptorImageInfo.imageLayout = layout;
     }
 
     VkDeviceMemory memory() const
@@ -329,7 +329,7 @@
 
     VkImageLayout layout() const
     {
-        return m_descriptorInfo.imageInfo.imageLayout;
+        return m_descriptorImageInfo.imageLayout;
     }
     uint32_t width() const
     {
@@ -348,7 +348,7 @@
     VkDeviceObj                        *m_device;
 
     vk_testing::ImageView               m_targetView;
-    VkDescriptorInfo                    m_descriptorInfo;
+    VkDescriptorImageInfo               m_descriptorImageInfo;
 };
 
 class VkTextureObj : public VkImageObj
@@ -356,7 +356,7 @@
 public:
     VkTextureObj(VkDeviceObj *device, uint32_t *colors = NULL);
 
-    VkDescriptorInfo                    m_descriptorInfo;
+    VkDescriptorImageInfo               m_imageInfo;
 
 protected:
     VkDeviceObj                        *m_device;
@@ -393,7 +393,7 @@
     vector<VkDescriptorTypeCount>       m_type_counts;
     int                                 m_nextSlot;
 
-    vector<VkDescriptorInfo>            m_imageSamplerDescriptors;
+    vector<VkDescriptorImageInfo>       m_imageSamplerDescriptors;
     vector<VkWriteDescriptorSet>        m_writes;
 
     vk_testing::DescriptorSetLayout     m_layout;
diff --git a/tests/vktestbinding.h b/tests/vktestbinding.h
index 5fdc1aa..9f0baa7 100644
--- a/tests/vktestbinding.h
+++ b/tests/vktestbinding.h
@@ -186,9 +186,17 @@
     void update_descriptor_sets(const std::vector<VkWriteDescriptorSet> &writes) { return update_descriptor_sets(writes, std::vector<VkCopyDescriptorSet>()); }
 
     static VkWriteDescriptorSet write_descriptor_set(const DescriptorSet &set, uint32_t binding, uint32_t array_element,
-                                                     VkDescriptorType type, uint32_t count, const VkDescriptorInfo *descriptors);
+                                                     VkDescriptorType type, uint32_t count, const VkDescriptorImageInfo *image_info);
     static VkWriteDescriptorSet write_descriptor_set(const DescriptorSet &set, uint32_t binding, uint32_t array_element,
-                                                     VkDescriptorType type, const std::vector<VkDescriptorInfo> &descriptors);
+                                                     VkDescriptorType type, uint32_t count, const VkDescriptorBufferInfo *buffer_info);
+    static VkWriteDescriptorSet write_descriptor_set(const DescriptorSet &set, uint32_t binding, uint32_t array_element,
+                                                     VkDescriptorType type, uint32_t count, const VkBufferView *buffer_views);
+    static VkWriteDescriptorSet write_descriptor_set(const DescriptorSet &set, uint32_t binding, uint32_t array_element,
+                                                     VkDescriptorType type, const std::vector<VkDescriptorImageInfo> &image_info);
+    static VkWriteDescriptorSet write_descriptor_set(const DescriptorSet &set, uint32_t binding, uint32_t array_element,
+                                                     VkDescriptorType type, const std::vector<VkDescriptorBufferInfo> &buffer_info);
+    static VkWriteDescriptorSet write_descriptor_set(const DescriptorSet &set, uint32_t binding, uint32_t array_element,
+                                                     VkDescriptorType type, const std::vector<VkBufferView> &buffer_views);
 
     static VkCopyDescriptorSet copy_descriptor_set(const DescriptorSet &src_set, uint32_t src_binding, uint32_t src_array_element,
                                                    const DescriptorSet &dst_set, uint32_t dst_binding, uint32_t dst_array_element,
@@ -806,7 +814,7 @@
 }
 
 inline VkWriteDescriptorSet Device::write_descriptor_set(const DescriptorSet &set, uint32_t binding, uint32_t array_element,
-                                                         VkDescriptorType type, uint32_t count, const VkDescriptorInfo *descriptors)
+                                                         VkDescriptorType type, uint32_t count, const VkDescriptorImageInfo *image_info)
 {
     VkWriteDescriptorSet write = {};
     write.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
@@ -815,14 +823,54 @@
     write.destArrayElement = array_element;
     write.count = count;
     write.descriptorType = type;
-    write.pDescriptors = descriptors;
+    write.pImageInfo = image_info;
     return write;
 }
 
 inline VkWriteDescriptorSet Device::write_descriptor_set(const DescriptorSet &set, uint32_t binding, uint32_t array_element,
-                                                         VkDescriptorType type, const std::vector<VkDescriptorInfo> &descriptors)
+                                                         VkDescriptorType type, uint32_t count, const VkDescriptorBufferInfo *buffer_info)
 {
-    return write_descriptor_set(set, binding, array_element, type, descriptors.size(), &descriptors[0]);
+    VkWriteDescriptorSet write = {};
+    write.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
+    write.destSet = set.handle();
+    write.destBinding = binding;
+    write.destArrayElement = array_element;
+    write.count = count;
+    write.descriptorType = type;
+    write.pBufferInfo = buffer_info;
+    return write;
+}
+
+inline VkWriteDescriptorSet Device::write_descriptor_set(const DescriptorSet &set, uint32_t binding, uint32_t array_element,
+                                                         VkDescriptorType type, uint32_t count, const VkBufferView *buffer_views)
+{
+    VkWriteDescriptorSet write = {};
+    write.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
+    write.destSet = set.handle();
+    write.destBinding = binding;
+    write.destArrayElement = array_element;
+    write.count = count;
+    write.descriptorType = type;
+    write.pTexelBufferView = buffer_views;
+    return write;
+}
+
+inline VkWriteDescriptorSet Device::write_descriptor_set(const DescriptorSet &set, uint32_t binding, uint32_t array_element,
+                                                         VkDescriptorType type, const std::vector<VkDescriptorImageInfo> &image_info)
+{
+    return write_descriptor_set(set, binding, array_element, type, image_info.size(), &image_info[0]);
+}
+
+inline VkWriteDescriptorSet Device::write_descriptor_set(const DescriptorSet &set, uint32_t binding, uint32_t array_element,
+                                                         VkDescriptorType type, const std::vector<VkDescriptorBufferInfo> &buffer_info)
+{
+    return write_descriptor_set(set, binding, array_element, type, buffer_info.size(), &buffer_info[0]);
+}
+
+inline VkWriteDescriptorSet Device::write_descriptor_set(const DescriptorSet &set, uint32_t binding, uint32_t array_element,
+                                                         VkDescriptorType type, const std::vector<VkBufferView> &buffer_views)
+{
+    return write_descriptor_set(set, binding, array_element, type, buffer_views.size(), &buffer_views[0]);
 }
 
 inline VkCopyDescriptorSet Device::copy_descriptor_set(const DescriptorSet &src_set, uint32_t src_binding, uint32_t src_array_element,
