mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
Vulkan: Clear 2d objects on loss/restore.
This commit is contained in:
parent
1b48ff3c63
commit
11aaa7b372
2 changed files with 46 additions and 9 deletions
|
@ -48,6 +48,37 @@ void VulkanFBO::Create(VulkanContext *vulkan, VkRenderPass rp_compatible, int wi
|
|||
}
|
||||
|
||||
Vulkan2D::Vulkan2D(VulkanContext *vulkan) : vulkan_(vulkan) {
|
||||
InitDeviceObjects();
|
||||
}
|
||||
|
||||
Vulkan2D::~Vulkan2D() {
|
||||
DestroyDeviceObjects();
|
||||
}
|
||||
|
||||
void Vulkan2D::DestroyDeviceObjects() {
|
||||
for (int i = 0; i < 2; i++) {
|
||||
if (frameData_[i].descPool != VK_NULL_HANDLE) {
|
||||
vulkan_->Delete().QueueDeleteDescriptorPool(frameData_[i].descPool);
|
||||
frameData_[i].descPool = VK_NULL_HANDLE;
|
||||
}
|
||||
}
|
||||
for (auto it : pipelines_) {
|
||||
vulkan_->Delete().QueueDeletePipeline(it.second);
|
||||
}
|
||||
pipelines_.clear();
|
||||
|
||||
VkDevice device = vulkan_->GetDevice();
|
||||
if (descriptorSetLayout_ != VK_NULL_HANDLE) {
|
||||
vkDestroyDescriptorSetLayout(device, descriptorSetLayout_, nullptr);
|
||||
descriptorSetLayout_ = VK_NULL_HANDLE;
|
||||
}
|
||||
if (pipelineLayout_ != VK_NULL_HANDLE) {
|
||||
vkDestroyPipelineLayout(device, pipelineLayout_, nullptr);
|
||||
pipelineLayout_ = VK_NULL_HANDLE;
|
||||
}
|
||||
}
|
||||
|
||||
void Vulkan2D::InitDeviceObjects() {
|
||||
// All resources we need for PSP drawing. Usually only bindings 0 and 2-4 are populated.
|
||||
VkDescriptorSetLayoutBinding bindings[2] = {};
|
||||
bindings[0].descriptorCount = 1;
|
||||
|
@ -96,13 +127,13 @@ Vulkan2D::Vulkan2D(VulkanContext *vulkan) : vulkan_(vulkan) {
|
|||
assert(VK_SUCCESS == res);
|
||||
}
|
||||
|
||||
Vulkan2D::~Vulkan2D() {
|
||||
VkDevice device = vulkan_->GetDevice();
|
||||
for (int i = 0; i < 2; i++) {
|
||||
vulkan_->Delete().QueueDeleteDescriptorPool(frameData_[i].descPool);
|
||||
}
|
||||
vkDestroyDescriptorSetLayout(device, descriptorSetLayout_, nullptr);
|
||||
vkDestroyPipelineLayout(device, pipelineLayout_, nullptr);
|
||||
void Vulkan2D::DeviceLost() {
|
||||
DestroyDeviceObjects();
|
||||
}
|
||||
|
||||
void Vulkan2D::DeviceRestore(VulkanContext *vulkan) {
|
||||
vulkan_ = vulkan;
|
||||
InitDeviceObjects();
|
||||
}
|
||||
|
||||
void Vulkan2D::BeginFrame() {
|
||||
|
@ -324,4 +355,4 @@ VkShaderModule CompileShaderModule(VulkanContext *vulkan, VkShaderStageFlagBits
|
|||
return VK_NULL_HANDLE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -79,6 +79,9 @@ public:
|
|||
Vulkan2D(VulkanContext *vulkan);
|
||||
~Vulkan2D();
|
||||
|
||||
void DeviceLost();
|
||||
void DeviceRestore(VulkanContext *vulkan);
|
||||
|
||||
VkPipeline GetPipeline(VkPipelineCache cache, VkRenderPass rp, VkShaderModule vs, VkShaderModule fs);
|
||||
|
||||
void BeginFrame();
|
||||
|
@ -95,6 +98,9 @@ public:
|
|||
};
|
||||
|
||||
private:
|
||||
void InitDeviceObjects();
|
||||
void DestroyDeviceObjects();
|
||||
|
||||
VulkanContext *vulkan_;
|
||||
VkDescriptorSetLayout descriptorSetLayout_;
|
||||
VkPipelineLayout pipelineLayout_;
|
||||
|
@ -131,4 +137,4 @@ private:
|
|||
};
|
||||
|
||||
|
||||
VkShaderModule CompileShaderModule(VulkanContext *vulkan, VkShaderStageFlagBits stage, const char *code, std::string *error);
|
||||
VkShaderModule CompileShaderModule(VulkanContext *vulkan, VkShaderStageFlagBits stage, const char *code, std::string *error);
|
||||
|
|
Loading…
Add table
Reference in a new issue