tests: Add ability to override tessellation state, use it.
This fixes the remaining issue with the tess positive test.
Signed-off-by: Chris Forbes <chrisforbes@google.com>
diff --git a/tests/layer_validation_tests.cpp b/tests/layer_validation_tests.cpp
index e6f5391..9a1d29a 100644
--- a/tests/layer_validation_tests.cpp
+++ b/tests/layer_validation_tests.cpp
@@ -5958,8 +5958,15 @@
VK_PRIMITIVE_TOPOLOGY_PATCH_LIST,
VK_FALSE};
+ VkPipelineTessellationStateCreateInfo tsci{
+ VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO,
+ nullptr,
+ 0,
+ 3};
+
VkPipelineObj pipe(m_device);
pipe.SetInputAssembly(&iasci);
+ pipe.SetTessellation(&tsci);
pipe.AddColorAttachment();
pipe.AddShader(&vs);
pipe.AddShader(&tcs);
diff --git a/tests/vkrenderframework.cpp b/tests/vkrenderframework.cpp
index 29b834b..d933a0b 100644
--- a/tests/vkrenderframework.cpp
+++ b/tests/vkrenderframework.cpp
@@ -1252,21 +1252,25 @@
void VkPipelineObj::SetMSAA(
const VkPipelineMultisampleStateCreateInfo *ms_state) {
- memcpy(&m_ms_state, ms_state, sizeof(VkPipelineMultisampleStateCreateInfo));
+ m_ms_state = *ms_state;
}
void VkPipelineObj::SetInputAssembly(
const VkPipelineInputAssemblyStateCreateInfo *ia_state) {
- memcpy(&m_ia_state, ia_state,
- sizeof(VkPipelineInputAssemblyStateCreateInfo));
+ m_ia_state = *ia_state;
}
void VkPipelineObj::SetRasterization(
const VkPipelineRasterizationStateCreateInfo *rs_state) {
- memcpy(&m_rs_state, rs_state,
- sizeof(VkPipelineRasterizationStateCreateInfo));
+ m_rs_state = *rs_state;
}
+void VkPipelineObj::SetTessellation(
+ const VkPipelineTessellationStateCreateInfo *te_state) {
+ m_te_state = *te_state;
+}
+
+
VkResult VkPipelineObj::CreateVKPipeline(VkPipelineLayout layout,
VkRenderPass render_pass) {
VkGraphicsPipelineCreateInfo info = {};
@@ -1314,7 +1318,6 @@
info.renderPass = render_pass;
info.subpass = 0;
- info.pTessellationState = NULL;
info.pInputAssemblyState = &m_ia_state;
info.pViewportState = &m_vp_state;
info.pRasterizationState = &m_rs_state;
@@ -1322,6 +1325,14 @@
info.pDepthStencilState = &m_ds_state;
info.pColorBlendState = &m_cb_state;
+ if (m_ia_state.topology == VK_PRIMITIVE_TOPOLOGY_PATCH_LIST) {
+ m_te_state.sType = VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO;
+ info.pTessellationState = &m_te_state;
+ }
+ else {
+ info.pTessellationState = nullptr;
+ }
+
return init_try(*m_device, info);
}
diff --git a/tests/vkrenderframework.h b/tests/vkrenderframework.h
index f5f8b4d..164fb50 100644
--- a/tests/vkrenderframework.h
+++ b/tests/vkrenderframework.h
@@ -429,10 +429,9 @@
void SetDepthStencil(const VkPipelineDepthStencilStateCreateInfo *);
void SetMSAA(const VkPipelineMultisampleStateCreateInfo *ms_state);
- void
- SetInputAssembly(const VkPipelineInputAssemblyStateCreateInfo *ia_state);
- void
- SetRasterization(const VkPipelineRasterizationStateCreateInfo *rs_state);
+ void SetInputAssembly(const VkPipelineInputAssemblyStateCreateInfo *ia_state);
+ void SetRasterization(const VkPipelineRasterizationStateCreateInfo *rs_state);
+ void SetTessellation(const VkPipelineTessellationStateCreateInfo *te_state);
void SetViewport(const vector<VkViewport> viewports);
void SetScissor(const vector<VkRect2D> scissors);
VkResult CreateVKPipeline(VkPipelineLayout layout,
@@ -446,6 +445,7 @@
VkPipelineDepthStencilStateCreateInfo m_ds_state;
VkPipelineViewportStateCreateInfo m_vp_state;
VkPipelineMultisampleStateCreateInfo m_ms_state;
+ VkPipelineTessellationStateCreateInfo m_te_state;
vector<VkDynamicState> m_dynamic_state_enables;
vector<VkViewport> m_viewports;
vector<VkRect2D> m_scissors;