layers: Remove unneeded VulkanTypedHandle lookups
Using GetObjectMemBinding() to convert typed handle to a state object
when the caller already has the state object is not useful.
GetStateStructPtrFromObject() is no longer used.
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp
index 38db15a..be54215 100644
--- a/layers/core_validation.cpp
+++ b/layers/core_validation.cpp
@@ -215,13 +215,12 @@
// Otherwise, add reference from objectInfo to memoryInfo
// Add reference off of objInfo
// TODO: We may need to refactor or pass in multiple valid usage statements to handle multiple valid usage conditions.
-bool CoreChecks::ValidateSetMemBinding(VkDeviceMemory mem, const VulkanTypedHandle &typed_handle, const char *apiName) const {
+bool CoreChecks::ValidateSetMemBinding(VkDeviceMemory mem, const BINDABLE &mem_binding, const char *apiName) const {
bool skip = false;
// It's an error to bind an object to NULL memory
if (mem != VK_NULL_HANDLE) {
- const BINDABLE *mem_binding = ValidationStateTracker::GetObjectMemBinding(typed_handle);
- assert(mem_binding);
- if (mem_binding->sparse) {
+ auto typed_handle = mem_binding.Handle();
+ if (mem_binding.sparse) {
const char *error_code = nullptr;
const char *handle_type = nullptr;
if (typed_handle.type == kVulkanObjectTypeBuffer) {
@@ -253,7 +252,7 @@
}
const DEVICE_MEMORY_STATE *mem_info = ValidationStateTracker::GetDevMemState(mem);
if (mem_info) {
- const DEVICE_MEMORY_STATE *prev_binding = mem_binding->MemState();
+ const auto prev_binding = mem_binding.MemState();
if (prev_binding) {
if (!prev_binding->Destroyed()) {
const char *error_code = nullptr;
@@ -4881,7 +4880,7 @@
bool skip = false;
if (buffer_state) {
// Track objects tied to memory
- skip = ValidateSetMemBinding(mem, buffer_state->Handle(), api_name);
+ skip = ValidateSetMemBinding(mem, *buffer_state, api_name);
const auto mem_info = GetDevMemState(mem);
@@ -12775,8 +12774,7 @@
const IMAGE_STATE *image_state = GetImageState(bind_info.image);
if (image_state) {
// Track objects tied to memory
- skip |=
- ValidateSetMemBinding(bind_info.memory, image_state->Handle(), error_prefix);
+ skip |= ValidateSetMemBinding(bind_info.memory, *image_state, error_prefix);
const auto plane_info = LvlFindInChain<VkBindImagePlaneMemoryInfo>(bind_info.pNext);
const auto mem_info = GetDevMemState(bind_info.memory);
diff --git a/layers/core_validation.h b/layers/core_validation.h
index e9e77bf..dac4979 100644
--- a/layers/core_validation.h
+++ b/layers/core_validation.h
@@ -146,7 +146,7 @@
};
bool VerifyQueueStateToSeq(const QUEUE_STATE* initial_queue, uint64_t initial_seq) const;
- bool ValidateSetMemBinding(VkDeviceMemory mem, const VulkanTypedHandle& typed_handle, const char* apiName) const;
+ bool ValidateSetMemBinding(VkDeviceMemory mem, const BINDABLE& mem_binding, const char* apiName) const;
bool ValidateDeviceQueueFamily(uint32_t queue_family, const char* cmd_name, const char* parameter_name, const char* error_code,
bool optional) const;
bool ValidateBindBufferMemory(VkBuffer buffer, VkDeviceMemory mem, VkDeviceSize memoryOffset, const char* api_name) const;
diff --git a/layers/state_tracker.cpp b/layers/state_tracker.cpp
index 3e476b7..3c3b692 100644
--- a/layers/state_tracker.cpp
+++ b/layers/state_tracker.cpp
@@ -400,119 +400,6 @@
GetImageState(pCopyBufferToImageInfo->dstImage));
}
-// Return ptr to memory binding for given handle of specified type
-template <typename State, typename Result>
-static Result GetObjectMemBindingImpl(State state, const VulkanTypedHandle &typed_handle) {
- switch (typed_handle.type) {
- case kVulkanObjectTypeImage:
- return state->GetImageState(typed_handle.Cast<VkImage>());
- case kVulkanObjectTypeBuffer:
- return state->GetBufferState(typed_handle.Cast<VkBuffer>());
- case kVulkanObjectTypeAccelerationStructureNV:
- return state->GetAccelerationStructureStateNV(typed_handle.Cast<VkAccelerationStructureNV>());
- default:
- break;
- }
- return nullptr;
-}
-
-const BINDABLE *ValidationStateTracker::GetObjectMemBinding(const VulkanTypedHandle &typed_handle) const {
- return GetObjectMemBindingImpl<const ValidationStateTracker *, const BINDABLE *>(this, typed_handle);
-}
-
-BINDABLE *ValidationStateTracker::GetObjectMemBinding(const VulkanTypedHandle &typed_handle) {
- return GetObjectMemBindingImpl<ValidationStateTracker *, BINDABLE *>(this, typed_handle);
-}
-
-// For given object struct return a ptr of BASE_NODE type for its wrapping struct
-BASE_NODE *ValidationStateTracker::GetStateStructPtrFromObject(const VulkanTypedHandle &object_struct) {
- if (object_struct.node) {
-#ifdef _DEBUG
- // assert that lookup would find the same object
- VulkanTypedHandle other = object_struct;
- other.node = nullptr;
- assert(object_struct.node == GetStateStructPtrFromObject(other));
-#endif
- return object_struct.node;
- }
- BASE_NODE *base_ptr = nullptr;
- switch (object_struct.type) {
- case kVulkanObjectTypeDescriptorSet: {
- base_ptr = GetSetNode(object_struct.Cast<VkDescriptorSet>());
- break;
- }
- case kVulkanObjectTypeSampler: {
- base_ptr = GetSamplerState(object_struct.Cast<VkSampler>());
- break;
- }
- case kVulkanObjectTypeQueryPool: {
- base_ptr = GetQueryPoolState(object_struct.Cast<VkQueryPool>());
- break;
- }
- case kVulkanObjectTypePipeline: {
- base_ptr = GetPipelineState(object_struct.Cast<VkPipeline>());
- break;
- }
- case kVulkanObjectTypeBuffer: {
- base_ptr = GetBufferState(object_struct.Cast<VkBuffer>());
- break;
- }
- case kVulkanObjectTypeBufferView: {
- base_ptr = GetBufferViewState(object_struct.Cast<VkBufferView>());
- break;
- }
- case kVulkanObjectTypeImage: {
- base_ptr = GetImageState(object_struct.Cast<VkImage>());
- break;
- }
- case kVulkanObjectTypeImageView: {
- base_ptr = GetImageViewState(object_struct.Cast<VkImageView>());
- break;
- }
- case kVulkanObjectTypeEvent: {
- base_ptr = GetEventState(object_struct.Cast<VkEvent>());
- break;
- }
- case kVulkanObjectTypeDescriptorPool: {
- base_ptr = GetDescriptorPoolState(object_struct.Cast<VkDescriptorPool>());
- break;
- }
- case kVulkanObjectTypeCommandPool: {
- base_ptr = GetCommandPoolState(object_struct.Cast<VkCommandPool>());
- break;
- }
- case kVulkanObjectTypeFramebuffer: {
- base_ptr = GetFramebufferState(object_struct.Cast<VkFramebuffer>());
- break;
- }
- case kVulkanObjectTypeRenderPass: {
- base_ptr = GetRenderPassState(object_struct.Cast<VkRenderPass>());
- break;
- }
- case kVulkanObjectTypeDeviceMemory: {
- base_ptr = GetDevMemState(object_struct.Cast<VkDeviceMemory>());
- break;
- }
- case kVulkanObjectTypeAccelerationStructureNV: {
- base_ptr = GetAccelerationStructureStateNV(object_struct.Cast<VkAccelerationStructureNV>());
- break;
- }
- case kVulkanObjectTypeAccelerationStructureKHR: {
- base_ptr = GetAccelerationStructureStateKHR(object_struct.Cast<VkAccelerationStructureKHR>());
- break;
- }
- case kVulkanObjectTypeUnknown:
- // This can happen if an element of the object_bindings vector has been
- // zeroed out, after an object is destroyed.
- break;
- default:
- // TODO : Any other objects to be handled here?
- assert(0);
- break;
- }
- return base_ptr;
-}
-
// Gets union of all features defined by Potential Format Features
// except, does not handle the external format case for AHB as that only can be used for sampled images
VkFormatFeatureFlags ValidationStateTracker::GetPotentialFormatFeatures(VkFormat format) const {
diff --git a/layers/state_tracker.h b/layers/state_tracker.h
index 4b97544..535e224 100644
--- a/layers/state_tracker.h
+++ b/layers/state_tracker.h
@@ -1166,7 +1166,6 @@
std::vector<std::shared_ptr<const IMAGE_VIEW_STATE>> GetSharedAttachmentViews(const VkRenderPassBeginInfo& rp_begin,
const FRAMEBUFFER_STATE& fb_state) const;
- BASE_NODE* GetStateStructPtrFromObject(const VulkanTypedHandle& object_struct);
VkFormatFeatureFlags GetPotentialFormatFeatures(VkFormat format) const;
void PerformUpdateDescriptorSetsWithTemplateKHR(VkDescriptorSet descriptorSet, const UPDATE_TEMPLATE_STATE* template_state,
const void* pData);