mirror of
https://github.com/hrydgard/ppsspp.git
synced 2024-11-23 05:19:56 +00:00
Merge the 1.16.6 branch into master
Also deletes some unused code.
This commit is contained in:
commit
ac93419331
@ -1666,80 +1666,101 @@ void VulkanDeleteList::Take(VulkanDeleteList &del) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void VulkanDeleteList::PerformDeletes(VulkanContext *vulkan, VmaAllocator allocator) {
|
void VulkanDeleteList::PerformDeletes(VulkanContext *vulkan, VmaAllocator allocator) {
|
||||||
|
int deleteCount = 0;
|
||||||
|
|
||||||
for (auto &callback : callbacks_) {
|
for (auto &callback : callbacks_) {
|
||||||
callback.func(vulkan, callback.userdata);
|
callback.func(vulkan, callback.userdata);
|
||||||
|
deleteCount++;
|
||||||
}
|
}
|
||||||
callbacks_.clear();
|
callbacks_.clear();
|
||||||
|
|
||||||
VkDevice device = vulkan->GetDevice();
|
VkDevice device = vulkan->GetDevice();
|
||||||
for (auto &cmdPool : cmdPools_) {
|
for (auto &cmdPool : cmdPools_) {
|
||||||
vkDestroyCommandPool(device, cmdPool, nullptr);
|
vkDestroyCommandPool(device, cmdPool, nullptr);
|
||||||
|
deleteCount++;
|
||||||
}
|
}
|
||||||
cmdPools_.clear();
|
cmdPools_.clear();
|
||||||
for (auto &descPool : descPools_) {
|
for (auto &descPool : descPools_) {
|
||||||
vkDestroyDescriptorPool(device, descPool, nullptr);
|
vkDestroyDescriptorPool(device, descPool, nullptr);
|
||||||
|
deleteCount++;
|
||||||
}
|
}
|
||||||
descPools_.clear();
|
descPools_.clear();
|
||||||
for (auto &module : modules_) {
|
for (auto &module : modules_) {
|
||||||
vkDestroyShaderModule(device, module, nullptr);
|
vkDestroyShaderModule(device, module, nullptr);
|
||||||
|
deleteCount++;
|
||||||
}
|
}
|
||||||
modules_.clear();
|
modules_.clear();
|
||||||
for (auto &buf : buffers_) {
|
for (auto &buf : buffers_) {
|
||||||
vkDestroyBuffer(device, buf, nullptr);
|
vkDestroyBuffer(device, buf, nullptr);
|
||||||
|
deleteCount++;
|
||||||
}
|
}
|
||||||
buffers_.clear();
|
buffers_.clear();
|
||||||
for (auto &buf : buffersWithAllocs_) {
|
for (auto &buf : buffersWithAllocs_) {
|
||||||
vmaDestroyBuffer(allocator, buf.buffer, buf.alloc);
|
vmaDestroyBuffer(allocator, buf.buffer, buf.alloc);
|
||||||
|
deleteCount++;
|
||||||
}
|
}
|
||||||
buffersWithAllocs_.clear();
|
buffersWithAllocs_.clear();
|
||||||
for (auto &bufView : bufferViews_) {
|
for (auto &bufView : bufferViews_) {
|
||||||
vkDestroyBufferView(device, bufView, nullptr);
|
vkDestroyBufferView(device, bufView, nullptr);
|
||||||
|
deleteCount++;
|
||||||
}
|
}
|
||||||
bufferViews_.clear();
|
bufferViews_.clear();
|
||||||
for (auto &imageWithAlloc : imagesWithAllocs_) {
|
for (auto &imageWithAlloc : imagesWithAllocs_) {
|
||||||
vmaDestroyImage(allocator, imageWithAlloc.image, imageWithAlloc.alloc);
|
vmaDestroyImage(allocator, imageWithAlloc.image, imageWithAlloc.alloc);
|
||||||
|
deleteCount++;
|
||||||
}
|
}
|
||||||
imagesWithAllocs_.clear();
|
imagesWithAllocs_.clear();
|
||||||
for (auto &imageView : imageViews_) {
|
for (auto &imageView : imageViews_) {
|
||||||
vkDestroyImageView(device, imageView, nullptr);
|
vkDestroyImageView(device, imageView, nullptr);
|
||||||
|
deleteCount++;
|
||||||
}
|
}
|
||||||
imageViews_.clear();
|
imageViews_.clear();
|
||||||
for (auto &mem : deviceMemory_) {
|
for (auto &mem : deviceMemory_) {
|
||||||
vkFreeMemory(device, mem, nullptr);
|
vkFreeMemory(device, mem, nullptr);
|
||||||
|
deleteCount++;
|
||||||
}
|
}
|
||||||
deviceMemory_.clear();
|
deviceMemory_.clear();
|
||||||
for (auto &sampler : samplers_) {
|
for (auto &sampler : samplers_) {
|
||||||
vkDestroySampler(device, sampler, nullptr);
|
vkDestroySampler(device, sampler, nullptr);
|
||||||
|
deleteCount++;
|
||||||
}
|
}
|
||||||
samplers_.clear();
|
samplers_.clear();
|
||||||
for (auto &pipeline : pipelines_) {
|
for (auto &pipeline : pipelines_) {
|
||||||
vkDestroyPipeline(device, pipeline, nullptr);
|
vkDestroyPipeline(device, pipeline, nullptr);
|
||||||
|
deleteCount++;
|
||||||
}
|
}
|
||||||
pipelines_.clear();
|
pipelines_.clear();
|
||||||
for (auto &pcache : pipelineCaches_) {
|
for (auto &pcache : pipelineCaches_) {
|
||||||
vkDestroyPipelineCache(device, pcache, nullptr);
|
vkDestroyPipelineCache(device, pcache, nullptr);
|
||||||
|
deleteCount++;
|
||||||
}
|
}
|
||||||
pipelineCaches_.clear();
|
pipelineCaches_.clear();
|
||||||
for (auto &renderPass : renderPasses_) {
|
for (auto &renderPass : renderPasses_) {
|
||||||
vkDestroyRenderPass(device, renderPass, nullptr);
|
vkDestroyRenderPass(device, renderPass, nullptr);
|
||||||
|
deleteCount++;
|
||||||
}
|
}
|
||||||
renderPasses_.clear();
|
renderPasses_.clear();
|
||||||
for (auto &framebuffer : framebuffers_) {
|
for (auto &framebuffer : framebuffers_) {
|
||||||
vkDestroyFramebuffer(device, framebuffer, nullptr);
|
vkDestroyFramebuffer(device, framebuffer, nullptr);
|
||||||
|
deleteCount++;
|
||||||
}
|
}
|
||||||
framebuffers_.clear();
|
framebuffers_.clear();
|
||||||
for (auto &pipeLayout : pipelineLayouts_) {
|
for (auto &pipeLayout : pipelineLayouts_) {
|
||||||
vkDestroyPipelineLayout(device, pipeLayout, nullptr);
|
vkDestroyPipelineLayout(device, pipeLayout, nullptr);
|
||||||
|
deleteCount++;
|
||||||
}
|
}
|
||||||
pipelineLayouts_.clear();
|
pipelineLayouts_.clear();
|
||||||
for (auto &descSetLayout : descSetLayouts_) {
|
for (auto &descSetLayout : descSetLayouts_) {
|
||||||
vkDestroyDescriptorSetLayout(device, descSetLayout, nullptr);
|
vkDestroyDescriptorSetLayout(device, descSetLayout, nullptr);
|
||||||
|
deleteCount++;
|
||||||
}
|
}
|
||||||
descSetLayouts_.clear();
|
descSetLayouts_.clear();
|
||||||
for (auto &queryPool : queryPools_) {
|
for (auto &queryPool : queryPools_) {
|
||||||
vkDestroyQueryPool(device, queryPool, nullptr);
|
vkDestroyQueryPool(device, queryPool, nullptr);
|
||||||
|
deleteCount++;
|
||||||
}
|
}
|
||||||
queryPools_.clear();
|
queryPools_.clear();
|
||||||
|
deleteCount_ = deleteCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VulkanContext::GetImageMemoryRequirements(VkImage image, VkMemoryRequirements *mem_reqs, bool *dedicatedAllocation) {
|
void VulkanContext::GetImageMemoryRequirements(VkImage image, VkMemoryRequirements *mem_reqs, bool *dedicatedAllocation) {
|
||||||
|
@ -138,6 +138,10 @@ public:
|
|||||||
void Take(VulkanDeleteList &del);
|
void Take(VulkanDeleteList &del);
|
||||||
void PerformDeletes(VulkanContext *vulkan, VmaAllocator allocator);
|
void PerformDeletes(VulkanContext *vulkan, VmaAllocator allocator);
|
||||||
|
|
||||||
|
int GetLastDeleteCount() const {
|
||||||
|
return deleteCount_;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector<VkCommandPool> cmdPools_;
|
std::vector<VkCommandPool> cmdPools_;
|
||||||
std::vector<VkDescriptorPool> descPools_;
|
std::vector<VkDescriptorPool> descPools_;
|
||||||
@ -157,6 +161,7 @@ private:
|
|||||||
std::vector<VkDescriptorSetLayout> descSetLayouts_;
|
std::vector<VkDescriptorSetLayout> descSetLayouts_;
|
||||||
std::vector<VkQueryPool> queryPools_;
|
std::vector<VkQueryPool> queryPools_;
|
||||||
std::vector<Callback> callbacks_;
|
std::vector<Callback> callbacks_;
|
||||||
|
int deleteCount_ = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
// VulkanContext manages the device and swapchain, and deferred deletion of objects.
|
// VulkanContext manages the device and swapchain, and deferred deletion of objects.
|
||||||
@ -392,6 +397,10 @@ public:
|
|||||||
return availablePresentModes_;
|
return availablePresentModes_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int GetLastDeleteCount() const {
|
||||||
|
return frame_[curFrame_].deleteList.GetLastDeleteCount();
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool ChooseQueue();
|
bool ChooseQueue();
|
||||||
|
|
||||||
|
@ -84,13 +84,16 @@ void FrameData::AcquireNextImage(VulkanContext *vulkan, FrameDataShared &shared)
|
|||||||
WARN_LOG(G3D, "VK_SUBOPTIMAL_KHR returned - ignoring");
|
WARN_LOG(G3D, "VK_SUBOPTIMAL_KHR returned - ignoring");
|
||||||
break;
|
break;
|
||||||
case VK_ERROR_OUT_OF_DATE_KHR:
|
case VK_ERROR_OUT_OF_DATE_KHR:
|
||||||
case VK_ERROR_SURFACE_LOST_KHR:
|
|
||||||
case VK_TIMEOUT:
|
case VK_TIMEOUT:
|
||||||
case VK_NOT_READY:
|
case VK_NOT_READY:
|
||||||
// We do not set hasAcquired here!
|
// We do not set hasAcquired here!
|
||||||
WARN_LOG(G3D, "%s returned from AcquireNextImage - processing the frame, but not presenting", VulkanResultToString(res));
|
WARN_LOG(G3D, "%s returned from AcquireNextImage - processing the frame, but not presenting", VulkanResultToString(res));
|
||||||
skipSwap = true;
|
skipSwap = true;
|
||||||
break;
|
break;
|
||||||
|
case VK_ERROR_SURFACE_LOST_KHR:
|
||||||
|
ERROR_LOG(G3D, "%s returned from AcquireNextImage - ignoring, but this better be during shutdown", VulkanResultToString(res));
|
||||||
|
skipSwap = true;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
// Weird, shouldn't get any other values. Maybe lost device?
|
// Weird, shouldn't get any other values. Maybe lost device?
|
||||||
_assert_msg_(false, "vkAcquireNextImageKHR failed! result=%s", VulkanResultToString(res));
|
_assert_msg_(false, "vkAcquireNextImageKHR failed! result=%s", VulkanResultToString(res));
|
||||||
|
@ -876,9 +876,6 @@ void VulkanQueueRunner::LogRenderPass(const VKRStep &pass, bool verbose) {
|
|||||||
case VKRRenderCommand::BIND_GRAPHICS_PIPELINE:
|
case VKRRenderCommand::BIND_GRAPHICS_PIPELINE:
|
||||||
INFO_LOG(G3D, " BindGraphicsPipeline(%x)", (int)(intptr_t)cmd.graphics_pipeline.pipeline);
|
INFO_LOG(G3D, " BindGraphicsPipeline(%x)", (int)(intptr_t)cmd.graphics_pipeline.pipeline);
|
||||||
break;
|
break;
|
||||||
case VKRRenderCommand::BIND_COMPUTE_PIPELINE:
|
|
||||||
INFO_LOG(G3D, " BindComputePipeline(%x)", (int)(intptr_t)cmd.compute_pipeline.pipeline);
|
|
||||||
break;
|
|
||||||
case VKRRenderCommand::BLEND:
|
case VKRRenderCommand::BLEND:
|
||||||
INFO_LOG(G3D, " BlendColor(%08x)", cmd.blendColor.color);
|
INFO_LOG(G3D, " BlendColor(%08x)", cmd.blendColor.color);
|
||||||
break;
|
break;
|
||||||
@ -1259,20 +1256,6 @@ void VulkanQueueRunner::PerformRenderPass(const VKRStep &step, VkCommandBuffer c
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case VKRRenderCommand::BIND_COMPUTE_PIPELINE:
|
|
||||||
{
|
|
||||||
VKRComputePipeline *computePipeline = c.compute_pipeline.pipeline;
|
|
||||||
if (computePipeline != lastComputePipeline) {
|
|
||||||
VkPipeline pipeline = computePipeline->pipeline->BlockUntilReady();
|
|
||||||
if (pipeline != VK_NULL_HANDLE) {
|
|
||||||
vkCmdBindPipeline(cmd, VK_PIPELINE_BIND_POINT_COMPUTE, pipeline);
|
|
||||||
pipelineLayout = c.pipeline.pipelineLayout->pipelineLayout;
|
|
||||||
lastComputePipeline = computePipeline;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case VKRRenderCommand::VIEWPORT:
|
case VKRRenderCommand::VIEWPORT:
|
||||||
if (fb != nullptr) {
|
if (fb != nullptr) {
|
||||||
vkCmdSetViewport(cmd, 0, 1, &c.viewport.vp);
|
vkCmdSetViewport(cmd, 0, 1, &c.viewport.vp);
|
||||||
|
@ -31,7 +31,6 @@ enum {
|
|||||||
enum class VKRRenderCommand : uint8_t {
|
enum class VKRRenderCommand : uint8_t {
|
||||||
REMOVED,
|
REMOVED,
|
||||||
BIND_GRAPHICS_PIPELINE, // async
|
BIND_GRAPHICS_PIPELINE, // async
|
||||||
BIND_COMPUTE_PIPELINE, // async
|
|
||||||
STENCIL,
|
STENCIL,
|
||||||
BLEND,
|
BLEND,
|
||||||
VIEWPORT,
|
VIEWPORT,
|
||||||
|
@ -689,6 +689,8 @@ void VulkanRenderManager::BeginFrame(bool enableProfiling, bool enableLogProfile
|
|||||||
str << line;
|
str << line;
|
||||||
snprintf(line, sizeof(line), "Descriptors written: %d\n", frameData.profile.descriptorsWritten);
|
snprintf(line, sizeof(line), "Descriptors written: %d\n", frameData.profile.descriptorsWritten);
|
||||||
str << line;
|
str << line;
|
||||||
|
snprintf(line, sizeof(line), "Resource deletions: %d\n", vulkan_->GetLastDeleteCount());
|
||||||
|
str << line;
|
||||||
for (int i = 0; i < numQueries - 1; i++) {
|
for (int i = 0; i < numQueries - 1; i++) {
|
||||||
uint64_t diff = (queryResults[i + 1] - queryResults[i]) & timestampDiffMask;
|
uint64_t diff = (queryResults[i + 1] - queryResults[i]) & timestampDiffMask;
|
||||||
double milliseconds = (double)diff * timestampConversionFactor;
|
double milliseconds = (double)diff * timestampConversionFactor;
|
||||||
|
@ -322,16 +322,6 @@ public:
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BindPipeline(VKRComputePipeline *pipeline, PipelineFlags flags, VKRPipelineLayout *pipelineLayout) {
|
|
||||||
_dbg_assert_(curRenderStep_ && curRenderStep_->stepType == VKRStepType::RENDER);
|
|
||||||
_dbg_assert_(pipeline != nullptr);
|
|
||||||
VkRenderData &data = curRenderStep_->commands.push_uninitialized();
|
|
||||||
data.cmd = VKRRenderCommand::BIND_COMPUTE_PIPELINE;
|
|
||||||
data.compute_pipeline.pipeline = pipeline;
|
|
||||||
data.compute_pipeline.pipelineLayout = pipelineLayout;
|
|
||||||
curPipelineFlags_ |= flags;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SetViewport(const VkViewport &vp) {
|
void SetViewport(const VkViewport &vp) {
|
||||||
_dbg_assert_(curRenderStep_ && curRenderStep_->stepType == VKRStepType::RENDER);
|
_dbg_assert_(curRenderStep_ && curRenderStep_->stepType == VKRStepType::RENDER);
|
||||||
_dbg_assert_((int)vp.width >= 0);
|
_dbg_assert_((int)vp.width >= 0);
|
||||||
|
12
README.md
12
README.md
@ -25,6 +25,15 @@ If you want to download regularly updated builds for Android, Windows x86 and x6
|
|||||||
|
|
||||||
For game compatibility, see [community compatibility feedback](https://report.ppsspp.org/games).
|
For game compatibility, see [community compatibility feedback](https://report.ppsspp.org/games).
|
||||||
|
|
||||||
|
What's new in 1.16.6
|
||||||
|
====================
|
||||||
|
- Fix performance issue with Vulkan descriptor set allocation ([#18332])
|
||||||
|
- Smoother loading of replacement textures
|
||||||
|
- Fix the store on iOS ([#18323])
|
||||||
|
- Fix problem with waves background ([#18310])
|
||||||
|
- Some translation updates
|
||||||
|
- Other minor fixes
|
||||||
|
|
||||||
What's new in 1.16.5
|
What's new in 1.16.5
|
||||||
====================
|
====================
|
||||||
- Additional crash and memory-leak fixes ([#18243], [#18244], [#18247])
|
- Additional crash and memory-leak fixes ([#18243], [#18244], [#18247])
|
||||||
@ -450,3 +459,6 @@ Credit goes to:
|
|||||||
[#18255]: https://github.com/hrydgard/ppsspp/issues/18255 "Fix issue uploading narrow textures in OpenGL."
|
[#18255]: https://github.com/hrydgard/ppsspp/issues/18255 "Fix issue uploading narrow textures in OpenGL."
|
||||||
[#18250]: https://github.com/hrydgard/ppsspp/issues/18250 "Separate out accelerometer events from joystick axis events"
|
[#18250]: https://github.com/hrydgard/ppsspp/issues/18250 "Separate out accelerometer events from joystick axis events"
|
||||||
[#18249]: https://github.com/hrydgard/ppsspp/issues/18249 "arm64jit: Avoid fused multiplies in vcrsp.t"
|
[#18249]: https://github.com/hrydgard/ppsspp/issues/18249 "arm64jit: Avoid fused multiplies in vcrsp.t"
|
||||||
|
[#18332]: https://github.com/hrydgard/ppsspp/issues/18332 "We somehow lost the usage_ counter increment in VulkanDescSetPool, fix that"
|
||||||
|
[#18323]: https://github.com/hrydgard/ppsspp/issues/18323 "Turn off HTTPS support for iOS."
|
||||||
|
[#18310]: https://github.com/hrydgard/ppsspp/issues/18310 "Fix waves background"
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities" IgnorableNamespaces="uap mp rescap">
|
<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities" IgnorableNamespaces="uap mp rescap">
|
||||||
<Identity Name="0ad29e1a-1069-4cf5-8c97-620892505f0c" Publisher="CN=Henrik" Version="1.16.5.0" />
|
<Identity Name="0ad29e1a-1069-4cf5-8c97-620892505f0c" Publisher="CN=Henrik" Version="1.16.6.0" />
|
||||||
<mp:PhoneIdentity PhoneProductId="0ad29e1a-1069-4cf5-8c97-620892505f0c" PhonePublisherId="00000000-0000-0000-0000-000000000000" />
|
<mp:PhoneIdentity PhoneProductId="0ad29e1a-1069-4cf5-8c97-620892505f0c" PhonePublisherId="00000000-0000-0000-0000-000000000000" />
|
||||||
<Properties>
|
<Properties>
|
||||||
<DisplayName>PPSSPP - PSP emulator</DisplayName>
|
<DisplayName>PPSSPP - PSP emulator</DisplayName>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities" IgnorableNamespaces="uap mp rescap">
|
<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities" IgnorableNamespaces="uap mp rescap">
|
||||||
<Identity Name="32617401-c880-44d1-ba5a-c0b46feba525" Publisher="CN=Henrik" Version="1.16.5.0" />
|
<Identity Name="32617401-c880-44d1-ba5a-c0b46feba525" Publisher="CN=Henrik" Version="1.16.6.0" />
|
||||||
<mp:PhoneIdentity PhoneProductId="32617401-c880-44d1-ba5a-c0b46feba525" PhonePublisherId="00000000-0000-0000-0000-000000000000" />
|
<mp:PhoneIdentity PhoneProductId="32617401-c880-44d1-ba5a-c0b46feba525" PhonePublisherId="00000000-0000-0000-0000-000000000000" />
|
||||||
<Properties>
|
<Properties>
|
||||||
<DisplayName>PPSSPP Gold - PSP emulator</DisplayName>
|
<DisplayName>PPSSPP Gold - PSP emulator</DisplayName>
|
||||||
|
@ -1448,6 +1448,11 @@ static void VulkanEmuThread(ANativeWindow *wnd);
|
|||||||
extern "C" bool JNICALL Java_org_ppsspp_ppsspp_NativeActivity_runVulkanRenderLoop(JNIEnv * env, jobject obj, jobject _surf) {
|
extern "C" bool JNICALL Java_org_ppsspp_ppsspp_NativeActivity_runVulkanRenderLoop(JNIEnv * env, jobject obj, jobject _surf) {
|
||||||
_assert_(!useCPUThread);
|
_assert_(!useCPUThread);
|
||||||
|
|
||||||
|
if (!graphicsContext) {
|
||||||
|
ERROR_LOG(G3D, "runVulkanRenderLoop: Tried to enter without a created graphics context.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (g_vulkanRenderLoopThread.joinable()) {
|
if (g_vulkanRenderLoopThread.joinable()) {
|
||||||
ERROR_LOG(G3D, "runVulkanRenderLoop: Already running");
|
ERROR_LOG(G3D, "runVulkanRenderLoop: Already running");
|
||||||
return false;
|
return false;
|
||||||
|
Loading…
Reference in New Issue
Block a user