diff --git a/ext/native/gfx_es2/draw_buffer.cpp b/ext/native/gfx_es2/draw_buffer.cpp index 5d1bb88153..b329534a93 100644 --- a/ext/native/gfx_es2/draw_buffer.cpp +++ b/ext/native/gfx_es2/draw_buffer.cpp @@ -495,8 +495,12 @@ void DrawBuffer::DrawTextRect(int font, const char *text, float x, float y, floa // ROTATE_* doesn't yet work right. void DrawBuffer::DrawText(int font, const char *text, float x, float y, Color color, int align) { // rough estimate - if (count_ + strlen(text) * 6 > MAX_VERTS) { + size_t textLen = strlen(text); + if (count_ + textLen * 6 > MAX_VERTS) { Flush(true); + if (textLen * 6 >= MAX_VERTS) { + textLen = std::min(MAX_VERTS / 6 - 10, (int)textLen); + } } const AtlasFont &atlasfont = *atlas->fonts[font]; @@ -508,14 +512,14 @@ void DrawBuffer::DrawText(int font, const char *text, float x, float y, Color co } if (align & ROTATE_90DEG_LEFT) { - x -= atlasfont.ascend*fontscaley; + x -= atlasfont.ascend * fontscaley; // y += h; + } else { + y += atlasfont.ascend * fontscaley; } - else - y += atlasfont.ascend*fontscaley; float sx = x; UTF8 utf(text); - while (true) { + for (size_t i = 0; i < textLen; i++) { if (utf.end()) break; cval = utf.next(); diff --git a/ext/native/thin3d/VulkanQueueRunner.cpp b/ext/native/thin3d/VulkanQueueRunner.cpp index 0b16b4bbc7..8a7dcd8f4a 100644 --- a/ext/native/thin3d/VulkanQueueRunner.cpp +++ b/ext/native/thin3d/VulkanQueueRunner.cpp @@ -469,7 +469,7 @@ void VulkanQueueRunner::RunSteps(VkCommandBuffer cmd, std::vector &st break; } - if (profile) { + if (profile && profile->timestampDescriptions.size() + 1 < MAX_TIMESTAMP_QUERIES) { vkCmdWriteTimestamp(cmd, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, profile->queryPool, (uint32_t)profile->timestampDescriptions.size()); profile->timestampDescriptions.push_back(StepToString(step)); } diff --git a/ext/native/thin3d/VulkanRenderManager.h b/ext/native/thin3d/VulkanRenderManager.h index 4201d912ad..c14c894a72 100644 --- a/ext/native/thin3d/VulkanRenderManager.h +++ b/ext/native/thin3d/VulkanRenderManager.h @@ -85,6 +85,10 @@ enum class VKRRunType { SYNC, }; +enum { + MAX_TIMESTAMP_QUERIES = 128, +}; + class VulkanRenderManager { public: VulkanRenderManager(VulkanContext *vulkan); @@ -299,10 +303,6 @@ private: FrameData frameData_[VulkanContext::MAX_INFLIGHT_FRAMES]; - enum { - MAX_TIMESTAMP_QUERIES = 256, - }; - // Submission time state int curWidth_ = -1; int curHeight_ = -1;