diff options
| author | Mike Stroyan <mike@LunarG.com> | 2015-09-25 13:39:21 -0600 |
|---|---|---|
| committer | Mike Stroyan <mike@LunarG.com> | 2015-10-08 13:00:20 -0600 |
| commit | 8a5ab8aadfd719f8d57858aeb6d5370ad0e89095 (patch) | |
| tree | 486d0b73b353aaeb5851666182f0fef84ca6011a /layers/device_limits.cpp | |
| parent | 80034dd427a3a2e998b092892a2a2c58951bff09 (diff) | |
| download | usermoji-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.cpp | 64 |
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; { |
