vulkan.h: V104 -- Unify compute/graphics pipeline shader passing semantics, Bug# 13800
diff --git a/tests/layer_validation_tests.cpp b/tests/layer_validation_tests.cpp
index 8218a0d..a93d8f9 100644
--- a/tests/layer_validation_tests.cpp
+++ b/tests/layer_validation_tests.cpp
@@ -1052,23 +1052,30 @@
err = vkCreateShader(m_device->device(), &vs_ci, &vs);
ASSERT_VK_SUCCESS(err);
- const VkPipelineShader vs_pipe_shader = {
+ const VkPipelineShaderStageCreateInfo pipe_vs_ci = {
+ .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
+ .pNext = NULL,
.stage = VK_SHADER_STAGE_VERTEX,
.shader = vs,
.linkConstBufferCount = 0,
.pLinkConstBufferInfo = NULL,
.pSpecializationInfo = NULL,
};
- const VkPipelineShaderStageCreateInfo pipe_vs_ci = {
- .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
- .pNext = NULL,
- .shader = vs_pipe_shader,
- };
const VkGraphicsPipelineCreateInfo gp_ci = {
- .sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,
- .pNext = &pipe_vs_ci,
- .flags = VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT,
- .layout = pipeline_layout,
+ .sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,
+ .pNext = NULL,
+ .stageCount = 1,
+ .pStages = &pipe_vs_ci,
+ .pVertexInputState = NULL,
+ .pIaState = NULL,
+ .pTessState = NULL,
+ .pVpState = NULL,
+ .pRsState = NULL,
+ .pMsState = NULL,
+ .pDsState = NULL,
+ .pCbState = NULL,
+ .flags = VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT,
+ .layout = pipeline_layout,
};
VkPipeline pipeline;
@@ -1174,23 +1181,30 @@
VkShader vs;
err = vkCreateShader(m_device->device(), &vs_ci, &vs);
- const VkPipelineShader vs_pipe_shader = {
+ const VkPipelineShaderStageCreateInfo pipe_vs_ci = {
+ .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
+ .pNext = NULL,
.stage = VK_SHADER_STAGE_VERTEX,
.shader = vs,
.linkConstBufferCount = 0,
.pLinkConstBufferInfo = NULL,
.pSpecializationInfo = NULL,
};
- const VkPipelineShaderStageCreateInfo pipe_vs_ci = {
- .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
- .pNext = NULL,
- .shader = vs_pipe_shader,
- };
const VkGraphicsPipelineCreateInfo gp_ci = {
- .sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,
- .pNext = &pipe_vs_ci,
- .flags = VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT,
- .layout = pipeline_layout,
+ .sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,
+ .pNext = NULL,
+ .stageCount = 1,
+ .pStages = &pipe_vs_ci,
+ .pVertexInputState = NULL,
+ .pIaState = NULL,
+ .pTessState = NULL,
+ .pVpState = NULL,
+ .pRsState = NULL,
+ .pMsState = NULL,
+ .pDsState = NULL,
+ .pCbState = NULL,
+ .flags = VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT,
+ .layout = pipeline_layout,
};
VkPipeline pipeline;
@@ -1651,23 +1665,30 @@
err = vkCreateShader(m_device->device(), &vs_ci, &vs);
ASSERT_VK_SUCCESS(err);
- const VkPipelineShader vs_pipe_shader = {
+ const VkPipelineShaderStageCreateInfo pipe_vs_ci = {
+ .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
+ .pNext = NULL,
.stage = VK_SHADER_STAGE_VERTEX,
.shader = vs,
.linkConstBufferCount = 0,
.pLinkConstBufferInfo = NULL,
.pSpecializationInfo = NULL,
};
- const VkPipelineShaderStageCreateInfo pipe_vs_ci = {
- .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
- .pNext = &pipe_ms_state_ci,
- .shader = vs_pipe_shader,
- };
const VkGraphicsPipelineCreateInfo gp_ci = {
- .sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,
- .pNext = &pipe_vs_ci,
- .flags = VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT,
- .layout = pipeline_layout,
+ .sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,
+ .pNext = NULL,
+ .stageCount = 1,
+ .pStages = &pipe_vs_ci,
+ .pVertexInputState = NULL,
+ .pIaState = NULL,
+ .pTessState = NULL,
+ .pVpState = NULL,
+ .pRsState = NULL,
+ .pMsState = &pipe_ms_state_ci,
+ .pDsState = NULL,
+ .pCbState = NULL,
+ .flags = VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT,
+ .layout = pipeline_layout,
};
VkPipeline pipeline;
diff --git a/tests/vkrenderframework.cpp b/tests/vkrenderframework.cpp
index 6d9e999..b598be7 100644
--- a/tests/vkrenderframework.cpp
+++ b/tests/vkrenderframework.cpp
@@ -304,7 +304,7 @@
for (i = 0; i < targets; i++) {
VkImageObj *img = new VkImageObj(m_device);
-
+
VkFormatProperties props;
size_t size = sizeof(props);
VkResult err;
@@ -325,7 +325,7 @@
else {
FAIL() << "Neither Linear nor Optimal allowed for render target";
}
-
+
m_renderTargets.push_back(img);
m_colorBindings[i].view = img->targetView();
m_colorBindings[i].layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
@@ -1024,11 +1024,11 @@
VkPipelineShaderStageCreateInfo* VkShaderObj::GetStageCreateInfo()
{
VkPipelineShaderStageCreateInfo *stageInfo = (VkPipelineShaderStageCreateInfo*) calloc( 1,sizeof(VkPipelineShaderStageCreateInfo) );
- stageInfo->sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
- stageInfo->shader.stage = m_stage;
- stageInfo->shader.shader = obj();
- stageInfo->shader.linkConstBufferCount = 0;
- stageInfo->shader.pLinkConstBufferInfo = VK_NULL_HANDLE;
+ stageInfo->sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
+ stageInfo->stage = m_stage;
+ stageInfo->shader = obj();
+ stageInfo->linkConstBufferCount = 0;
+ stageInfo->pLinkConstBufferInfo = VK_NULL_HANDLE;
return stageInfo;
}
@@ -1076,7 +1076,13 @@
VkPipelineObj::VkPipelineObj(VkDeviceObj *device)
{
m_device = device;
- m_vi_state.attributeCount = m_vi_state.bindingCount = 0;
+
+ m_vi_state.pNext = VK_NULL_HANDLE;
+ m_vi_state.bindingCount = 0;
+ m_vi_state.pVertexBindingDescriptions = VK_NULL_HANDLE;
+ m_vi_state.attributeCount = 0;
+ m_vi_state.pVertexAttributeDescriptions = VK_NULL_HANDLE;
+
m_vertexBufferCount = 0;
m_ia_state.sType = VK_STRUCTURE_TYPE_PIPELINE_IA_STATE_CREATE_INFO;
@@ -1087,7 +1093,7 @@
m_ia_state.primitiveRestartIndex = 0;
m_rs_state.sType = VK_STRUCTURE_TYPE_PIPELINE_RS_STATE_CREATE_INFO;
- m_rs_state.pNext = &m_ia_state;
+ m_rs_state.pNext = VK_NULL_HANDLE;
m_rs_state.depthClipEnable = VK_FALSE;
m_rs_state.rasterizerDiscardEnable = VK_FALSE;
m_rs_state.pointOrigin = VK_COORDINATE_ORIGIN_UPPER_LEFT;
@@ -1098,11 +1104,11 @@
memset(&m_cb_state,0,sizeof(m_cb_state));
m_cb_state.sType = VK_STRUCTURE_TYPE_PIPELINE_CB_STATE_CREATE_INFO;
- m_cb_state.pNext = &m_rs_state;
+ m_cb_state.pNext = VK_NULL_HANDLE;
m_cb_state.alphaToCoverageEnable = VK_FALSE;
m_cb_state.logicOp = VK_LOGIC_OP_COPY;
- m_ms_state.pNext = &m_cb_state;
+ m_ms_state.pNext = VK_NULL_HANDLE;
m_ms_state.sType = VK_STRUCTURE_TYPE_PIPELINE_MS_STATE_CREATE_INFO;
m_ms_state.multisampleEnable = VK_FALSE;
m_ms_state.sampleMask = 1; // Do we have to specify MSAA even just to disable it?
@@ -1111,13 +1117,13 @@
m_ms_state.sampleShadingEnable = 0;
m_vp_state.sType = VK_STRUCTURE_TYPE_PIPELINE_VP_STATE_CREATE_INFO;
- m_vp_state.pNext = &m_ms_state;
+ m_vp_state.pNext = VK_NULL_HANDLE;
m_vp_state.viewportCount = 1;
m_vp_state.depthMode = VK_DEPTH_MODE_ZERO_TO_ONE;
m_vp_state.clipOrigin = VK_COORDINATE_ORIGIN_UPPER_LEFT;
m_ds_state.sType = VK_STRUCTURE_TYPE_PIPELINE_DS_STATE_CREATE_INFO;
- m_ds_state.pNext = &m_vp_state,
+ m_ds_state.pNext = VK_NULL_HANDLE,
m_ds_state.format = VK_FORMAT_D32_SFLOAT;
m_ds_state.depthTestEnable = VK_FALSE;
m_ds_state.depthWriteEnable = VK_FALSE;
@@ -1185,33 +1191,41 @@
VkResult VkPipelineObj::CreateVKPipeline(VkDescriptorSetObj &descriptorSet)
{
- void* head_ptr = &m_ds_state;
VkGraphicsPipelineCreateInfo info = {};
VkPipelineShaderStageCreateInfo* shaderCreateInfo;
+ info.stageCount = m_shaderObjs.size();
+ info.pStages = new VkPipelineShaderStageCreateInfo[info.stageCount];
+
for (int i=0; i<m_shaderObjs.size(); i++)
{
shaderCreateInfo = m_shaderObjs[i]->GetStageCreateInfo();
- shaderCreateInfo->pNext = head_ptr;
- head_ptr = shaderCreateInfo;
+ memcpy((void*)&info.pStages[i], shaderCreateInfo, sizeof(VkPipelineShaderStageCreateInfo));
}
if (m_vi_state.attributeCount && m_vi_state.bindingCount)
{
- m_vi_state.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_CREATE_INFO;
- m_vi_state.pNext = head_ptr;
- head_ptr = &m_vi_state;
+ m_vi_state.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO;
}
info.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO;
- info.pNext = head_ptr;
+ info.pNext = NULL;
info.flags = 0;
info.layout = descriptorSet.GetPipelineLayout();
m_cb_state.attachmentCount = m_colorAttachments.size();
m_cb_state.pAttachments = &m_colorAttachments[0];
+ info.pTessState = NULL;
+ info.pVertexInputState = &m_vi_state;
+ info.pIaState = &m_ia_state;
+ info.pVpState = &m_vp_state;
+ info.pRsState = &m_rs_state;
+ info.pMsState = &m_ms_state;
+ info.pDsState = &m_ds_state;
+ info.pCbState = &m_cb_state;
+
return init_try(*m_device, info);
}
diff --git a/tests/vkrenderframework.h b/tests/vkrenderframework.h
index 58f229f..03bc031 100644
--- a/tests/vkrenderframework.h
+++ b/tests/vkrenderframework.h
@@ -410,20 +410,19 @@
VkResult CreateVKPipeline(VkDescriptorSetObj &descriptorSet);
protected:
- VkPipelineVertexInputCreateInfo m_vi_state;
- VkPipelineIaStateCreateInfo m_ia_state;
- VkPipelineRsStateCreateInfo m_rs_state;
- VkPipelineCbStateCreateInfo m_cb_state;
- VkPipelineDsStateCreateInfo m_ds_state;
- VkPipelineVpStateCreateInfo m_vp_state;
- VkPipelineMsStateCreateInfo m_ms_state;
- VkDeviceObj *m_device;
- vector<VkShaderObj*> m_shaderObjs;
- vector<VkConstantBufferObj*> m_vertexBufferObjs;
- vector<int> m_vertexBufferBindings;
- vector<VkPipelineCbAttachmentState> m_colorAttachments;
- int m_vertexBufferCount;
-
+ VkPipelineVertexInputStateCreateInfo m_vi_state;
+ VkPipelineIaStateCreateInfo m_ia_state;
+ VkPipelineRsStateCreateInfo m_rs_state;
+ VkPipelineCbStateCreateInfo m_cb_state;
+ VkPipelineDsStateCreateInfo m_ds_state;
+ VkPipelineVpStateCreateInfo m_vp_state;
+ VkPipelineMsStateCreateInfo m_ms_state;
+ VkDeviceObj *m_device;
+ vector<VkShaderObj*> m_shaderObjs;
+ vector<VkConstantBufferObj*> m_vertexBufferObjs;
+ vector<int> m_vertexBufferBindings;
+ vector<VkPipelineCbAttachmentState> m_colorAttachments;
+ int m_vertexBufferCount;
};
#endif // VKRENDERFRAMEWORK_H
diff --git a/tests/vktestbinding.cpp b/tests/vktestbinding.cpp
index 42da8c0..00f8462 100644
--- a/tests/vktestbinding.cpp
+++ b/tests/vktestbinding.cpp
@@ -186,18 +186,12 @@
uint32_t Object::memory_allocation_count() const
{
- /// LUGMAL return get_info<uint32_t>(dev_->obj(), type(), obj(), VK_OBJECT_INFO_TYPE_MEMORY_ALLOCATION_COUNT, 1)[0];
return 1;
}
std::vector<VkMemoryRequirements> Object::memory_requirements() const
{
- //// VkResult err;
uint32_t num_allocations = 1;
- //// size_t num_alloc_size = sizeof(num_allocations);
- //// err = vkGetObjectInfo(dev_->obj(), type(), obj(), VK_OBJECT_INFO_TYPE_MEMORY_ALLOCATION_COUNT,
- //// &num_alloc_size, &num_allocations);
- //// EXPECT(err == VK_SUCCESS && num_alloc_size == sizeof(num_allocations));
std::vector<VkMemoryRequirements> info =
get_info<VkMemoryRequirements>(dev_->obj(), type(), obj(), VK_OBJECT_INFO_TYPE_MEMORY_REQUIREMENTS, 0);
EXPECT(info.size() == num_allocations);