mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-11 13:36:24 +02:00
Vulkan: Don't cache vulkan_ with draw context.
Since we can get the VulkanContext cheaply from the draw context, it's easier to make sure things stay up to date.
This commit is contained in:
1 parent
0dc7688838
commit
8a5f07b860
13 files changed
+158
-139
No files matched your search
@@ -74,9 +74,8 @@ void main() {
|
||||
}
|
||||
)";
|
||||
|
||||
FramebufferManagerVulkan::FramebufferManagerVulkan(Draw::DrawContext *draw, VulkanContext *vulkan) :
|
||||
FramebufferManagerCommon(draw),
|
||||
vulkan_(vulkan) {
|
||||
FramebufferManagerVulkan::FramebufferManagerVulkan(Draw::DrawContext *draw) :
|
||||
FramebufferManagerCommon(draw) {
|
||||
presentation_->SetLanguage(GLSL_VULKAN);
|
||||
|
||||
InitDeviceObjects();
|
||||
@@ -102,9 +101,10 @@ void FramebufferManagerVulkan::SetDrawEngine(DrawEngineVulkan *td) {
|
||||
}
|
||||
|
||||
void FramebufferManagerVulkan::InitDeviceObjects() {
|
||||
VulkanContext *vulkan = (VulkanContext *)draw_->GetNativeObject(Draw::NativeObject::CONTEXT);
|
||||
std::string fs_errors, vs_errors;
|
||||
fsBasicTex_ = CompileShaderModule(vulkan_, VK_SHADER_STAGE_FRAGMENT_BIT, tex_fs, &fs_errors);
|
||||
vsBasicTex_ = CompileShaderModule(vulkan_, VK_SHADER_STAGE_VERTEX_BIT, tex_vs, &vs_errors);
|
||||
fsBasicTex_ = CompileShaderModule(vulkan, VK_SHADER_STAGE_FRAGMENT_BIT, tex_fs, &fs_errors);
|
||||
vsBasicTex_ = CompileShaderModule(vulkan, VK_SHADER_STAGE_VERTEX_BIT, tex_vs, &vs_errors);
|
||||
_assert_(fsBasicTex_ != VK_NULL_HANDLE);
|
||||
_assert_(vsBasicTex_ != VK_NULL_HANDLE);
|
||||
|
||||
@@ -114,36 +114,39 @@ void FramebufferManagerVulkan::InitDeviceObjects() {
|
||||
samp.addressModeW = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;
|
||||
samp.magFilter = VK_FILTER_NEAREST;
|
||||
samp.minFilter = VK_FILTER_NEAREST;
|
||||
VkResult res = vkCreateSampler(vulkan_->GetDevice(), &samp, nullptr, &nearestSampler_);
|
||||
VkResult res = vkCreateSampler(vulkan->GetDevice(), &samp, nullptr, &nearestSampler_);
|
||||
_assert_(res == VK_SUCCESS);
|
||||
samp.magFilter = VK_FILTER_LINEAR;
|
||||
samp.minFilter = VK_FILTER_LINEAR;
|
||||
res = vkCreateSampler(vulkan_->GetDevice(), &samp, nullptr, &linearSampler_);
|
||||
res = vkCreateSampler(vulkan->GetDevice(), &samp, nullptr, &linearSampler_);
|
||||
_assert_(res == VK_SUCCESS);
|
||||
}
|
||||
|
||||
void FramebufferManagerVulkan::DestroyDeviceObjects() {
|
||||
if (!draw_)
|
||||
return;
|
||||
VulkanContext *vulkan = (VulkanContext *)draw_->GetNativeObject(Draw::NativeObject::CONTEXT);
|
||||
if (fsBasicTex_ != VK_NULL_HANDLE) {
|
||||
vulkan2D_->PurgeFragmentShader(fsBasicTex_);
|
||||
vulkan_->Delete().QueueDeleteShaderModule(fsBasicTex_);
|
||||
vulkan->Delete().QueueDeleteShaderModule(fsBasicTex_);
|
||||
}
|
||||
if (vsBasicTex_ != VK_NULL_HANDLE) {
|
||||
vulkan2D_->PurgeVertexShader(vsBasicTex_);
|
||||
vulkan_->Delete().QueueDeleteShaderModule(vsBasicTex_);
|
||||
vulkan->Delete().QueueDeleteShaderModule(vsBasicTex_);
|
||||
}
|
||||
if (stencilFs_ != VK_NULL_HANDLE) {
|
||||
vulkan2D_->PurgeFragmentShader(stencilFs_);
|
||||
vulkan_->Delete().QueueDeleteShaderModule(stencilFs_);
|
||||
vulkan->Delete().QueueDeleteShaderModule(stencilFs_);
|
||||
}
|
||||
if (stencilVs_ != VK_NULL_HANDLE) {
|
||||
vulkan2D_->PurgeVertexShader(stencilVs_);
|
||||
vulkan_->Delete().QueueDeleteShaderModule(stencilVs_);
|
||||
vulkan->Delete().QueueDeleteShaderModule(stencilVs_);
|
||||
}
|
||||
|
||||
if (linearSampler_ != VK_NULL_HANDLE)
|
||||
vulkan_->Delete().QueueDeleteSampler(linearSampler_);
|
||||
vulkan->Delete().QueueDeleteSampler(linearSampler_);
|
||||
if (nearestSampler_ != VK_NULL_HANDLE)
|
||||
vulkan_->Delete().QueueDeleteSampler(nearestSampler_);
|
||||
vulkan->Delete().QueueDeleteSampler(nearestSampler_);
|
||||
}
|
||||
|
||||
void FramebufferManagerVulkan::NotifyClear(bool clearColor, bool clearAlpha, bool clearDepth, uint32_t color, float depth) {
|
||||
@@ -313,12 +316,11 @@ void FramebufferManagerVulkan::EndFrame() {
|
||||
}
|
||||
|
||||
void FramebufferManagerVulkan::DeviceLost() {
|
||||
FramebufferManagerCommon::DeviceLost();
|
||||
DestroyDeviceObjects();
|
||||
FramebufferManagerCommon::DeviceLost();
|
||||
}
|
||||
|
||||
void FramebufferManagerVulkan::DeviceRestore(Draw::DrawContext *draw) {
|
||||
FramebufferManagerCommon::DeviceRestore(draw);
|
||||
vulkan_ = (VulkanContext *)draw->GetNativeObject(Draw::NativeObject::CONTEXT);
|
||||
InitDeviceObjects();
|
||||
}
|
||||
Reference in new issue
Block a user