From 3f344660c06f0ca456f887cbcfb60b50fc29a78e Mon Sep 17 00:00:00 2001 From: Themaister Date: Fri, 19 Oct 2018 19:18:54 +0200 Subject: [PATCH 1/2] Remove Windows \r line endings in glslang parser. --- gfx/drivers_shader/glslang_util.cpp | 9 +++++++++ gfx/drivers_shader/slang_process.cpp | 1 + 2 files changed, 10 insertions(+) diff --git a/gfx/drivers_shader/glslang_util.cpp b/gfx/drivers_shader/glslang_util.cpp index 96b0b6026b..d2e9a993f7 100644 --- a/gfx/drivers_shader/glslang_util.cpp +++ b/gfx/drivers_shader/glslang_util.cpp @@ -55,6 +55,15 @@ bool glslang_read_shader_file(const char *path, vector *output, bool roo return false; } + /* Remove Windows \r chars if we encounter them. + * filestream_read_file() allocates one extra for 0 terminator. */ + auto itr = remove_if(buf, buf + len + 1, [](char c) { + return c == '\r'; + }); + + if (itr < buf + len) + *itr = '\0'; + /* Cannot use string_split since it removes blank lines (strtok). */ ptr = buf; diff --git a/gfx/drivers_shader/slang_process.cpp b/gfx/drivers_shader/slang_process.cpp index a8a6db588b..3d9f1179f2 100644 --- a/gfx/drivers_shader/slang_process.cpp +++ b/gfx/drivers_shader/slang_process.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include "glslang_util.h" #include "slang_preprocess.h" From afcd25a3f8572277ce962d5c73c162637105f613 Mon Sep 17 00:00:00 2001 From: Themaister Date: Thu, 8 Nov 2018 21:44:44 +0100 Subject: [PATCH 2/2] Vulkan: Fix scissor in menu driver. --- gfx/common/vulkan_common.c | 16 ++++++++++++---- gfx/common/vulkan_common.h | 2 ++ menu/drivers_display/menu_display_vulkan.c | 21 ++++++++------------- 3 files changed, 22 insertions(+), 17 deletions(-) diff --git a/gfx/common/vulkan_common.c b/gfx/common/vulkan_common.c index 503922603c..24402cddba 100644 --- a/gfx/common/vulkan_common.c +++ b/gfx/common/vulkan_common.c @@ -979,10 +979,18 @@ static void vulkan_check_dynamic_state( { VkRect2D sci; - sci.offset.x = vk->vp.x; - sci.offset.y = vk->vp.y; - sci.extent.width = vk->vp.width; - sci.extent.height = vk->vp.height; + if (vk->tracker.use_scissor) + { + sci = vk->tracker.scissor; + } + else + { + /* No scissor -> viewport */ + sci.offset.x = vk->vp.x; + sci.offset.y = vk->vp.y; + sci.extent.width = vk->vp.width; + sci.extent.height = vk->vp.height; + } vkCmdSetViewport(vk->cmd, 0, 1, &vk->vk_vp); vkCmdSetScissor (vk->cmd, 0, 1, &sci); diff --git a/gfx/common/vulkan_common.h b/gfx/common/vulkan_common.h index 4e7e24c9b9..a66544af6a 100644 --- a/gfx/common/vulkan_common.h +++ b/gfx/common/vulkan_common.h @@ -423,6 +423,8 @@ typedef struct vk struct { uint64_t dirty; + VkRect2D scissor; + bool use_scissor; VkPipeline pipeline; VkImageView view; VkSampler sampler; diff --git a/menu/drivers_display/menu_display_vulkan.c b/menu/drivers_display/menu_display_vulkan.c index 261037aa2c..e1e5ee4699 100644 --- a/menu/drivers_display/menu_display_vulkan.c +++ b/menu/drivers_display/menu_display_vulkan.c @@ -352,25 +352,20 @@ static void menu_display_vk_scissor_begin(video_frame_info_t *video_info, VkRect2D sci; vk_t *vk = video_info ? (vk_t*)video_info->userdata : NULL; - sci.offset.x = x; - sci.offset.y = video_info->height - y - height; - sci.extent.width = width; - sci.extent.height = height; - - vkCmdSetScissor (vk->cmd, 0, 1, &sci); + vk->tracker.use_scissor = true; + vk->tracker.scissor.offset.x = x; + vk->tracker.scissor.offset.y = y; + vk->tracker.scissor.extent.width = width; + vk->tracker.scissor.extent.height = height; + vk->tracker.dirty |= VULKAN_DIRTY_DYNAMIC_BIT; } static void menu_display_vk_scissor_end(video_frame_info_t *video_info) { VkRect2D sci; vk_t *vk = video_info ? (vk_t*)video_info->userdata : NULL; - - sci.offset.x = 0; - sci.offset.y = 0; - sci.extent.width = video_info->width; - sci.extent.height = video_info->height; - - vkCmdSetScissor (vk->cmd, 0, 1, &sci); + vk->tracker.use_scissor = false; + vk->tracker.dirty |= VULKAN_DIRTY_DYNAMIC_BIT; } menu_display_ctx_driver_t menu_display_ctx_vulkan = {