aboutsummaryrefslogtreecommitdiff
path: root/layers/device_limits.cpp
diff options
context:
space:
mode:
authorMike Stroyan <mike@LunarG.com>2015-09-25 13:39:21 -0600
committerMike Stroyan <mike@LunarG.com>2015-10-08 13:00:20 -0600
commit8a5ab8aadfd719f8d57858aeb6d5370ad0e89095 (patch)
tree486d0b73b353aaeb5851666182f0fef84ca6011a /layers/device_limits.cpp
parent80034dd427a3a2e998b092892a2a2c58951bff09 (diff)
downloadusermoji-8a5ab8aadfd719f8d57858aeb6d5370ad0e89095.tar.xz
intel,layers,tests: move cmd_meta errors to validation
Add checks for alignment in DeviceLimits layer. Add checks for type, format and sample count in Images layer. Remove such checks from intel icd. Add new validations to layer_validation_tests.
Diffstat (limited to 'layers/device_limits.cpp')
-rw-r--r--layers/device_limits.cpp64
1 files changed, 64 insertions, 0 deletions
diff --git a/layers/device_limits.cpp b/layers/device_limits.cpp
index b991a86a..12ec4835 100644
--- a/layers/device_limits.cpp
+++ b/layers/device_limits.cpp
@@ -552,6 +552,66 @@ VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(
return result;
}
+VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(
+ VkCmdBuffer cmdBuffer,
+ VkBuffer destBuffer,
+ VkDeviceSize destOffset,
+ VkDeviceSize dataSize,
+ const uint32_t* pData)
+{
+ layer_data *dev_data = get_my_data_ptr(get_dispatch_key(cmdBuffer), layer_data_map);
+
+ // destOffset is the byte offset into the buffer to start updating and must be a multiple of 4.
+ if (destOffset & 3) {
+ layer_data *my_data = get_my_data_ptr(get_dispatch_key(cmdBuffer), layer_data_map);
+ if (log_msg(my_data->report_data, VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "DL",
+ "vkCmdUpdateBuffer parameter, VkDeviceSize destOffset, is not a multiple of 4")) {
+ return;
+ }
+ }
+
+ // dataSize is the number of bytes to update, which must be a multiple of 4.
+ if (dataSize & 3) {
+ layer_data *my_data = get_my_data_ptr(get_dispatch_key(cmdBuffer), layer_data_map);
+ if (log_msg(my_data->report_data, VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "DL",
+ "vkCmdUpdateBuffer parameter, VkDeviceSize dataSize, is not a multiple of 4")) {
+ return;
+ }
+ }
+
+ dev_data->device_dispatch_table->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
+}
+
+VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(
+ VkCmdBuffer cmdBuffer,
+ VkBuffer destBuffer,
+ VkDeviceSize destOffset,
+ VkDeviceSize fillSize,
+ uint32_t data)
+{
+ layer_data *dev_data = get_my_data_ptr(get_dispatch_key(cmdBuffer), layer_data_map);
+
+ // destOffset is the byte offset into the buffer to start filling and must be a multiple of 4.
+ if (destOffset & 3) {
+ layer_data *my_data = get_my_data_ptr(get_dispatch_key(cmdBuffer), layer_data_map);
+ if (log_msg(my_data->report_data, VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "DL",
+ "vkCmdFillBuffer parameter, VkDeviceSize destOffset, is not a multiple of 4")) {
+ return;
+ }
+ }
+
+ // fillSize is the number of bytes to fill, which must be a multiple of 4.
+ if (fillSize & 3) {
+ layer_data *my_data = get_my_data_ptr(get_dispatch_key(cmdBuffer), layer_data_map);
+ if (log_msg(my_data->report_data, VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "DL",
+ "vkCmdFillBuffer parameter, VkDeviceSize fillSize, is not a multiple of 4")) {
+ return;
+ }
+ }
+
+ dev_data->device_dispatch_table->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
+}
+
VK_LAYER_EXPORT VkResult VKAPI vkDbgCreateMsgCallback(
VkInstance instance,
VkFlags msgFlags,
@@ -610,6 +670,10 @@ VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice dev, const
return (PFN_vkVoidFunction) vkCreateCommandBuffer;
if (!strcmp(funcName, "vkDestroyCommandBuffer"))
return (PFN_vkVoidFunction) vkDestroyCommandBuffer;
+ if (!strcmp(funcName, "vkCmdUpdateBuffer"))
+ return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
+ if (!strcmp(funcName, "vkCmdFillBuffer"))
+ return (PFN_vkVoidFunction) vkCmdFillBuffer;
VkLayerDispatchTable* pTable = my_data->device_dispatch_table;
{