VALIDATION_ERROR_10000624~^~Y~^~InvalidPipelineSampleRateFeatureEnable~^~vkCmdSetViewport~^~VUID-VkPipelineMultisampleStateCreateInfo-minSampleShading-00786~^~core~^~The spec valid usage text states 'minSampleShading must be in the range [0,1]' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkPipelineMultisampleStateCreateInfo-minSampleShading-00786)~^~
VALIDATION_ERROR_10000b0e~^~N~^~None~^~VkPipelineMultisampleStateCreateInfo~^~VUID-VkPipelineMultisampleStateCreateInfo-rasterizationSamples-01415~^~(VK_NV_framebuffer_mixed_samples)~^~The spec valid usage text states 'If the subpass has any color attachments and rasterizationSamples is greater than the number of color samples, then sampleShadingEnable must be VK_FALSE' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VUID-VkPipelineMultisampleStateCreateInfo-rasterizationSamples-01415)~^~
VALIDATION_ERROR_10009005~^~Y~^~Unknown~^~vkCmdSetViewport~^~VUID-VkPipelineMultisampleStateCreateInfo-flags-zerobitmask~^~core~^~The spec valid usage text states 'flags must be 0' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkPipelineMultisampleStateCreateInfo-flags-zerobitmask)~^~implicit, TBD in parameter validation layer.
-VALIDATION_ERROR_1001c40d~^~Y~^~Unknown~^~vkCmdSetViewport~^~VUID-VkPipelineMultisampleStateCreateInfo-pNext-pNext~^~core~^~The spec valid usage text states 'Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkPipelineCoverageModulationStateCreateInfoNV, VkPipelineCoverageToColorStateCreateInfoNV, or VkPipelineSampleLocationsStateCreateInfoEXT' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkPipelineMultisampleStateCreateInfo-pNext-pNext)~^~implicit, TBD in parameter validation layer.
+VALIDATION_ERROR_1001c40d~^~Y~^~InvalidPipelineSamplePNext~^~vkCmdSetViewport~^~VUID-VkPipelineMultisampleStateCreateInfo-pNext-pNext~^~core~^~The spec valid usage text states 'Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkPipelineCoverageModulationStateCreateInfoNV, VkPipelineCoverageToColorStateCreateInfoNV, or VkPipelineSampleLocationsStateCreateInfoEXT' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkPipelineMultisampleStateCreateInfo-pNext-pNext)~^~implicit, TBD in parameter validation layer.
VALIDATION_ERROR_10022201~^~N~^~Unknown~^~vkCmdSetViewport~^~VUID-VkPipelineMultisampleStateCreateInfo-pSampleMask-parameter~^~core~^~The spec valid usage text states 'If pSampleMask is not NULL, pSampleMask must be a valid pointer to an array of (lceil{mathit{rasterizationSamples} over 32}rceil) VkSampleMask values' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkPipelineMultisampleStateCreateInfo-pSampleMask-parameter)~^~implicit
VALIDATION_ERROR_1002a801~^~N~^~Unknown~^~vkCmdSetViewport~^~VUID-VkPipelineMultisampleStateCreateInfo-rasterizationSamples-parameter~^~core~^~The spec valid usage text states 'rasterizationSamples must be a valid VkSampleCountFlagBits value' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkPipelineMultisampleStateCreateInfo-rasterizationSamples-parameter)~^~implicit
VALIDATION_ERROR_1002b00b~^~N~^~Unknown~^~vkCmdSetViewport~^~VUID-VkPipelineMultisampleStateCreateInfo-sType-sType~^~core~^~The spec valid usage text states 'sType must be VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkPipelineMultisampleStateCreateInfo-sType-sType)~^~implicit, TBD in parameter validation layer.
}
};
};
+namespace chain_util {
+template <typename T>
+T Init(const void *pnext_in = nullptr) {
+ T pnext_obj = {};
+ pnext_obj.sType = LvlTypeMap<T>::kSType;
+ pnext_obj.pNext = pnext_in;
+ return pnext_obj;
+}
+class ExtensionChain {
+ const void *head_ = nullptr;
+ typedef std::function<bool(const char *)> AddIfFunction;
+ AddIfFunction add_if_;
+ typedef std::vector<const char *> List;
+ List *list_;
+
+ public:
+ template <typename F>
+ ExtensionChain(F &add_if, List *list) : add_if_(add_if), list_(list) {}
+ template <typename T>
+ void Add(const char *name, T &obj) {
+ if (add_if_(name)) {
+ if (list_) {
+ list_->push_back(name);
+ }
+ obj.pNext = head_;
+ head_ = &obj;
+ }
+ }
+ const void *Head() const { return head_; }
+};
+}; // namespace chain_util
// ********************************************************************************************************************
// ********************************************************************************************************************
range_test(1.0, /* positive_test= */ true);
}
+TEST_F(VkLayerTest, InvalidPipelineSamplePNext) {
+ // Enable sample shading in pipeline when the feature is disabled.
+ ASSERT_NO_FATAL_FAILURE(InitFramework(myDbgFunc, m_errorMonitor));
+
+ // Set up the extension structs
+ auto sampleLocations = chain_util::Init<VkPipelineSampleLocationsStateCreateInfoEXT>();
+ auto coverageToColor = chain_util::Init<VkPipelineCoverageToColorStateCreateInfoNV>();
+ auto coverageModulation = chain_util::Init<VkPipelineCoverageModulationStateCreateInfoNV>();
+ auto discriminatrix = [this](const char *name) { return DeviceExtensionSupported(gpu(), nullptr, name); };
+ chain_util::ExtensionChain chain(discriminatrix, &m_device_extension_names);
+ chain.Add(VK_EXT_SAMPLE_LOCATIONS_EXTENSION_NAME, sampleLocations);
+ chain.Add(VK_NV_FRAGMENT_COVERAGE_TO_COLOR_EXTENSION_NAME, coverageToColor);
+ chain.Add(VK_NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME, coverageModulation);
+ const void *extension_head = chain.Head();
+
+ ASSERT_NO_FATAL_FAILURE(InitState());
+ ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
+
+ if (extension_head) {
+ auto good_chain = [extension_head](CreatePipelineHelper &helper) { helper.pipe_ms_state_ci_.pNext = extension_head; };
+ CreatePipelineHelper::OneshotTest(*this, good_chain, (VK_DEBUG_REPORT_ERROR_BIT_EXT | VK_DEBUG_REPORT_WARNING_BIT_EXT),
+ "No error", true);
+ } else {
+ printf(" Required extension not present -- skipping positive checks.\n");
+ }
+
+ auto instance_ci = chain_util::Init<VkInstanceCreateInfo>();
+ auto bad_chain = [&instance_ci](CreatePipelineHelper &helper) { helper.pipe_ms_state_ci_.pNext = &instance_ci; };
+ CreatePipelineHelper::OneshotTest(*this, bad_chain, VK_DEBUG_REPORT_WARNING_BIT_EXT, VALIDATION_ERROR_1001c40d);
+}
+
/*// TODO : This test should be good, but needs Tess support in compiler to run
TEST_F(VkLayerTest, InvalidPatchControlPoints)
{