aboutsummaryrefslogtreecommitdiff
path: root/layers/parameter_validation_utils.cpp
diff options
context:
space:
mode:
authorJeremy Kniager <jeremyk@lunarg.com>2017-11-15 13:27:03 -0700
committerjeremyk-lunarg <jeremyk@lunarg.com>2018-01-16 11:59:09 -0700
commit32813b4140b58bc057d7bbb9ce39d67130d854dc (patch)
treef4345dcce2b6d551f8e59edf8c24c5e6b41386b9 /layers/parameter_validation_utils.cpp
parent83bcda46c4d319314dfbd4882e5f67e3ada2ea88 (diff)
downloadusermoji-32813b4140b58bc057d7bbb9ce39d67130d854dc.tar.xz
layers: Add checks for extention DynamicViewports
Change-Id: I2819d47ab163519689ece94535c6c880f275bf72
Diffstat (limited to 'layers/parameter_validation_utils.cpp')
-rw-r--r--layers/parameter_validation_utils.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/layers/parameter_validation_utils.cpp b/layers/parameter_validation_utils.cpp
index 694a3f92..598d9766 100644
--- a/layers/parameter_validation_utils.cpp
+++ b/layers/parameter_validation_utils.cpp
@@ -975,6 +975,9 @@ bool pv_vkCreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache
bool has_dynamic_viewport = false;
bool has_dynamic_scissor = false;
bool has_dynamic_line_width = false;
+ bool has_dynamic_viewport_w_scaling_nv = false;
+ bool has_dynamic_discard_rectangle_ext = false;
+ bool has_dynamic_sample_locations_ext = false;
if (pCreateInfos[i].pDynamicState != nullptr) {
const auto &dynamic_state_info = *pCreateInfos[i].pDynamicState;
for (uint32_t state_index = 0; state_index < dynamic_state_info.dynamicStateCount; ++state_index) {
@@ -982,6 +985,9 @@ bool pv_vkCreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache
if (dynamic_state == VK_DYNAMIC_STATE_VIEWPORT) has_dynamic_viewport = true;
if (dynamic_state == VK_DYNAMIC_STATE_SCISSOR) has_dynamic_scissor = true;
if (dynamic_state == VK_DYNAMIC_STATE_LINE_WIDTH) has_dynamic_line_width = true;
+ if (dynamic_state == VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV) has_dynamic_viewport_w_scaling_nv = true;
+ if (dynamic_state == VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT) has_dynamic_discard_rectangle_ext = true;
+ if (dynamic_state == VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT) has_dynamic_sample_locations_ext = true;
}
}
@@ -1221,6 +1227,36 @@ bool pv_vkCreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache
}
// TODO: validate the VkViewports in pViewports here
+
+ if (has_dynamic_viewport_w_scaling_nv && !device_data->extensions.vk_nv_clip_space_w_scaling) {
+ skip |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT,
+ VK_NULL_HANDLE, __LINE__, EXTENSION_NOT_ENABLED, LayerName,
+ "vkCreateGraphicsPipelines: pCreateInfos[%" PRIu32
+ "].pDynamicState->pDynamicStates "
+ "contains VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV, but "
+ "VK_NV_clip_space_w_scaling extension is not enabled.",
+ i);
+ }
+
+ if (has_dynamic_discard_rectangle_ext && !device_data->extensions.vk_ext_discard_rectangles) {
+ skip |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT,
+ VK_NULL_HANDLE, __LINE__, EXTENSION_NOT_ENABLED, LayerName,
+ "vkCreateGraphicsPipelines: pCreateInfos[%" PRIu32
+ "].pDynamicState->pDynamicStates "
+ "contains VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT, but "
+ "VK_EXT_discard_rectangles extension is not enabled.",
+ i);
+ }
+
+ if (has_dynamic_sample_locations_ext && !device_data->extensions.vk_ext_sample_locations) {
+ skip |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT,
+ VK_NULL_HANDLE, __LINE__, EXTENSION_NOT_ENABLED, LayerName,
+ "vkCreateGraphicsPipelines: pCreateInfos[%" PRIu32
+ "].pDynamicState->pDynamicStates "
+ "contains VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT, but "
+ "VK_EXT_sample_locations extension is not enabled.",
+ i);
+ }
}
if (pCreateInfos[i].pMultisampleState == nullptr) {