diff --git a/include/vulkan.h b/include/vulkan.h
index c85d511..ebff03f 100644
--- a/include/vulkan.h
+++ b/include/vulkan.h
@@ -1813,17 +1813,25 @@
 } VkDescriptorPoolCreateInfo;
 
 typedef struct {
+    VkSampler                                   sampler;
+    VkImageView                                 imageView;
+    VkImageLayout                               imageLayout;
+} VkDescriptorImageInfo;
+
+typedef struct {
     VkBuffer                                    buffer;
     VkDeviceSize                                offset;
     VkDeviceSize                                range;
 } VkDescriptorBufferInfo;
 
+/* TODO: this should be union, except that causes a compiler error:
+ * error: member 'VkDescriptorImageInfo <anonymous union>::imageInfo' with constructor not allowed in union
+ * This issue should go away when the change to remove the constructor lands.
+ */
 typedef struct {
-    VkBufferView                                bufferView;
-    VkSampler                                   sampler;
-    VkImageView                                 imageView;
-    VkImageLayout                               imageLayout;
+    VkDescriptorImageInfo                       imageInfo;
     VkDescriptorBufferInfo                      bufferInfo;
+    VkBufferView                                texelBufferView;
 } VkDescriptorInfo;
 
 typedef struct {
diff --git a/layers/draw_state.cpp b/layers/draw_state.cpp
index c1395b3..7f51083 100755
--- a/layers/draw_state.cpp
+++ b/layers/draw_state.cpp
@@ -830,7 +830,9 @@
             pWDS = new VkWriteDescriptorSet;
             *pNewNode = (GENERIC_HEADER*)pWDS;
             memcpy(pWDS, pUpdate, sizeof(VkWriteDescriptorSet));
-            pWDS->pDescriptors = new VkDescriptorInfo[pWDS->count];
+            /* TODO: restore new once constructors have been removed from vulkan.h */
+//            pWDS->pDescriptors = new VkDescriptorInfo[pWDS->count];
+            pWDS->pDescriptors = (VkDescriptorInfo *) malloc(sizeof(VkDescriptorInfo) * pWDS->count);
             array_size = sizeof(VkDescriptorInfo) * pWDS->count;
             memcpy((void*)pWDS->pDescriptors, ((VkWriteDescriptorSet*)pUpdate)->pDescriptors, array_size);
             break;
@@ -858,12 +860,12 @@
     for (uint32_t i = 0; i < writeDsCount; i++) {
         for (uint32_t j = 0; j < pWDS[i].count; j++) {
             const VkDescriptorInfo *dInfo = &pWDS[i].pDescriptors[j];
-            auto imageViewItem = dev_data->imageViewMap.find(dInfo->imageView.handle);
+            auto imageViewItem = dev_data->imageViewMap.find(dInfo->imageInfo.imageView.handle);
             if (imageViewItem != dev_data->imageViewMap.end()) {
                 VkImageAspectFlags flags = ((*imageViewItem).second)->subresourceRange.aspectMask;
                 if ((flags & VK_IMAGE_ASPECT_DEPTH_BIT) &&
                     (flags & VK_IMAGE_ASPECT_STENCIL_BIT)) {
-                    skipCall |= log_msg(my_data->report_data, VK_DBG_REPORT_ERROR_BIT, VK_OBJECT_TYPE_IMAGE_VIEW, dInfo->imageView.handle, 0,
+                    skipCall |= log_msg(my_data->report_data, VK_DBG_REPORT_ERROR_BIT, VK_OBJECT_TYPE_IMAGE_VIEW, dInfo->imageInfo.imageView.handle, 0,
                         DRAWSTATE_INVALID_IMAGE_ASPECT, "DS", "vkUpdateDescriptorSets: DesriptorSet[%d] in WriteDesriptorSet[%d] "
                         "has ImageView with both STENCIL and DEPTH aspects set", j, i);
                 }
@@ -1015,8 +1017,10 @@
         {
             case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET:
                 pWDS = (VkWriteDescriptorSet*)pFreeUpdate;
-                if (pWDS->pDescriptors)
-                    delete[] pWDS->pDescriptors;
+                if (pWDS->pDescriptors) {
+//                    delete[] pWDS->pDescriptors;
+                    free((void *) pWDS->pDescriptors);
+                }
                 break;
             case VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET:
                 break;
diff --git a/layers/param_checker.cpp b/layers/param_checker.cpp
index 989a6bd..618e0fc 100644
--- a/layers/param_checker.cpp
+++ b/layers/param_checker.cpp
@@ -4806,8 +4806,8 @@
     }
     if(pDescriptorWrites->pDescriptors != nullptr)
     {
-    if(pDescriptorWrites->pDescriptors->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
-        pDescriptorWrites->pDescriptors->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
+    if(pDescriptorWrites->pDescriptors->imageInfo.imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
+        pDescriptorWrites->pDescriptors->imageInfo.imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
     {
         log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
         "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
diff --git a/tests/layer_validation_tests.cpp b/tests/layer_validation_tests.cpp
index ad7700b..3863611 100644
--- a/tests/layer_validation_tests.cpp
+++ b/tests/layer_validation_tests.cpp
@@ -2796,7 +2796,7 @@
 
     VkDescriptorInfo descriptor_info;
     memset(&descriptor_info, 0, sizeof(descriptor_info));
-    descriptor_info.sampler = sampler;
+    descriptor_info.imageInfo.sampler = sampler;
 
     VkWriteDescriptorSet descriptor_write;
     memset(&descriptor_write, 0, sizeof(descriptor_write));
@@ -2890,7 +2890,7 @@
 
     VkDescriptorInfo descriptor_info;
     memset(&descriptor_info, 0, sizeof(descriptor_info));
-    descriptor_info.sampler = sampler;
+    descriptor_info.imageInfo.sampler = sampler;
 
     VkWriteDescriptorSet descriptor_write;
     memset(&descriptor_write, 0, sizeof(descriptor_write));
@@ -2984,7 +2984,7 @@
 
     VkDescriptorInfo descriptor_info;
     memset(&descriptor_info, 0, sizeof(descriptor_info));
-    descriptor_info.sampler = sampler;
+    descriptor_info.imageInfo.sampler = sampler;
 
     VkWriteDescriptorSet descriptor_write;
     memset(&descriptor_write, 0, sizeof(descriptor_write));
@@ -3079,7 +3079,7 @@
 
     VkDescriptorInfo descriptor_info;
     memset(&descriptor_info, 0, sizeof(descriptor_info));
-    descriptor_info.sampler = sampler;
+    descriptor_info.imageInfo.sampler = sampler;
 
     VkWriteDescriptorSet descriptor_write;
     memset(&descriptor_write, 0, sizeof(descriptor_write));
diff --git a/tests/vkrenderframework.cpp b/tests/vkrenderframework.cpp
index 2876d45..aa29ab1 100644
--- a/tests/vkrenderframework.cpp
+++ b/tests/vkrenderframework.cpp
@@ -475,7 +475,7 @@
     m_type_counts.push_back(tc);
 
     VkDescriptorInfo tmp = texture->m_descriptorInfo;
-    tmp.sampler = sampler->handle();
+    tmp.imageInfo.sampler = sampler->handle();
     m_imageSamplerDescriptors.push_back(tmp);
 
     m_writes.push_back(vk_testing::Device::write_descriptor_set(vk_testing::DescriptorSet(),
@@ -552,8 +552,8 @@
 VkImageObj::VkImageObj(VkDeviceObj *dev)
 {
     m_device = dev;
-    m_descriptorInfo.imageView = VK_NULL_HANDLE;
-    m_descriptorInfo.imageLayout = VK_IMAGE_LAYOUT_GENERAL;
+    m_descriptorInfo.imageInfo.imageView = VK_NULL_HANDLE;
+    m_descriptorInfo.imageInfo.imageLayout = VK_IMAGE_LAYOUT_GENERAL;
 }
 
 void VkImageObj::ImageMemoryBarrier(
@@ -613,7 +613,7 @@
             VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
             VK_MEMORY_INPUT_TRANSFER_BIT;
 
-    if (image_layout == m_descriptorInfo.imageLayout) {
+    if (image_layout == m_descriptorInfo.imageInfo.imageLayout) {
         return;
     }
 
@@ -640,7 +640,7 @@
     }
 
     ImageMemoryBarrier(cmd_buf, aspect, output_mask, input_mask, image_layout);
-    m_descriptorInfo.imageLayout = image_layout;
+    m_descriptorInfo.imageInfo.imageLayout = image_layout;
 }
 
 void VkImageObj::SetLayout(VkImageAspectFlagBits aspect,
@@ -648,7 +648,7 @@
 {
     VkResult U_ASSERT_ONLY err;
 
-    if (image_layout == m_descriptorInfo.imageLayout) {
+    if (image_layout == m_descriptorInfo.imageInfo.imageLayout) {
         return;
     }
 
@@ -835,7 +835,7 @@
     /* create image view */
     view.image = handle();
     m_textureView.init(*m_device, view);
-    m_descriptorInfo.imageView = m_textureView.handle();
+    m_descriptorInfo.imageInfo.imageView = m_textureView.handle();
 
     data = stagingImage.MapMemory();
 
@@ -1011,23 +1011,18 @@
 
 void VkIndexBufferObj::CreateAndInitBuffer(int numIndexes, VkIndexType indexType, const void* data)
 {
-    VkFormat viewFormat;
-
     m_numVertices = numIndexes;
     m_indexType = indexType;
     switch (indexType) {
     case VK_INDEX_TYPE_UINT16:
         m_stride = 2;
-        viewFormat = VK_FORMAT_R16_UINT;
         break;
     case VK_INDEX_TYPE_UINT32:
         m_stride = 4;
-        viewFormat = VK_FORMAT_R32_UINT;
         break;
     default:
         assert(!"unknown index type");
         m_stride = 2;
-        viewFormat = VK_FORMAT_R16_UINT;
         break;
     }
 
@@ -1039,16 +1034,10 @@
     memcpy(pData, data, allocationSize);
     memory().unmap();
 
-    // set up the buffer view for the constant buffer
-    VkBufferViewCreateInfo view_info = {};
-    view_info.sType = VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO;
-    view_info.buffer = handle();
-    view_info.format = viewFormat;
-    view_info.offset = 0;
-    view_info.range  = allocationSize;
-    m_bufferView.init(*m_device, view_info);
-
-    this->m_descriptorInfo.bufferView = m_bufferView.handle();
+    // 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;
 }
 
 void VkIndexBufferObj::Bind(VkCmdBuffer cmdBuffer, VkDeviceSize offset)
diff --git a/tests/vkrenderframework.h b/tests/vkrenderframework.h
index c6914a2..24f4071 100644
--- a/tests/vkrenderframework.h
+++ b/tests/vkrenderframework.h
@@ -273,7 +273,7 @@
 
     void layout( VkImageLayout layout )
     {
-        m_descriptorInfo.imageLayout = layout;
+        m_descriptorInfo.imageInfo.imageLayout = layout;
     }
 
     VkDeviceMemory memory() const
@@ -329,7 +329,7 @@
 
     VkImageLayout layout() const
     {
-        return m_descriptorInfo.imageLayout;
+        return m_descriptorInfo.imageInfo.imageLayout;
     }
     uint32_t width() const
     {
