Vulkan: Don't store device handles in wrapped objects.
BUG=angleproject:1684
Change-Id: I0ec11ec79f2e9893600a8ffd8cdbfc6040fb6f70
Reviewed-on: https://chromium-review.googlesource.com/426402
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/libANGLE/renderer/vulkan/ProgramVk.cpp b/src/libANGLE/renderer/vulkan/ProgramVk.cpp
index 4a6b7ce..d9767da 100644
--- a/src/libANGLE/renderer/vulkan/ProgramVk.cpp
+++ b/src/libANGLE/renderer/vulkan/ProgramVk.cpp
@@ -25,6 +25,15 @@
{
}
+void ProgramVk::destroy(const ContextImpl *contextImpl)
+{
+ VkDevice device = GetAs<ContextVk>(contextImpl)->getDevice();
+
+ mLinkedFragmentModule.destroy(device);
+ mLinkedVertexModule.destroy(device);
+ mPipelineLayout.destroy(device);
+}
+
LinkResult ProgramVk::load(const ContextImpl *contextImpl,
gl::InfoLog &infoLog,
gl::BinaryInputStream *stream)
@@ -66,8 +75,9 @@
return false;
}
- vk::ShaderModule vertexModule(renderer->getDevice());
- vk::ShaderModule fragmentModule(renderer->getDevice());
+ vk::ShaderModule vertexModule;
+ vk::ShaderModule fragmentModule;
+ VkDevice device = renderer->getDevice();
{
VkShaderModuleCreateInfo vertexShaderInfo;
@@ -76,7 +86,7 @@
vertexShaderInfo.flags = 0;
vertexShaderInfo.codeSize = vertexCode.size() * sizeof(uint32_t);
vertexShaderInfo.pCode = vertexCode.data();
- ANGLE_TRY(vertexModule.init(vertexShaderInfo));
+ ANGLE_TRY(vertexModule.init(device, vertexShaderInfo));
}
{
@@ -87,11 +97,11 @@
fragmentShaderInfo.codeSize = fragmentCode.size() * sizeof(uint32_t);
fragmentShaderInfo.pCode = fragmentCode.data();
- ANGLE_TRY(fragmentModule.init(fragmentShaderInfo));
+ ANGLE_TRY(fragmentModule.init(device, fragmentShaderInfo));
}
- mLinkedVertexModule = std::move(vertexModule);
- mLinkedFragmentModule = std::move(fragmentModule);
+ mLinkedVertexModule.retain(device, std::move(vertexModule));
+ mLinkedFragmentModule.retain(device, std::move(fragmentModule));
return true;
}
@@ -274,7 +284,7 @@
gl::ErrorOrResult<vk::PipelineLayout *> ProgramVk::getPipelineLayout(VkDevice device)
{
- vk::PipelineLayout newLayout(device);
+ vk::PipelineLayout newLayout;
// TODO(jmadill): Descriptor sets.
VkPipelineLayoutCreateInfo createInfo;
@@ -286,9 +296,8 @@
createInfo.pushConstantRangeCount = 0;
createInfo.pPushConstantRanges = nullptr;
- ANGLE_TRY(newLayout.init(createInfo));
-
- mPipelineLayout = std::move(newLayout);
+ ANGLE_TRY(newLayout.init(device, createInfo));
+ mPipelineLayout.retain(device, std::move(newLayout));
return &mPipelineLayout;
}