bug 14608: VkShaderModule object lifetime (WIP)
Remove VkShader. We add a simple cache to intel_shader_module in place of
intel_shader.
https://cvs.khronos.org/bugzilla/show_bug.cgi?id=14608
diff --git a/tests/vkrenderframework.cpp b/tests/vkrenderframework.cpp
index ef71756..2fa1e61 100644
--- a/tests/vkrenderframework.cpp
+++ b/tests/vkrenderframework.cpp
@@ -166,11 +166,6 @@
}
delete m_depthStencil;
- while (!m_shader_modules.empty())
- {
- delete m_shader_modules.back();
- m_shader_modules.pop_back();
- }
// reset the driver
delete m_device;
@@ -1052,11 +1047,14 @@
return m_indexType;
}
-VkPipelineShaderStageCreateInfo* VkShaderObj::GetStageCreateInfo()
+VkPipelineShaderStageCreateInfo VkShaderObj::GetStageCreateInfo() const
{
- VkPipelineShaderStageCreateInfo *stageInfo = (VkPipelineShaderStageCreateInfo*) calloc( 1,sizeof(VkPipelineShaderStageCreateInfo) );
- stageInfo->sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
- stageInfo->shader = handle();
+ VkPipelineShaderStageCreateInfo stageInfo = {};
+
+ stageInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
+ stageInfo.stage = m_stage;
+ stageInfo.module = handle();
+ stageInfo.pName = "main";
return stageInfo;
}
@@ -1065,9 +1063,7 @@
{
VkResult U_ASSERT_ONLY err = VK_SUCCESS;
std::vector<unsigned int> spv;
- VkShaderCreateInfo createInfo;
VkShaderModuleCreateInfo moduleCreateInfo;
- vk_testing::ShaderModule *module = new vk_testing::ShaderModule();
size_t shader_len;
m_stage = stage;
@@ -1076,9 +1072,6 @@
moduleCreateInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
moduleCreateInfo.pNext = NULL;
- createInfo.sType = VK_STRUCTURE_TYPE_SHADER_CREATE_INFO;
- createInfo.pNext = NULL;
-
if (framework->m_use_glsl) {
shader_len = strlen(shader_code);
@@ -1101,19 +1094,8 @@
moduleCreateInfo.flags = 0;
}
- err = module->init_try(*m_device, moduleCreateInfo);
+ err = init_try(*m_device, moduleCreateInfo);
assert(VK_SUCCESS == err);
-
- createInfo.sType = VK_STRUCTURE_TYPE_SHADER_CREATE_INFO;
- createInfo.pNext = NULL;
- createInfo.module = module->handle();
- createInfo.pName = "main";
- createInfo.flags = 0;
- createInfo.stage = stage;
-
- err = init_try(*m_device, createInfo);
- assert(VK_SUCCESS == err);
- framework->m_shader_modules.push_back(module);
}
VkPipelineObj::VkPipelineObj(VkDeviceObj *device)
@@ -1267,15 +1249,13 @@
VkGraphicsPipelineCreateInfo info = {};
VkPipelineDynamicStateCreateInfo dsci = {};
- 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();
- memcpy((void*)&info.pStages[i], shaderCreateInfo, sizeof(VkPipelineShaderStageCreateInfo));
+ ((VkPipelineShaderStageCreateInfo *) info.pStages)[i] =
+ m_shaderObjs[i]->GetStageCreateInfo();
}
if (m_vi_state.vertexAttributeDescriptionCount && m_vi_state.vertexBindingDescriptionCount) {