layers: Finish multiViewport dev feature validation
Change-Id: I58397785e7b73099d2a890246207075dae643652
diff --git a/layers/parameter_validation.cpp b/layers/parameter_validation.cpp
index 8cd7df7..f0b3704 100644
--- a/layers/parameter_validation.cpp
+++ b/layers/parameter_validation.cpp
@@ -4166,7 +4166,7 @@
}
}
-static bool preCmdSetViewport(layer_data *my_data, uint32_t viewport_count, const VkViewport *viewports) {
+static bool preCmdSetViewport(layer_data *my_data, uint32_t first_viewport, uint32_t viewport_count, const VkViewport *viewports) {
debug_report_data *report_data = my_data->report_data;
bool skip =
@@ -4177,6 +4177,23 @@
for (uint32_t viewportIndex = 0; viewportIndex < viewport_count; ++viewportIndex) {
const VkViewport &viewport = viewports[viewportIndex];
+ if (my_data->physical_device_features.multiViewport == false) {
+ if (viewport_count != 1) {
+ skip |= log_msg(
+ report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__,
+ DEVICE_FEATURE, LayerName,
+ "vkCmdSetViewport(): The multiViewport feature is not enabled, so viewportCount must be 1 but is %d.",
+ viewport_count);
+ }
+ if (first_viewport != 0) {
+ skip |= log_msg(
+ report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__,
+ DEVICE_FEATURE, LayerName,
+ "vkCmdSetViewport(): The multiViewport feature is not enabled, so firstViewport must be 0 but is %d.",
+ first_viewport);
+ }
+ }
+
if (viewport.width <= 0 || viewport.width > limits.maxViewportDimensions[0]) {
skip |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__,
VALIDATION_ERROR_01448, LayerName,
@@ -4239,7 +4256,7 @@
layer_data *my_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
assert(my_data != NULL);
- skip |= preCmdSetViewport(my_data, viewportCount, pViewports);
+ skip |= preCmdSetViewport(my_data, firstViewport, viewportCount, pViewports);
if (!skip) {
my_data->dispatch_table.CmdSetViewport(commandBuffer, firstViewport, viewportCount, pViewports);
@@ -4255,6 +4272,21 @@
skip |= parameter_validation_vkCmdSetScissor(my_data->report_data, firstScissor, scissorCount, pScissors);
+ if (my_data->physical_device_features.multiViewport == false) {
+ if (scissorCount != 1) {
+ skip |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__,
+ DEVICE_FEATURE, LayerName,
+ "vkCmdSetScissor(): The multiViewport feature is not enabled, so scissorCount must be 1 but is %d.",
+ scissorCount);
+ }
+ if (firstScissor != 0) {
+ skip |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__,
+ DEVICE_FEATURE, LayerName,
+ "vkCmdSetScissor(): The multiViewport feature is not enabled, so firstScissor must be 0 but is %d.",
+ firstScissor);
+ }
+ }
+
for (uint32_t scissorIndex = 0; scissorIndex < scissorCount; ++scissorIndex) {
const VkRect2D &pScissor = pScissors[scissorIndex];