layers: Clean up access to descriptors_ vector

Migrate a number of unneccessary .at() calls to just use [] operator.
Also replace push_back() calls at descriptor creation time with emplace_back().
diff --git a/layers/descriptor_sets.cpp b/layers/descriptor_sets.cpp
index dc2d03b..f4d896d 100644
--- a/layers/descriptor_sets.cpp
+++ b/layers/descriptor_sets.cpp
@@ -216,9 +216,9 @@
             auto immut_sampler = p_layout_->GetImmutableSamplerPtrFromIndex(i);
             for (uint32_t di = 0; di < p_layout_->GetDescriptorCountFromIndex(i); ++di) {
                 if (immut_sampler)
-                    descriptors_.push_back(std::unique_ptr<Descriptor>(new SamplerDescriptor(immut_sampler + di, sampler_map_)));
+                    descriptors_.emplace_back(std::unique_ptr<Descriptor>(new SamplerDescriptor(immut_sampler + di, sampler_map_)));
                 else
-                    descriptors_.push_back(std::unique_ptr<Descriptor>(new SamplerDescriptor(sampler_map_)));
+                    descriptors_.emplace_back(std::unique_ptr<Descriptor>(new SamplerDescriptor(sampler_map_)));
             }
             break;
         }
@@ -226,10 +226,10 @@
             auto immut = p_layout_->GetImmutableSamplerPtrFromIndex(i);
             for (uint32_t di = 0; di < p_layout_->GetDescriptorCountFromIndex(i); ++di) {
                 if (immut)
-                    descriptors_.push_back(std::unique_ptr<Descriptor>(new ImageSamplerDescriptor(
+                    descriptors_.emplace_back(std::unique_ptr<Descriptor>(new ImageSamplerDescriptor(
                         immut + di, image_view_map_, image_map_, image_to_swapchain_map_, swapchain_map_, sampler_map_)));
                 else
-                    descriptors_.push_back(std::unique_ptr<Descriptor>(new ImageSamplerDescriptor(
+                    descriptors_.emplace_back(std::unique_ptr<Descriptor>(new ImageSamplerDescriptor(
                         image_view_map_, image_map_, image_to_swapchain_map_, swapchain_map_, sampler_map_)));
             }
             break;
@@ -239,31 +239,32 @@
         case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT:
         case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
             for (uint32_t di = 0; di < p_layout_->GetDescriptorCountFromIndex(i); ++di)
-                descriptors_.push_back(std::unique_ptr<Descriptor>(
+                descriptors_.emplace_back(std::unique_ptr<Descriptor>(
                     new ImageDescriptor(type, image_view_map_, image_map_, image_to_swapchain_map_, swapchain_map_)));
             break;
         case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
         case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:
             for (uint32_t di = 0; di < p_layout_->GetDescriptorCountFromIndex(i); ++di)
-                descriptors_.push_back(std::unique_ptr<Descriptor>(new TexelDescriptor(type, buffer_view_map_)));
+                descriptors_.emplace_back(std::unique_ptr<Descriptor>(new TexelDescriptor(type, buffer_view_map_)));
             break;
         case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:
         case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC:
         case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:
         case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC:
             for (uint32_t di = 0; di < p_layout_->GetDescriptorCountFromIndex(i); ++di)
-                descriptors_.push_back(std::unique_ptr<Descriptor>(new BufferDescriptor(type, buffer_map_)));
+                descriptors_.emplace_back(std::unique_ptr<Descriptor>(new BufferDescriptor(type, buffer_map_)));
             break;
         default:
+            assert(0); // Bad descriptor type specified
             break;
         }
     }
 }
 // For given global_index return bool of whether or not the underlying descriptor has been updated
 bool cvdescriptorset::DescriptorSet::IsUpdated(const uint32_t global_index) const {
-    if (global_index >= descriptors_.size() || !descriptors_.at(global_index))
+    if (global_index >= descriptors_.size())
         return false;
-    return descriptors_.at(global_index)->updated;
+    return descriptors_[global_index]->updated;
 }
 // Is this sets underlying layout compatible with passed in layout according to "Pipeline Layout Compatibility" in spec?
 bool cvdescriptorset::DescriptorSet::IsCompatible(const DescriptorSetLayout *layout, std::string *error) const {
@@ -277,22 +278,22 @@
                                                        const std::vector<uint32_t> &dynamic_offsets, std::string *error) const {
     for (auto binding : bindings) {
         auto start_idx = p_layout_->GetGlobalStartIndexFromBinding(binding);
-        if (descriptors_.at(start_idx)->IsImmutableSampler()) {
+        if (descriptors_[start_idx]->IsImmutableSampler()) {
             // Nothing to do for strictly immutable sampler
         } else {
             auto end_idx = p_layout_->GetGlobalEndIndexFromBinding(binding);
             auto dyn_offset_index = 0;
             for (uint32_t i = start_idx; i <= end_idx; ++i) {
-                if (!descriptors_.at(i)->updated) {
+                if (!descriptors_[i]->updated) {
                     std::stringstream error_str;
                     error_str << "Descriptor in binding #" << binding << " at global descriptor index " << i
                               << " is being used in draw but has not been updated.";
                     *error = error_str.str();
                     return false;
                 } else {
-                    if (GeneralBuffer == descriptors_.at(i)->GetClass()) {
+                    if (GeneralBuffer == descriptors_[i]->GetClass()) {
                         // Verify that buffers are valid
-                        auto buffer = static_cast<BufferDescriptor *>(descriptors_.at(i).get())->GetBuffer();
+                        auto buffer = static_cast<BufferDescriptor *>(descriptors_[i].get())->GetBuffer();
                         auto buffer_node = buffer_map_->find(buffer);
                         if (buffer_node == buffer_map_->end()) {
                             std::stringstream error_str;
@@ -311,11 +312,11 @@
                                 return false;
                             }
                         }
-                        if (descriptors_.at(i)->IsDynamic()) {
+                        if (descriptors_[i]->IsDynamic()) {
                             // Validate that dynamic offsets are within the buffer
                             auto buffer_size = buffer_node->second.createInfo.size;
-                            auto range = static_cast<BufferDescriptor *>(descriptors_.at(i).get())->GetRange();
-                            auto desc_offset = static_cast<BufferDescriptor *>(descriptors_.at(i).get())->GetOffset();
+                            auto range = static_cast<BufferDescriptor *>(descriptors_[i].get())->GetRange();
+                            auto desc_offset = static_cast<BufferDescriptor *>(descriptors_[i].get())->GetOffset();
                             auto dyn_offset = dynamic_offsets[dyn_offset_index++];
                             if (VK_WHOLE_SIZE == range) {
                                 if ((dyn_offset + desc_offset) > buffer_size) {
@@ -354,27 +355,27 @@
     auto num_updates = 0;
     for (auto binding : bindings) {
         auto start_idx = p_layout_->GetGlobalStartIndexFromBinding(binding);
-        if (descriptors_.at(start_idx)->IsStorage()) {
-            if (Image == descriptors_.at(start_idx)->descriptor_class) {
+        if (descriptors_[start_idx]->IsStorage()) {
+            if (Image == descriptors_[start_idx]->descriptor_class) {
                 for (uint32_t i = 0; i < p_layout_->GetDescriptorCountFromBinding(binding); ++i) {
-                    if (descriptors_.at(start_idx + i)->updated) {
-                        image_set->insert(static_cast<ImageDescriptor *>(descriptors_.at(start_idx + i).get())->GetImageView());
+                    if (descriptors_[start_idx + i]->updated) {
+                        image_set->insert(static_cast<ImageDescriptor *>(descriptors_[start_idx + i].get())->GetImageView());
                         num_updates++;
                     }
                 }
-            } else if (TexelBuffer == descriptors_.at(start_idx)->descriptor_class) {
+            } else if (TexelBuffer == descriptors_[start_idx]->descriptor_class) {
                 for (uint32_t i = 0; i < p_layout_->GetDescriptorCountFromBinding(binding); ++i) {
-                    if (descriptors_.at(start_idx + i)->updated) {
-                        auto bufferview = static_cast<TexelDescriptor *>(descriptors_.at(start_idx + i).get())->GetBufferView();
+                    if (descriptors_[start_idx + i]->updated) {
+                        auto bufferview = static_cast<TexelDescriptor *>(descriptors_[start_idx + i].get())->GetBufferView();
                         auto buffer = buffer_view_map_->at(bufferview).buffer;
                         buffer_set->insert(buffer);
                         num_updates++;
                     }
                 }
-            } else if (GeneralBuffer == descriptors_.at(start_idx)->descriptor_class) {
+            } else if (GeneralBuffer == descriptors_[start_idx]->descriptor_class) {
                 for (uint32_t i = 0; i < p_layout_->GetDescriptorCountFromBinding(binding); ++i) {
-                    if (descriptors_.at(start_idx + i)->updated) {
-                        buffer_set->insert(static_cast<BufferDescriptor *>(descriptors_.at(start_idx + i).get())->GetBuffer());
+                    if (descriptors_[start_idx + i]->updated) {
+                        buffer_set->insert(static_cast<BufferDescriptor *>(descriptors_[start_idx + i].get())->GetBuffer());
                         num_updates++;
                     }
                 }
@@ -455,6 +456,8 @@
             return false;
         // Update is within bounds and consistent so perform update
         for (uint32_t di = 0; di < update->descriptorCount; ++di) {
+            // TODO : Can we break this into a set-level "Validate" followed by Descriptor updating itself
+            //  if the validate passes? That saves us all the map ptrs in each descriptor instance
             if (!descriptors_[start_idx + di]->WriteUpdate(update, di, error_msg)) {
                 std::stringstream error_str;
                 error_str << "Write update to descriptor at global index " << start_idx + di << " within set " << set_
@@ -531,7 +534,7 @@
     }
     // Update parameters all look good so perform update
     for (uint32_t di = 0; di < update->descriptorCount; ++di) {
-        if (!descriptors_.at(dst_start_idx)->CopyUpdate(src_set->descriptors_.at(src_start_idx).get(), error))
+        if (!descriptors_[dst_start_idx]->CopyUpdate(src_set->descriptors_[src_start_idx].get(), error))
             return false;
         ++num_updates;
     }
@@ -561,7 +564,7 @@
 }
 bool cvdescriptorset::ValidateSampler(const VkSampler sampler,
                                       const std::unordered_map<VkSampler, std::unique_ptr<SAMPLER_NODE>> *sampler_map) {
-    return (sampler_map->count(sampler) != 0) ? true : false;
+    return (sampler_map->count(sampler) != 0);
 }
 bool cvdescriptorset::ValidateImageUpdate(const VkImageView image_view, const VkImageLayout image_layout,
                                           const std::unordered_map<VkImageView, VkImageViewCreateInfo> *image_view_map,