aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobin Ehlis <tobine@google.com>2016-06-02 09:43:11 -0600
committerTobin Ehlis <tobine@google.com>2016-06-02 16:58:47 -0600
commitf6a1232fbcbfe7af4974f70b0014c8b72a362633 (patch)
tree255d56b4e2113960ce1a81435d07351f8a2acced
parentdfd84b02f282a762e3ec24e86e75c35813799744 (diff)
downloadusermoji-f6a1232fbcbfe7af4974f70b0014c8b72a362633.tar.xz
layers: Add getBufferViewInfo() helper
Add helper function to core_validation for bufferViewMap look-ups and use the helper in DescriptorSet class.
-rw-r--r--layers/core_validation.cpp14
-rw-r--r--layers/core_validation_types.h1
-rw-r--r--layers/descriptor_sets.cpp31
-rw-r--r--layers/descriptor_sets.h2
4 files changed, 26 insertions, 22 deletions
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp
index 571cb009..844503dc 100644
--- a/layers/core_validation.cpp
+++ b/layers/core_validation.cpp
@@ -126,7 +126,7 @@ struct layer_data {
unordered_map<VkSampler, unique_ptr<SAMPLER_NODE>> samplerMap;
unordered_map<VkImageView, VkImageViewCreateInfo> imageViewMap;
unordered_map<VkImage, IMAGE_NODE> imageMap;
- unordered_map<VkBufferView, VkBufferViewCreateInfo> bufferViewMap;
+ unordered_map<VkBufferView, unique_ptr<VkBufferViewCreateInfo>> bufferViewMap;
unordered_map<VkBuffer, unique_ptr<BUFFER_NODE>> bufferMap;
unordered_map<VkPipeline, PIPELINE_NODE *> pipelineMap;
unordered_map<VkCommandPool, CMD_POOL_INFO> commandPoolMap;
@@ -269,6 +269,14 @@ BUFFER_NODE *getBufferNode(const layer_data *my_data, const VkBuffer buffer) {
}
return buff_it->second.get();
}
+// Return buffer node ptr for specified buffer or else NULL
+VkBufferViewCreateInfo *getBufferViewInfo(const layer_data *my_data, const VkBufferView buffer_view) {
+ auto bv_it = my_data->bufferViewMap.find(buffer_view);
+ if (bv_it == my_data->bufferViewMap.end()) {
+ return nullptr;
+ }
+ return bv_it->second.get();
+}
static VkDeviceMemory *get_object_mem_binding(layer_data *my_data, uint64_t handle, VkDebugReportObjectTypeEXT type) {
switch (type) {
@@ -5420,7 +5428,7 @@ VKAPI_ATTR VkResult VKAPI_CALL CreateBufferView(VkDevice device, const VkBufferV
VkResult result = dev_data->device_dispatch_table->CreateBufferView(device, pCreateInfo, pAllocator, pView);
if (VK_SUCCESS == result) {
std::lock_guard<std::mutex> lock(global_lock);
- dev_data->bufferViewMap[*pView] = VkBufferViewCreateInfo(*pCreateInfo);
+ dev_data->bufferViewMap[*pView] = unique_ptr<VkBufferViewCreateInfo>(new VkBufferViewCreateInfo(*pCreateInfo));
// In order to create a valid buffer view, the buffer must have been created with at least one of the
// following flags: UNIFORM_TEXEL_BUFFER_BIT or STORAGE_TEXEL_BUFFER_BIT
validate_buffer_usage_flags(dev_data, pCreateInfo->buffer,
@@ -5877,7 +5885,7 @@ static void PostCallRecordAllocateDescriptorSets(layer_data *dev_data, const VkD
// All the updates are contained in a single cvdescriptorset function
cvdescriptorset::PerformAllocateDescriptorSets(
pAllocateInfo, pDescriptorSets, common_data, &dev_data->descriptorPoolMap, &dev_data->setMap, dev_data,
- dev_data->descriptorSetLayoutMap, dev_data->bufferViewMap, dev_data->samplerMap, dev_data->imageViewMap, dev_data->imageMap,
+ dev_data->descriptorSetLayoutMap, dev_data->samplerMap, dev_data->imageViewMap, dev_data->imageMap,
dev_data->device_extensions.imageToSwapchainMap, dev_data->device_extensions.swapchainMap);
}
diff --git a/layers/core_validation_types.h b/layers/core_validation_types.h
index 1516f41b..fd71b61f 100644
--- a/layers/core_validation_types.h
+++ b/layers/core_validation_types.h
@@ -488,6 +488,7 @@ struct layer_data;
cvdescriptorset::DescriptorSet *getSetNode(const layer_data *, const VkDescriptorSet);
BUFFER_NODE *getBufferNode(const layer_data *, const VkBuffer);
DEVICE_MEM_INFO *getMemObjInfo(const layer_data *, const VkDeviceMemory);
+VkBufferViewCreateInfo *getBufferViewInfo(const layer_data *, const VkBufferView);
}
#endif // CORE_VALIDATION_TYPES_H_
diff --git a/layers/descriptor_sets.cpp b/layers/descriptor_sets.cpp
index 96133c5e..193a8b74 100644
--- a/layers/descriptor_sets.cpp
+++ b/layers/descriptor_sets.cpp
@@ -265,15 +265,14 @@ cvdescriptorset::AllocateDescriptorSetsData::AllocateDescriptorSetsData(uint32_t
cvdescriptorset::DescriptorSet::DescriptorSet(const VkDescriptorSet set, const DescriptorSetLayout *layout,
const core_validation::layer_data *dev_data,
- const std::unordered_map<VkBufferView, VkBufferViewCreateInfo> *buffer_view_map,
const std::unordered_map<VkSampler, std::unique_ptr<SAMPLER_NODE>> *sampler_map,
const std::unordered_map<VkImageView, VkImageViewCreateInfo> *image_view_map,
const std::unordered_map<VkImage, IMAGE_NODE> *image_map,
const std::unordered_map<VkImage, VkSwapchainKHR> *image_to_swapchain_map,
const std::unordered_map<VkSwapchainKHR, SWAPCHAIN_NODE *> *swapchain_map)
- : some_update_(false), set_(set), p_layout_(layout), device_data_(dev_data), buffer_view_map_(buffer_view_map),
- sampler_map_(sampler_map), image_view_map_(image_view_map), image_map_(image_map),
- image_to_swapchain_map_(image_to_swapchain_map), swapchain_map_(swapchain_map) {
+ : some_update_(false), set_(set), p_layout_(layout), device_data_(dev_data), sampler_map_(sampler_map),
+ image_view_map_(image_view_map), image_map_(image_map), image_to_swapchain_map_(image_to_swapchain_map),
+ swapchain_map_(swapchain_map) {
// Foreach binding, create default descriptors of given type
for (uint32_t i = 0; i < p_layout_->GetBindingCount(); ++i) {
auto type = p_layout_->GetTypeFromIndex(i);
@@ -434,9 +433,9 @@ uint32_t cvdescriptorset::DescriptorSet::GetStorageUpdates(const std::unordered_
for (uint32_t i = 0; i < p_layout_->GetDescriptorCountFromBinding(binding); ++i) {
if (descriptors_[start_idx + i]->updated) {
auto bufferview = static_cast<TexelDescriptor *>(descriptors_[start_idx + i].get())->GetBufferView();
- const auto &buff_pair = buffer_view_map_->find(bufferview);
- if (buff_pair != buffer_view_map_->end()) {
- buffer_set->insert(buff_pair->second.buffer);
+ auto bv_info = getBufferViewInfo(device_data_, bufferview);
+ if (bv_info) {
+ buffer_set->insert(bv_info->buffer);
num_updates++;
}
}
@@ -1085,14 +1084,14 @@ bool cvdescriptorset::DescriptorSet::VerifyWriteUpdateContents(const VkWriteDesc
case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER: {
for (uint32_t di = 0; di < update->descriptorCount; ++di) {
auto buffer_view = update->pTexelBufferView[di];
- auto buffer_view_it = buffer_view_map_->find(buffer_view);
- if (buffer_view_it == buffer_view_map_->end()) {
+ auto bv_info = getBufferViewInfo(device_data_, buffer_view);
+ if (!bv_info) {
std::stringstream error_str;
error_str << "Attempted write update to texel buffer descriptor with invalid buffer view: " << buffer_view;
*error = error_str.str();
return false;
}
- auto buffer = buffer_view_it->second.buffer;
+ auto buffer = bv_info->buffer;
if (!ValidateBufferUpdate(buffer, update->descriptorType, error)) {
std::stringstream error_str;
error_str << "Attempted write update to texel buffer descriptor failed due to: " << error->c_str();
@@ -1189,14 +1188,14 @@ bool cvdescriptorset::DescriptorSet::VerifyCopyUpdateContents(const VkCopyDescri
case TexelBuffer: {
for (uint32_t di = 0; di < update->descriptorCount; ++di) {
auto buffer_view = static_cast<TexelDescriptor *>(src_set->descriptors_[index + di].get())->GetBufferView();
- auto bv_it = buffer_view_map_->find(buffer_view);
- if (bv_it == buffer_view_map_->end()) {
+ auto bv_info = getBufferViewInfo(device_data_, buffer_view);
+ if (!bv_info) {
std::stringstream error_str;
error_str << "Attempted copy update to texel buffer descriptor with invalid buffer view: " << buffer_view;
*error = error_str.str();
return false;
}
- auto buffer = bv_it->second.buffer;
+ auto buffer = bv_info->buffer;
if (!ValidateBufferUpdate(buffer, type, error)) {
std::stringstream error_str;
error_str << "Attempted copy update to texel buffer descriptor failed due to: " << error->c_str();
@@ -1288,7 +1287,6 @@ void cvdescriptorset::PerformAllocateDescriptorSets(
const AllocateDescriptorSetsData *ds_data, std::unordered_map<VkDescriptorPool, DESCRIPTOR_POOL_NODE *> *pool_map,
std::unordered_map<VkDescriptorSet, cvdescriptorset::DescriptorSet *> *set_map, const core_validation::layer_data *dev_data,
const std::unordered_map<VkDescriptorSetLayout, cvdescriptorset::DescriptorSetLayout *> &layout_map,
- const std::unordered_map<VkBufferView, VkBufferViewCreateInfo> &buffer_view_map,
const std::unordered_map<VkSampler, std::unique_ptr<SAMPLER_NODE>> &sampler_map,
const std::unordered_map<VkImageView, VkImageViewCreateInfo> &image_view_map,
const std::unordered_map<VkImage, IMAGE_NODE> &image_map,
@@ -1304,9 +1302,8 @@ void cvdescriptorset::PerformAllocateDescriptorSets(
* global map and the pool's set.
*/
for (uint32_t i = 0; i < p_alloc_info->descriptorSetCount; i++) {
- auto new_ds =
- new cvdescriptorset::DescriptorSet(descriptor_sets[i], ds_data->layout_nodes[i], dev_data, &buffer_view_map,
- &sampler_map, &image_view_map, &image_map, &image_to_swapchain_map, &swapchain_map);
+ auto new_ds = new cvdescriptorset::DescriptorSet(descriptor_sets[i], ds_data->layout_nodes[i], dev_data, &sampler_map,
+ &image_view_map, &image_map, &image_to_swapchain_map, &swapchain_map);
pool_state->sets.insert(new_ds);
new_ds->in_use.store(0);
diff --git a/layers/descriptor_sets.h b/layers/descriptor_sets.h
index 193ef75e..fcb409cc 100644
--- a/layers/descriptor_sets.h
+++ b/layers/descriptor_sets.h
@@ -269,7 +269,6 @@ void PerformAllocateDescriptorSets(const VkDescriptorSetAllocateInfo *, const Vk
std::unordered_map<VkDescriptorSet, cvdescriptorset::DescriptorSet *> *,
const core_validation::layer_data *,
const std::unordered_map<VkDescriptorSetLayout, cvdescriptorset::DescriptorSetLayout *> &,
- const std::unordered_map<VkBufferView, VkBufferViewCreateInfo> &,
const std::unordered_map<VkSampler, std::unique_ptr<SAMPLER_NODE>> &,
const std::unordered_map<VkImageView, VkImageViewCreateInfo> &,
const std::unordered_map<VkImage, IMAGE_NODE> &,
@@ -298,7 +297,6 @@ class DescriptorSet : public BASE_NODE {
public:
using BASE_NODE::in_use;
DescriptorSet(const VkDescriptorSet, const DescriptorSetLayout *, const core_validation::layer_data *,
- const std::unordered_map<VkBufferView, VkBufferViewCreateInfo> *,
const std::unordered_map<VkSampler, std::unique_ptr<SAMPLER_NODE>> *,
const std::unordered_map<VkImageView, VkImageViewCreateInfo> *, const std::unordered_map<VkImage, IMAGE_NODE> *,
const std::unordered_map<VkImage, VkSwapchainKHR> *,