aboutsummaryrefslogtreecommitdiff
path: root/layers
diff options
context:
space:
mode:
authorMark Lobodzinski <mark@lunarg.com>2016-06-28 11:51:16 -0600
committerMark Lobodzinski <mark@lunarg.com>2016-06-29 13:52:13 -0600
commit5e3464fdc5641facac9f6f128ccf759bbcb860a8 (patch)
tree7b46f493228a3babf709d444c18debb1f99aaf05 /layers
parent79bfe8ac5066bbda39e2b1cac62e142bb34ed9e5 (diff)
downloadusermoji-5e3464fdc5641facac9f6f128ccf759bbcb860a8.tar.xz
layers: Moved devlimits UpdateDescrSets to PV
DevLimits GetDeviceQueue validation was redundant, moved updateDescriptorSets devlimits validation into parameter validation. Change-Id: Ic7bf2450c835cb5a35b687be5872cbbd0d70ac95
Diffstat (limited to 'layers')
-rw-r--r--layers/core_validation_error_enums.h6
-rw-r--r--layers/parameter_validation.cpp33
2 files changed, 35 insertions, 4 deletions
diff --git a/layers/core_validation_error_enums.h b/layers/core_validation_error_enums.h
index 7f6329c0..7602fe9f 100644
--- a/layers/core_validation_error_enums.h
+++ b/layers/core_validation_error_enums.h
@@ -255,8 +255,8 @@ enum DEV_LIMITS_ERROR {
DEVLIMITS_INVALID_CALL_SEQUENCE, // Flag generic case of an invalid call sequence by the app
DEVLIMITS_INVALID_FEATURE_REQUESTED, // App requested a feature not supported by physical device
DEVLIMITS_COUNT_MISMATCH, // App requesting a count value different than actual value
- DEVLIMITS_INVALID_QUEUE_CREATE_REQUEST, // Invalid queue requested based on queue family properties
- DEVLIMITS_INVALID_UNIFORM_BUFFER_OFFSET, // Uniform buffer offset violates device limit granularity
- DEVLIMITS_INVALID_STORAGE_BUFFER_OFFSET, // Storage buffer offset violates device limit granularity
+// LUGMAL DEVLIMITS_INVALID_QUEUE_CREATE_REQUEST, // Invalid queue requested based on queue family properties -> deleted
+// LUGMAL DEVLIMITS_INVALID_UNIFORM_BUFFER_OFFSET, // Uniform buffer offset violates device limit granularity -> device_limit
+// LUGMAL DEVLIMITS_INVALID_STORAGE_BUFFER_OFFSET, // Storage buffer offset violates device limit granularity -> device_limit
};
#endif // CORE_VALIDATION_ERROR_ENUMS_H_
diff --git a/layers/parameter_validation.cpp b/layers/parameter_validation.cpp
index d6ffe63b..a724cabf 100644
--- a/layers/parameter_validation.cpp
+++ b/layers/parameter_validation.cpp
@@ -1709,7 +1709,6 @@ bool PreGetDeviceQueue(VkDevice device, uint32_t queueFamilyIndex, uint32_t queu
queueIndex);
return false;
}
-
return true;
}
@@ -3516,6 +3515,38 @@ UpdateDescriptorSets(VkDevice device, uint32_t descriptorWriteCount, const VkWri
}
}
}
+
+ if ((pDescriptorWrites[i].descriptorType == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER) ||
+ (pDescriptorWrites[i].descriptorType == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC)) {
+ VkDeviceSize uniformAlignment = device_data->device_limits.minUniformBufferOffsetAlignment;
+ for (uint32_t j = 0; j < pDescriptorWrites[i].descriptorCount; j++) {
+ if (pDescriptorWrites[i].pBufferInfo != NULL) {
+ if (vk_safe_modulo(pDescriptorWrites[i].pBufferInfo[j].offset, uniformAlignment) != 0) {
+ skip_call |=
+ log_msg(device_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT,
+ VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, 0, __LINE__, DEVICE_LIMIT, "PARAMCHECK",
+ "vkUpdateDescriptorSets(): pDescriptorWrites[%d].pBufferInfo[%d].offset (0x%" PRIxLEAST64
+ ") must be a multiple of device limit minUniformBufferOffsetAlignment 0x%" PRIxLEAST64,
+ i, j, pDescriptorWrites[i].pBufferInfo[j].offset, uniformAlignment);
+ }
+ }
+ }
+ } else if ((pDescriptorWrites[i].descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER) ||
+ (pDescriptorWrites[i].descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC)) {
+ VkDeviceSize storageAlignment = device_data->device_limits.minStorageBufferOffsetAlignment;
+ for (uint32_t j = 0; j < pDescriptorWrites[i].descriptorCount; j++) {
+ if (pDescriptorWrites[i].pBufferInfo != NULL) {
+ if (vk_safe_modulo(pDescriptorWrites[i].pBufferInfo[j].offset, storageAlignment) != 0) {
+ skip_call |=
+ log_msg(device_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT,
+ VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, 0, __LINE__, DEVICE_LIMIT, "PARAMCHECK",
+ "vkUpdateDescriptorSets(): pDescriptorWrites[%d].pBufferInfo[%d].offset (0x%" PRIxLEAST64
+ ") must be a multiple of device limit minStorageBufferOffsetAlignment 0x%" PRIxLEAST64,
+ i, j, pDescriptorWrites[i].pBufferInfo[j].offset, storageAlignment);
+ }
+ }
+ }
+ }
}
}