diff --git a/win32/CVulkan.cpp b/win32/CVulkan.cpp index ca70a976..69e42bfc 100644 --- a/win32/CVulkan.cpp +++ b/win32/CVulkan.cpp @@ -22,6 +22,16 @@ bool CVulkan::Initialize(HWND hWnd) swapchain = context->swapchain.get(); device = context->device; + if (GUI.shaderEnabled && GUI.OGLshaderFileName) + { + shaderchain = std::make_unique(context.get()); + if (!shaderchain->load_shader_preset(std::string(_tToChar(GUI.OGLshaderFileName)))) + { + return false; + } + return true; + } + create_pipeline(); descriptors.clear(); @@ -72,6 +82,7 @@ void CVulkan::DeInitialize() return; context->wait_idle(); + shaderchain.reset(); textures.clear(); descriptors.clear(); device.destroySampler(linear_sampler); @@ -117,6 +128,12 @@ void CVulkan::Render(SSurface Src) //Get maximum rect respecting AR setting displayRect = CalculateDisplayRect(Dst.Width, Dst.Height, windowSize.right, windowSize.bottom); + if (shaderchain) + { + shaderchain->do_frame(Dst.Surface, Dst.Width, Dst.Height, Dst.Pitch, vk::Format::eR5G6B5UnormPack16, displayRect.left, displayRect.top, displayRect.right - displayRect.left, displayRect.bottom - displayRect.top); + return; + } + if (!swapchain->begin_frame()) return; diff --git a/win32/CVulkan.h b/win32/CVulkan.h index d20b18a1..a1530abd 100644 --- a/win32/CVulkan.h +++ b/win32/CVulkan.h @@ -3,6 +3,7 @@ #include "IS9xDisplayOutput.h" #include "../vulkan/vulkan_context.hpp" #include "../vulkan/vulkan_texture.hpp" +#include "../vulkan/vulkan_shader_chain.hpp" class CVulkan : public IS9xDisplayOutput { @@ -21,6 +22,7 @@ class CVulkan : public IS9xDisplayOutput std::vector textures; std::vector descriptors; std::vector filtered_image; + std::unique_ptr shaderchain; int current_width; int current_height;