diff --git a/src/android/app/src/main/jni/emu_window/emu_window.cpp b/src/android/app/src/main/jni/emu_window/emu_window.cpp index e94c54044..1ce0429f3 100644 --- a/src/android/app/src/main/jni/emu_window/emu_window.cpp +++ b/src/android/app/src/main/jni/emu_window/emu_window.cpp @@ -19,13 +19,13 @@ static bool IsPortraitMode() { return JNI_FALSE != IDCache::GetEnvForThread()->CallStaticBooleanMethod( - IDCache::GetNativeLibraryClass(), IDCache::GetIsPortraitMode()); + IDCache::GetNativeLibraryClass(), IDCache::GetIsPortraitMode()); } static void UpdateLandscapeScreenLayout() { Settings::values.layout_option = - static_cast(IDCache::GetEnvForThread()->CallStaticIntMethod( - IDCache::GetNativeLibraryClass(), IDCache::GetLandscapeScreenLayout())); + static_cast(IDCache::GetEnvForThread()->CallStaticIntMethod( + IDCache::GetNativeLibraryClass(), IDCache::GetLandscapeScreenLayout())); } void EmuWindow_Android::OnSurfaceChanged(ANativeWindow* surface) { @@ -63,7 +63,7 @@ void EmuWindow_Android::OnFramebufferSizeChanged() { } } -EmuWindow_Android::EmuWindow_Android(ANativeWindow *surface) : host_window{surface} { +EmuWindow_Android::EmuWindow_Android(ANativeWindow* surface) : host_window{surface} { LOG_DEBUG(Frontend, "Initializing EmuWindow_Android"); if (!surface) { @@ -71,7 +71,7 @@ EmuWindow_Android::EmuWindow_Android(ANativeWindow *surface) : host_window{surfa return; } - window_width = ANativeWindow_getWidth(surface); + window_width = ANativeWindow_getWidth(surface); window_height = ANativeWindow_getHeight(surface); Network::Init(); diff --git a/src/android/app/src/main/jni/emu_window/emu_window.h b/src/android/app/src/main/jni/emu_window/emu_window.h index e8554bae7..c3bced848 100644 --- a/src/android/app/src/main/jni/emu_window/emu_window.h +++ b/src/android/app/src/main/jni/emu_window/emu_window.h @@ -9,11 +9,11 @@ class EmuWindow_Android : public Frontend::EmuWindow { public: - EmuWindow_Android(ANativeWindow *surface); + EmuWindow_Android(ANativeWindow* surface); ~EmuWindow_Android(); /// Called by the onSurfaceChanges() method to change the surface - void OnSurfaceChanged(ANativeWindow *surface); + void OnSurfaceChanged(ANativeWindow* surface); /// Handles touch event that occur.(Touched or released) bool OnTouchEvent(int x, int y, bool pressed); diff --git a/src/android/app/src/main/jni/emu_window/emu_window_gl.cpp b/src/android/app/src/main/jni/emu_window/emu_window_gl.cpp index 116bdcbea..4e986649f 100644 --- a/src/android/app/src/main/jni/emu_window/emu_window_gl.cpp +++ b/src/android/app/src/main/jni/emu_window/emu_window_gl.cpp @@ -41,9 +41,11 @@ static constexpr std::array egl_context_attribs{EGL_CONTEXT_CLIENT_VE class SharedContext_Android : public Frontend::GraphicsContext { public: SharedContext_Android(EGLDisplay egl_display, EGLConfig egl_config, - EGLContext egl_share_context) : egl_display{egl_display}, - egl_surface{eglCreatePbufferSurface(egl_display, egl_config, egl_empty_attribs.data())}, - egl_context{eglCreateContext(egl_display, egl_config, egl_share_context, egl_context_attribs.data())} { + EGLContext egl_share_context) + : egl_display{egl_display}, egl_surface{eglCreatePbufferSurface(egl_display, egl_config, + egl_empty_attribs.data())}, + egl_context{eglCreateContext(egl_display, egl_config, egl_share_context, + egl_context_attribs.data())} { ASSERT_MSG(egl_surface, "eglCreatePbufferSurface() failed!"); ASSERT_MSG(egl_context, "eglCreateContext() failed!"); } @@ -72,7 +74,8 @@ private: EGLContext egl_context{}; }; -EmuWindow_Android_OpenGL::EmuWindow_Android_OpenGL(ANativeWindow* surface) : EmuWindow_Android{surface} { +EmuWindow_Android_OpenGL::EmuWindow_Android_OpenGL(ANativeWindow* surface) + : EmuWindow_Android{surface} { if (egl_display = eglGetDisplay(EGL_DEFAULT_DISPLAY); egl_display == EGL_NO_DISPLAY) { LOG_CRITICAL(Frontend, "eglGetDisplay() failed"); return; diff --git a/src/android/app/src/main/jni/emu_window/emu_window_vk.cpp b/src/android/app/src/main/jni/emu_window/emu_window_vk.cpp index b16a70f56..7f680d3b8 100644 --- a/src/android/app/src/main/jni/emu_window/emu_window_vk.cpp +++ b/src/android/app/src/main/jni/emu_window/emu_window_vk.cpp @@ -19,7 +19,8 @@ class SharedContext_Android : public Frontend::GraphicsContext {}; -EmuWindow_Android_Vulkan::EmuWindow_Android_Vulkan(ANativeWindow* surface) : EmuWindow_Android{surface} { +EmuWindow_Android_Vulkan::EmuWindow_Android_Vulkan(ANativeWindow* surface) + : EmuWindow_Android{surface} { CreateWindowSurface(); if (core_context = CreateSharedContext(); !core_context) { diff --git a/src/android/app/src/main/jni/native.cpp b/src/android/app/src/main/jni/native.cpp index 7bd71ebd8..2fb68e8ca 100644 --- a/src/android/app/src/main/jni/native.cpp +++ b/src/android/app/src/main/jni/native.cpp @@ -32,8 +32,8 @@ #include "jni/camera/ndk_camera.h" #include "jni/camera/still_image_camera.h" #include "jni/config.h" -#include "jni/emu_window/emu_window_vk.h" #include "jni/emu_window/emu_window_gl.h" +#include "jni/emu_window/emu_window_vk.h" #include "jni/game_info.h" #include "jni/game_settings.h" #include "jni/id_cache.h" diff --git a/src/common/error.cpp b/src/common/error.cpp index 1bd77557f..3338df450 100644 --- a/src/common/error.cpp +++ b/src/common/error.cpp @@ -30,7 +30,8 @@ std::string NativeErrorToString(int e) { return ret; #else char err_str[255]; -#if (defined(__GLIBC__) && (_GNU_SOURCE || (_POSIX_C_SOURCE < 200112L && _XOPEN_SOURCE < 600))) || defined(ANDROID) +#if (defined(__GLIBC__) && (_GNU_SOURCE || (_POSIX_C_SOURCE < 200112L && _XOPEN_SOURCE < 600))) || \ + defined(ANDROID) // Thread safe (GNU-specific) const char* str = strerror_r(e, err_str, sizeof(err_str)); return std::string(str); diff --git a/src/common/polyfill_thread.h b/src/common/polyfill_thread.h index 5a5a769dd..958061b93 100644 --- a/src/common/polyfill_thread.h +++ b/src/common/polyfill_thread.h @@ -105,7 +105,7 @@ private: } // namespace polyfill #if ANDROID -template < class T, class... Args > +template concept constructible_from = is_nothrow_destructible_v && is_constructible_v; #endif diff --git a/src/video_core/renderer_opengl/gl_driver.cpp b/src/video_core/renderer_opengl/gl_driver.cpp index 169366f4c..1db851455 100644 --- a/src/video_core/renderer_opengl/gl_driver.cpp +++ b/src/video_core/renderer_opengl/gl_driver.cpp @@ -125,7 +125,7 @@ void Driver::DeduceVendor() { } else if (gpu_vendor.find("ARM") != gpu_vendor.npos) { vendor = Vendor::ARM; } else if (gpu_vendor.find("GDI Generic") != gpu_vendor.npos) { - vendor = Vendor::Generic; + vendor = Vendor::Generic; } } diff --git a/src/video_core/renderer_opengl/gl_shader_gen.cpp b/src/video_core/renderer_opengl/gl_shader_gen.cpp index cf89a5bc8..628274c23 100644 --- a/src/video_core/renderer_opengl/gl_shader_gen.cpp +++ b/src/video_core/renderer_opengl/gl_shader_gen.cpp @@ -262,7 +262,8 @@ static std::string SampleTexture(const PicaFSConfig& config, unsigned texture_un // Only unit 0 respects the texturing type switch (state.texture0_type) { case TexturingRegs::TextureConfig::Texture2D: - return "textureLod(tex0, texcoord0, getLod(texcoord0 * vec2(textureSize(tex0, 0))) + tex_lod_bias[0])"; + return "textureLod(tex0, texcoord0, getLod(texcoord0 * vec2(textureSize(tex0, 0))) + " + "tex_lod_bias[0])"; case TexturingRegs::TextureConfig::Projection2D: // TODO (wwylele): find the exact LOD formula for projection texture return "textureProj(tex0, vec3(texcoord0, texcoord0_w))"; @@ -280,12 +281,15 @@ static std::string SampleTexture(const PicaFSConfig& config, unsigned texture_un return "texture(tex0, texcoord0)"; } case 1: - return "textureLod(tex1, texcoord1, getLod(texcoord1 * vec2(textureSize(tex1, 0))) + tex_lod_bias[1])"; + return "textureLod(tex1, texcoord1, getLod(texcoord1 * vec2(textureSize(tex1, 0))) + " + "tex_lod_bias[1])"; case 2: if (state.texture2_use_coord1) - return "textureLod(tex2, texcoord1, getLod(texcoord1 * vec2(textureSize(tex2, 0))) + tex_lod_bias[2])"; + return "textureLod(tex2, texcoord1, getLod(texcoord1 * vec2(textureSize(tex2, 0))) + " + "tex_lod_bias[2])"; else - return "textureLod(tex2, texcoord2, getLod(texcoord2 * vec2(textureSize(tex2, 0))) + tex_lod_bias[2])"; + return "textureLod(tex2, texcoord2, getLod(texcoord2 * vec2(textureSize(tex2, 0))) + " + "tex_lod_bias[2])"; case 3: if (state.proctex.enable) { return "ProcTex()"; diff --git a/src/video_core/renderer_opengl/gl_texture_runtime.cpp b/src/video_core/renderer_opengl/gl_texture_runtime.cpp index b37b0377c..3405c41ee 100644 --- a/src/video_core/renderer_opengl/gl_texture_runtime.cpp +++ b/src/video_core/renderer_opengl/gl_texture_runtime.cpp @@ -222,11 +222,10 @@ bool TextureRuntime::ClearTexture(Surface& surface, const VideoCore::TextureClea bool TextureRuntime::CopyTextures(Surface& source, Surface& dest, const VideoCore::TextureCopy& copy) { - glCopyImageSubData(source.texture.handle, GL_TEXTURE_2D, - copy.src_level, copy.src_offset.x, copy.src_offset.y, 0, - dest.texture.handle, GL_TEXTURE_2D, - copy.dst_level, copy.dst_offset.x, copy.dst_offset.y, 0, - copy.extent.width, copy.extent.height, 1); + glCopyImageSubData(source.texture.handle, GL_TEXTURE_2D, copy.src_level, copy.src_offset.x, + copy.src_offset.y, 0, dest.texture.handle, GL_TEXTURE_2D, copy.dst_level, + copy.dst_offset.x, copy.dst_offset.y, 0, copy.extent.width, + copy.extent.height, 1); return true; } diff --git a/src/video_core/renderer_vulkan/renderer_vulkan.cpp b/src/video_core/renderer_vulkan/renderer_vulkan.cpp index 93b0e4ecb..941905c96 100644 --- a/src/video_core/renderer_vulkan/renderer_vulkan.cpp +++ b/src/video_core/renderer_vulkan/renderer_vulkan.cpp @@ -208,11 +208,10 @@ void RendererVulkan::BeginRendering() { device.updateDescriptorSetWithTemplate(set, present_update_template, present_textures[0]); scheduler.Record([this, set, pipeline_index = current_pipeline](vk::CommandBuffer cmdbuf) { - cmdbuf.bindPipeline(vk::PipelineBindPoint::eGraphics, - present_pipelines[pipeline_index]); + cmdbuf.bindPipeline(vk::PipelineBindPoint::eGraphics, present_pipelines[pipeline_index]); - cmdbuf.bindDescriptorSets(vk::PipelineBindPoint::eGraphics, present_pipeline_layout, - 0, set, {}); + cmdbuf.bindDescriptorSets(vk::PipelineBindPoint::eGraphics, present_pipeline_layout, 0, set, + {}); }); const RenderpassState renderpass_info = { @@ -561,15 +560,14 @@ void RendererVulkan::LoadColorToActiveVkTexture(u8 color_r, u8 color_g, u8 color }; cmdbuf.pipelineBarrier(vk::PipelineStageFlagBits::eFragmentShader, - vk::PipelineStageFlagBits::eTransfer, - vk::DependencyFlagBits::eByRegion, {}, {}, pre_barrier); + vk::PipelineStageFlagBits::eTransfer, + vk::DependencyFlagBits::eByRegion, {}, {}, pre_barrier); - cmdbuf.clearColorImage(image, vk::ImageLayout::eTransferDstOptimal, clear_color, - range); + cmdbuf.clearColorImage(image, vk::ImageLayout::eTransferDstOptimal, clear_color, range); cmdbuf.pipelineBarrier(vk::PipelineStageFlagBits::eTransfer, - vk::PipelineStageFlagBits::eFragmentShader, - vk::DependencyFlagBits::eByRegion, {}, {}, post_barrier); + vk::PipelineStageFlagBits::eFragmentShader, + vk::DependencyFlagBits::eByRegion, {}, {}, post_barrier); }); } @@ -626,9 +624,8 @@ void RendererVulkan::DrawSingleScreenRotated(u32 screen_id, float x, float y, fl scheduler.Record([this, offset = offset, info = draw_info](vk::CommandBuffer cmdbuf) { cmdbuf.pushConstants(present_pipeline_layout, - vk::ShaderStageFlagBits::eFragment | - vk::ShaderStageFlagBits::eVertex, - 0, sizeof(info), &info); + vk::ShaderStageFlagBits::eFragment | vk::ShaderStageFlagBits::eVertex, + 0, sizeof(info), &info); cmdbuf.bindVertexBuffers(0, vertex_buffer.Handle(), {0}); cmdbuf.draw(4, 1, offset / sizeof(ScreenRectVertex), 0); @@ -664,9 +661,8 @@ void RendererVulkan::DrawSingleScreen(u32 screen_id, float x, float y, float w, scheduler.Record([this, offset = offset, info = draw_info](vk::CommandBuffer cmdbuf) { cmdbuf.pushConstants(present_pipeline_layout, - vk::ShaderStageFlagBits::eFragment | - vk::ShaderStageFlagBits::eVertex, - 0, sizeof(info), &info); + vk::ShaderStageFlagBits::eFragment | vk::ShaderStageFlagBits::eVertex, + 0, sizeof(info), &info); cmdbuf.bindVertexBuffers(0, vertex_buffer.Handle(), {0}); cmdbuf.draw(4, 1, offset / sizeof(ScreenRectVertex), 0); @@ -703,9 +699,8 @@ void RendererVulkan::DrawSingleScreenStereoRotated(u32 screen_id_l, u32 screen_i scheduler.Record([this, offset = offset, info = draw_info](vk::CommandBuffer cmdbuf) { cmdbuf.pushConstants(present_pipeline_layout, - vk::ShaderStageFlagBits::eFragment | - vk::ShaderStageFlagBits::eVertex, - 0, sizeof(info), &info); + vk::ShaderStageFlagBits::eFragment | vk::ShaderStageFlagBits::eVertex, + 0, sizeof(info), &info); cmdbuf.bindVertexBuffers(0, vertex_buffer.Handle(), {0}); cmdbuf.draw(4, 1, offset / sizeof(ScreenRectVertex), 0); @@ -744,9 +739,8 @@ void RendererVulkan::DrawSingleScreenStereo(u32 screen_id_l, u32 screen_id_r, fl scheduler.Record([this, offset = offset, info = draw_info](vk::CommandBuffer cmdbuf) { cmdbuf.pushConstants(present_pipeline_layout, - vk::ShaderStageFlagBits::eFragment | - vk::ShaderStageFlagBits::eVertex, - 0, sizeof(info), &info); + vk::ShaderStageFlagBits::eFragment | vk::ShaderStageFlagBits::eVertex, + 0, sizeof(info), &info); cmdbuf.bindVertexBuffers(0, vertex_buffer.Handle(), {0}); cmdbuf.draw(4, 1, offset / sizeof(ScreenRectVertex), 0); diff --git a/src/video_core/renderer_vulkan/vk_blit_helper.cpp b/src/video_core/renderer_vulkan/vk_blit_helper.cpp index 5154c88ea..087882fa9 100644 --- a/src/video_core/renderer_vulkan/vk_blit_helper.cpp +++ b/src/video_core/renderer_vulkan/vk_blit_helper.cpp @@ -14,8 +14,7 @@ namespace Vulkan { BlitHelper::BlitHelper(const Instance& instance, Scheduler& scheduler, - DescriptorManager& desc_manager, - RenderpassCache& renderpass_cache) + DescriptorManager& desc_manager, RenderpassCache& renderpass_cache) : scheduler{scheduler}, desc_manager{desc_manager}, renderpass_cache{renderpass_cache}, device{instance.GetDevice()} { constexpr std::string_view cs_source = R"( @@ -242,24 +241,24 @@ void BlitHelper::BlitD24S8ToR32(Surface& source, Surface& dest, }, }}; cmdbuf.pipelineBarrier(vk::PipelineStageFlagBits::eEarlyFragmentTests | - vk::PipelineStageFlagBits::eLateFragmentTests, + vk::PipelineStageFlagBits::eLateFragmentTests, vk::PipelineStageFlagBits::eComputeShader, vk::DependencyFlagBits::eByRegion, {}, {}, pre_barriers); - cmdbuf.bindDescriptorSets(vk::PipelineBindPoint::eCompute, compute_pipeline_layout, - 0, set, {}); + cmdbuf.bindDescriptorSets(vk::PipelineBindPoint::eCompute, compute_pipeline_layout, 0, set, + {}); cmdbuf.bindPipeline(vk::PipelineBindPoint::eCompute, compute_pipeline); const auto src_offset = Common::MakeVec(blit.src_rect.left, blit.src_rect.bottom); cmdbuf.pushConstants(compute_pipeline_layout, vk::ShaderStageFlagBits::eCompute, 0, - sizeof(Common::Vec2i), src_offset.AsArray()); + sizeof(Common::Vec2i), src_offset.AsArray()); cmdbuf.dispatch(blit.src_rect.GetWidth() / 8, blit.src_rect.GetHeight() / 8, 1); cmdbuf.pipelineBarrier(vk::PipelineStageFlagBits::eComputeShader, vk::PipelineStageFlagBits::eEarlyFragmentTests | - vk::PipelineStageFlagBits::eLateFragmentTests | - vk::PipelineStageFlagBits::eTransfer, + vk::PipelineStageFlagBits::eLateFragmentTests | + vk::PipelineStageFlagBits::eTransfer, vk::DependencyFlagBits::eByRegion, {}, {}, post_barriers); }); } diff --git a/src/video_core/renderer_vulkan/vk_blit_helper.h b/src/video_core/renderer_vulkan/vk_blit_helper.h index 5caff2649..064fdb42a 100644 --- a/src/video_core/renderer_vulkan/vk_blit_helper.h +++ b/src/video_core/renderer_vulkan/vk_blit_helper.h @@ -20,8 +20,7 @@ class Surface; class BlitHelper { public: - BlitHelper(const Instance& instance, Scheduler& scheduler, - DescriptorManager& desc_manager, + BlitHelper(const Instance& instance, Scheduler& scheduler, DescriptorManager& desc_manager, RenderpassCache& renderpass_cache); ~BlitHelper(); diff --git a/src/video_core/renderer_vulkan/vk_descriptor_manager.cpp b/src/video_core/renderer_vulkan/vk_descriptor_manager.cpp index 4ab5f645a..f2f3224c5 100644 --- a/src/video_core/renderer_vulkan/vk_descriptor_manager.cpp +++ b/src/video_core/renderer_vulkan/vk_descriptor_manager.cpp @@ -137,8 +137,8 @@ void DescriptorManager::BindDescriptorSets() { } scheduler.Record([this, bound_sets](vk::CommandBuffer cmdbuf) { - cmdbuf.bindDescriptorSets(vk::PipelineBindPoint::eGraphics, pipeline_layout, 0, - bound_sets, {}); + cmdbuf.bindDescriptorSets(vk::PipelineBindPoint::eGraphics, pipeline_layout, 0, bound_sets, + {}); }); descriptor_set_dirty.fill(false); diff --git a/src/video_core/renderer_vulkan/vk_format_reinterpreter.cpp b/src/video_core/renderer_vulkan/vk_format_reinterpreter.cpp index 7866da126..e99ee48c1 100644 --- a/src/video_core/renderer_vulkan/vk_format_reinterpreter.cpp +++ b/src/video_core/renderer_vulkan/vk_format_reinterpreter.cpp @@ -176,7 +176,8 @@ void D24S8toRGBA8::Reinterpret(Surface& source, VideoCore::Rect2D src_rect, Surf .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, .image = src_image, .subresourceRange{ - .aspectMask = vk::ImageAspectFlagBits::eDepth | vk::ImageAspectFlagBits::eStencil, + .aspectMask = + vk::ImageAspectFlagBits::eDepth | vk::ImageAspectFlagBits::eStencil, .baseMipLevel = 0, .levelCount = VK_REMAINING_MIP_LEVELS, .baseArrayLayer = 0, @@ -198,8 +199,7 @@ void D24S8toRGBA8::Reinterpret(Surface& source, VideoCore::Rect2D src_rect, Surf .baseArrayLayer = 0, .layerCount = VK_REMAINING_ARRAY_LAYERS, }, - } - }; + }}; const std::array post_barriers = { vk::ImageMemoryBarrier{ .srcAccessMask = vk::AccessFlagBits::eShaderRead, @@ -237,25 +237,25 @@ void D24S8toRGBA8::Reinterpret(Surface& source, VideoCore::Rect2D src_rect, Surf }; cmdbuf.pipelineBarrier(vk::PipelineStageFlagBits::eColorAttachmentOutput | - vk::PipelineStageFlagBits::eEarlyFragmentTests | - vk::PipelineStageFlagBits::eLateFragmentTests, + vk::PipelineStageFlagBits::eEarlyFragmentTests | + vk::PipelineStageFlagBits::eLateFragmentTests, vk::PipelineStageFlagBits::eComputeShader, vk::DependencyFlagBits::eByRegion, {}, {}, pre_barriers); - cmdbuf.bindDescriptorSets(vk::PipelineBindPoint::eCompute, compute_pipeline_layout, - 0, set, {}); + cmdbuf.bindDescriptorSets(vk::PipelineBindPoint::eCompute, compute_pipeline_layout, 0, set, + {}); cmdbuf.bindPipeline(vk::PipelineBindPoint::eCompute, compute_pipeline); const auto src_offset = Common::MakeVec(src_rect.left, src_rect.bottom); cmdbuf.pushConstants(compute_pipeline_layout, vk::ShaderStageFlagBits::eCompute, 0, - sizeof(Common::Vec2i), src_offset.AsArray()); + sizeof(Common::Vec2i), src_offset.AsArray()); cmdbuf.dispatch(src_rect.GetWidth() / 8, src_rect.GetHeight() / 8, 1); cmdbuf.pipelineBarrier(vk::PipelineStageFlagBits::eComputeShader, vk::PipelineStageFlagBits::eFragmentShader | - vk::PipelineStageFlagBits::eEarlyFragmentTests | - vk::PipelineStageFlagBits::eLateFragmentTests, + vk::PipelineStageFlagBits::eEarlyFragmentTests | + vk::PipelineStageFlagBits::eLateFragmentTests, vk::DependencyFlagBits::eByRegion, {}, {}, post_barriers); }); } diff --git a/src/video_core/renderer_vulkan/vk_instance.cpp b/src/video_core/renderer_vulkan/vk_instance.cpp index a32701180..2ba4620c5 100644 --- a/src/video_core/renderer_vulkan/vk_instance.cpp +++ b/src/video_core/renderer_vulkan/vk_instance.cpp @@ -107,7 +107,8 @@ Instance::Instance(bool validation, bool dump_command_buffers) VULKAN_HPP_DEFAULT_DISPATCHER.init(vkGetInstanceProcAddr); // Enable the instance extensions the platform requires - const std::vector extensions = GetInstanceExtensions(Frontend::WindowSystemType::Headless, false); + const std::vector extensions = + GetInstanceExtensions(Frontend::WindowSystemType::Headless, false); const vk::ApplicationInfo application_info = { .pApplicationName = "Citra", @@ -218,9 +219,10 @@ Instance::Instance(Frontend::EmuWindow& window, u32 physical_device_index) // If validation is enabled attempt to also enable debug messenger if (enable_validation) { - const auto it = std::find_if(extensions.begin(), extensions.end(), [](const char* extension) { - return std::strcmp(extension, VK_EXT_DEBUG_UTILS_EXTENSION_NAME) == 0; - }); + const auto it = + std::find_if(extensions.begin(), extensions.end(), [](const char* extension) { + return std::strcmp(extension, VK_EXT_DEBUG_UTILS_EXTENSION_NAME) == 0; + }); const bool debug_messenger_supported = it != extensions.end(); if (debug_messenger_supported) { diff --git a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp index 2df8f30a9..d9851a02d 100644 --- a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp @@ -247,11 +247,10 @@ bool PipelineCache::UseProgrammableVertexShader(const Pica::Regs& regs, return false; } - scheduler.Record( - [this, handle = handle, hash = config.Hash()](vk::CommandBuffer) { - current_shaders[ProgramType::VS] = handle; - shader_hashes[ProgramType::VS] = hash; - }); + scheduler.Record([this, handle = handle, hash = config.Hash()](vk::CommandBuffer) { + current_shaders[ProgramType::VS] = handle; + shader_hashes[ProgramType::VS] = hash; + }); return true; } @@ -354,16 +353,12 @@ void PipelineCache::BindSampler(u32 binding, vk::Sampler sampler) { void PipelineCache::SetViewport(float x, float y, float width, float height) { const vk::Viewport viewport{x, y, width, height, 0.f, 1.f}; - scheduler.Record([viewport](vk::CommandBuffer cmdbuf) { - cmdbuf.setViewport(0, viewport); - }); + scheduler.Record([viewport](vk::CommandBuffer cmdbuf) { cmdbuf.setViewport(0, viewport); }); } void PipelineCache::SetScissor(s32 x, s32 y, u32 width, u32 height) { const vk::Rect2D scissor{{x, y}, {width, height}}; - scheduler.Record([scissor](vk::CommandBuffer cmdbuf) { - cmdbuf.setScissor(0, scissor); - }); + scheduler.Record([scissor](vk::CommandBuffer cmdbuf) { cmdbuf.setScissor(0, scissor); }); } void PipelineCache::ApplyDynamic(const PipelineInfo& info) { @@ -373,17 +368,17 @@ void PipelineCache::ApplyDynamic(const PipelineInfo& info) { scheduler.Record([this, info, is_dirty, current](vk::CommandBuffer cmdbuf) { if (info.dynamic.stencil_compare_mask != current.dynamic.stencil_compare_mask || is_dirty) { cmdbuf.setStencilCompareMask(vk::StencilFaceFlagBits::eFrontAndBack, - info.dynamic.stencil_compare_mask); + info.dynamic.stencil_compare_mask); } if (info.dynamic.stencil_write_mask != current.dynamic.stencil_write_mask || is_dirty) { cmdbuf.setStencilWriteMask(vk::StencilFaceFlagBits::eFrontAndBack, - info.dynamic.stencil_write_mask); + info.dynamic.stencil_write_mask); } if (info.dynamic.stencil_reference != current.dynamic.stencil_reference || is_dirty) { cmdbuf.setStencilReference(vk::StencilFaceFlagBits::eFrontAndBack, - info.dynamic.stencil_reference); + info.dynamic.stencil_reference); } if (info.dynamic.blend_color != current.dynamic.blend_color || is_dirty) { diff --git a/src/video_core/renderer_vulkan/vk_platform.cpp b/src/video_core/renderer_vulkan/vk_platform.cpp index 4cf5861e1..88a2eb28b 100644 --- a/src/video_core/renderer_vulkan/vk_platform.cpp +++ b/src/video_core/renderer_vulkan/vk_platform.cpp @@ -151,8 +151,8 @@ std::vector GetInstanceExtensions(Frontend::WindowSystemType window }); if (it == properties.end()) { - LOG_WARNING(Render_Vulkan, - "Required instance extension {} is not available", extension); + LOG_WARNING(Render_Vulkan, "Required instance extension {} is not available", + extension); return true; } return false; diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index c42a12496..71d5eea30 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp @@ -269,10 +269,9 @@ void RasterizerVulkan::SetupVertexArray(u32 vs_input_size, u32 vs_input_index_mi SetupFixedAttribs(); // Bind the generated bindings - scheduler.Record([this, binding_count = layout.binding_count, vertex_offsets = binding_offsets] - (vk::CommandBuffer cmdbuf) { - cmdbuf.bindVertexBuffers(0, binding_count, vertex_buffers.data(), - vertex_offsets.data()); + scheduler.Record([this, binding_count = layout.binding_count, + vertex_offsets = binding_offsets](vk::CommandBuffer cmdbuf) { + cmdbuf.bindVertexBuffers(0, binding_count, vertex_buffers.data(), vertex_offsets.data()); }); } @@ -442,10 +441,10 @@ void RasterizerVulkan::SetupIndexArray() { stream_buffer.Commit(index_buffer_size); - scheduler.Record([this, index_offset = index_offset, - index_type = index_type](vk::CommandBuffer cmdbuf) { - cmdbuf.bindIndexBuffer(stream_buffer.Handle(), index_offset, index_type); - }); + scheduler.Record( + [this, index_offset = index_offset, index_type = index_type](vk::CommandBuffer cmdbuf) { + cmdbuf.bindIndexBuffer(stream_buffer.Handle(), index_offset, index_type); + }); } void RasterizerVulkan::DrawTriangles() { @@ -555,16 +554,14 @@ bool RasterizerVulkan::Draw(bool accelerate, bool is_indexed) { // nothing. Always sample from the base level until mipmaps for texture cubes are // implemented const bool skip_mipmap = config.type == Pica::TexturingRegs::TextureConfig::TextureCube; - info = SamplerInfo{ - .mag_filter = config.mag_filter, - .min_filter = config.min_filter, - .mip_filter = config.mip_filter, - .wrap_s = config.wrap_s, - .wrap_t = config.wrap_t, - .border_color = config.border_color.raw, - .lod_min = skip_mipmap ? 0.f : static_cast(config.lod.min_level), - .lod_max = skip_mipmap ? 0.f : static_cast(config.lod.max_level) - }; + info = SamplerInfo{.mag_filter = config.mag_filter, + .min_filter = config.min_filter, + .mip_filter = config.mip_filter, + .wrap_s = config.wrap_s, + .wrap_t = config.wrap_t, + .border_color = config.border_color.raw, + .lod_min = skip_mipmap ? 0.f : static_cast(config.lod.min_level), + .lod_max = skip_mipmap ? 0.f : static_cast(config.lod.max_level)}; // Search the cache and bind the appropriate sampler if (auto it = samplers.find(info); it != samplers.end()) { @@ -762,11 +759,11 @@ bool RasterizerVulkan::Draw(bool accelerate, bool is_indexed) { std::memcpy(array_ptr, vertex_batch.data() + base_vertex, vertex_size); stream_buffer.Commit(vertex_size); - scheduler.Record([this, vertices, base_vertex, - offset = offset](vk::CommandBuffer cmdbuf) { - cmdbuf.bindVertexBuffers(0, stream_buffer.Handle(), offset); - cmdbuf.draw(vertices, 1, base_vertex, 0); - }); + scheduler.Record( + [this, vertices, base_vertex, offset = offset](vk::CommandBuffer cmdbuf) { + cmdbuf.bindVertexBuffers(0, stream_buffer.Handle(), offset); + cmdbuf.draw(vertices, 1, base_vertex, 0); + }); } } diff --git a/src/video_core/renderer_vulkan/vk_renderpass_cache.cpp b/src/video_core/renderer_vulkan/vk_renderpass_cache.cpp index 61fb021b9..f8966b28d 100644 --- a/src/video_core/renderer_vulkan/vk_renderpass_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_renderpass_cache.cpp @@ -94,22 +94,22 @@ void RenderpassCache::EnterRenderpass(const RenderpassState& state) { return; } - scheduler.Record([should_end = bool(current_state.renderpass), - state](vk::CommandBuffer cmdbuf) { - if (should_end) { - cmdbuf.endRenderPass(); - } + scheduler.Record( + [should_end = bool(current_state.renderpass), state](vk::CommandBuffer cmdbuf) { + if (should_end) { + cmdbuf.endRenderPass(); + } - const vk::RenderPassBeginInfo renderpass_begin_info = { - .renderPass = state.renderpass, - .framebuffer = state.framebuffer, - .renderArea = state.render_area, - .clearValueCount = 1, - .pClearValues = &state.clear, - }; + const vk::RenderPassBeginInfo renderpass_begin_info = { + .renderPass = state.renderpass, + .framebuffer = state.framebuffer, + .renderArea = state.render_area, + .clearValueCount = 1, + .pClearValues = &state.clear, + }; - cmdbuf.beginRenderPass(renderpass_begin_info, vk::SubpassContents::eInline); - }); + cmdbuf.beginRenderPass(renderpass_begin_info, vk::SubpassContents::eInline); + }); if (is_dirty) { scheduler.MarkStateNonDirty(StateFlags::Renderpass); diff --git a/src/video_core/renderer_vulkan/vk_scheduler.cpp b/src/video_core/renderer_vulkan/vk_scheduler.cpp index df470fee1..c6138c10f 100644 --- a/src/video_core/renderer_vulkan/vk_scheduler.cpp +++ b/src/video_core/renderer_vulkan/vk_scheduler.cpp @@ -27,8 +27,8 @@ void Scheduler::CommandChunk::ExecuteAll(vk::CommandBuffer cmdbuf) { Scheduler::Scheduler(const Instance& instance, RenderpassCache& renderpass_cache) : instance{instance}, renderpass_cache{renderpass_cache}, master_semaphore{instance}, - command_pool{instance, master_semaphore}, - use_worker_thread{Settings::values.async_command_recording} { + command_pool{instance, master_semaphore}, use_worker_thread{ + Settings::values.async_command_recording} { AllocateWorkerCommandBuffers(); if (use_worker_thread) { AcquireNewChunk(); @@ -119,50 +119,50 @@ void Scheduler::SubmitExecution(vk::Semaphore signal_semaphore, vk::Semaphore wa state = StateFlags::AllDirty; renderpass_cache.ExitRenderpass(); - Record([signal_semaphore, wait_semaphore, handle, signal_value, - this](vk::CommandBuffer cmdbuf) { - MICROPROFILE_SCOPE(Vulkan_Submit); - cmdbuf.end(); + Record( + [signal_semaphore, wait_semaphore, handle, signal_value, this](vk::CommandBuffer cmdbuf) { + MICROPROFILE_SCOPE(Vulkan_Submit); + cmdbuf.end(); - const u32 num_signal_semaphores = signal_semaphore ? 2U : 1U; - const std::array signal_values{signal_value, u64(0)}; - const std::array signal_semaphores{handle, signal_semaphore}; + const u32 num_signal_semaphores = signal_semaphore ? 2U : 1U; + const std::array signal_values{signal_value, u64(0)}; + const std::array signal_semaphores{handle, signal_semaphore}; - const u32 num_wait_semaphores = wait_semaphore ? 2U : 1U; - const std::array wait_values{signal_value - 1, u64(1)}; - const std::array wait_semaphores{handle, wait_semaphore}; + const u32 num_wait_semaphores = wait_semaphore ? 2U : 1U; + const std::array wait_values{signal_value - 1, u64(1)}; + const std::array wait_semaphores{handle, wait_semaphore}; - static constexpr std::array wait_stage_masks = { - vk::PipelineStageFlagBits::eAllCommands, - vk::PipelineStageFlagBits::eColorAttachmentOutput, - }; + static constexpr std::array wait_stage_masks = { + vk::PipelineStageFlagBits::eAllCommands, + vk::PipelineStageFlagBits::eColorAttachmentOutput, + }; - const vk::TimelineSemaphoreSubmitInfoKHR timeline_si = { - .waitSemaphoreValueCount = num_wait_semaphores, - .pWaitSemaphoreValues = wait_values.data(), - .signalSemaphoreValueCount = num_signal_semaphores, - .pSignalSemaphoreValues = signal_values.data(), - }; + const vk::TimelineSemaphoreSubmitInfoKHR timeline_si = { + .waitSemaphoreValueCount = num_wait_semaphores, + .pWaitSemaphoreValues = wait_values.data(), + .signalSemaphoreValueCount = num_signal_semaphores, + .pSignalSemaphoreValues = signal_values.data(), + }; - const vk::SubmitInfo submit_info = { - .pNext = &timeline_si, - .waitSemaphoreCount = num_wait_semaphores, - .pWaitSemaphores = wait_semaphores.data(), - .pWaitDstStageMask = wait_stage_masks.data(), - .commandBufferCount = 1u, - .pCommandBuffers = &cmdbuf, - .signalSemaphoreCount = num_signal_semaphores, - .pSignalSemaphores = signal_semaphores.data(), - }; + const vk::SubmitInfo submit_info = { + .pNext = &timeline_si, + .waitSemaphoreCount = num_wait_semaphores, + .pWaitSemaphores = wait_semaphores.data(), + .pWaitDstStageMask = wait_stage_masks.data(), + .commandBufferCount = 1u, + .pCommandBuffers = &cmdbuf, + .signalSemaphoreCount = num_signal_semaphores, + .pSignalSemaphores = signal_semaphores.data(), + }; - try { - vk::Queue queue = instance.GetGraphicsQueue(); - queue.submit(submit_info); - } catch (vk::DeviceLostError& err) { - LOG_CRITICAL(Render_Vulkan, "Device lost during submit: {}", err.what()); - UNREACHABLE(); - } - }); + try { + vk::Queue queue = instance.GetGraphicsQueue(); + queue.submit(submit_info); + } catch (vk::DeviceLostError& err) { + LOG_CRITICAL(Render_Vulkan, "Device lost during submit: {}", err.what()); + UNREACHABLE(); + } + }); if (!use_worker_thread) { AllocateWorkerCommandBuffers(); diff --git a/src/video_core/renderer_vulkan/vk_shader_gen_spv.cpp b/src/video_core/renderer_vulkan/vk_shader_gen_spv.cpp index edc75c878..869a3edce 100644 --- a/src/video_core/renderer_vulkan/vk_shader_gen_spv.cpp +++ b/src/video_core/renderer_vulkan/vk_shader_gen_spv.cpp @@ -87,7 +87,7 @@ void FragmentModule::Generate() { // Take the color output as-is break; case FramebufferRegs::LogicOp::CopyInverted: - //out += "color = ~color;\n"; + // out += "color = ~color;\n"; break; case FramebufferRegs::LogicOp::NoOp: // We need to discard the color, but not necessarily the depth. This is not possible @@ -975,7 +975,8 @@ void FragmentModule::DefineProcTexSampler() { const Id proctex_alpha_map_offset{GetShaderDataMember(i32_id, ConstS32(13))}; const Id final_alpha{AppendProcTexCombineAndMap(config.state.proctex.alpha_combiner, u, v, proctex_alpha_map_offset)}; - const Id final_color_xyz{OpVectorShuffle(vec_ids.Get(3), final_color, final_color, 0, 1, 2)}; + const Id final_color_xyz{ + OpVectorShuffle(vec_ids.Get(3), final_color, final_color, 0, 1, 2)}; final_color = OpCompositeConstruct(vec_ids.Get(4), final_color_xyz, final_alpha); } @@ -1373,7 +1374,7 @@ void FragmentModule::DefineUniformStructs() { constexpr std::array light_src_offsets{0u, 16u, 32u, 48u, 64u, 80u, 92u, 96u}; constexpr std::array shader_data_offsets{ - 0u, 4u, 8u, 12u, 16u, 20u, 24u, 28u, 32u, 36u, 40u, 44u, 48u, 52u, 56u, + 0u, 4u, 8u, 12u, 16u, 20u, 24u, 28u, 32u, 36u, 40u, 44u, 48u, 52u, 56u, 60u, 64u, 68u, 72u, 80u, 176u, 192u, 200u, 208u, 224u, 240u, 1136u, 1232u, 1248u, 1264u}; Decorate(lighting_lut_array_id, spv::Decoration::ArrayStride, 16u); diff --git a/src/video_core/renderer_vulkan/vk_swapchain.h b/src/video_core/renderer_vulkan/vk_swapchain.h index 160f7fd06..6cfb83db8 100644 --- a/src/video_core/renderer_vulkan/vk_swapchain.h +++ b/src/video_core/renderer_vulkan/vk_swapchain.h @@ -16,6 +16,7 @@ class RenderpassCache; class Swapchain { static constexpr u32 PREFERRED_IMAGE_COUNT = 3; + public: Swapchain(const Instance& instance, Scheduler& scheduler, RenderpassCache& renderpass_cache); ~Swapchain(); diff --git a/src/video_core/renderer_vulkan/vk_texture_runtime.cpp b/src/video_core/renderer_vulkan/vk_texture_runtime.cpp index cfa941e4f..e0501c7c2 100644 --- a/src/video_core/renderer_vulkan/vk_texture_runtime.cpp +++ b/src/video_core/renderer_vulkan/vk_texture_runtime.cpp @@ -358,8 +358,8 @@ ImageAlloc TextureRuntime::Allocate(u32 width, u32 height, VideoCore::PixelForma }; cmdbuf.pipelineBarrier(vk::PipelineStageFlagBits::eTopOfPipe, - vk::PipelineStageFlagBits::eTopOfPipe, - vk::DependencyFlagBits::eByRegion, {}, {}, init_barrier); + vk::PipelineStageFlagBits::eTopOfPipe, + vk::DependencyFlagBits::eByRegion, {}, {}, init_barrier); }); return alloc; @@ -460,25 +460,22 @@ bool TextureRuntime::ClearTexture(Surface& surface, const VideoCore::TextureClea }, }; - cmdbuf.pipelineBarrier(params.pipeline_flags, - vk::PipelineStageFlagBits::eTransfer, - vk::DependencyFlagBits::eByRegion, {}, {}, pre_barrier); + cmdbuf.pipelineBarrier(params.pipeline_flags, vk::PipelineStageFlagBits::eTransfer, + vk::DependencyFlagBits::eByRegion, {}, {}, pre_barrier); const bool is_color = static_cast(params.aspect & vk::ImageAspectFlagBits::eColor); if (is_color) { - cmdbuf.clearColorImage(params.src_image, - vk::ImageLayout::eTransferDstOptimal, - MakeClearColorValue(value), range); + cmdbuf.clearColorImage(params.src_image, vk::ImageLayout::eTransferDstOptimal, + MakeClearColorValue(value), range); } else { cmdbuf.clearDepthStencilImage(params.src_image, - vk::ImageLayout::eTransferDstOptimal, - MakeClearDepthStencilValue(value), range); + vk::ImageLayout::eTransferDstOptimal, + MakeClearDepthStencilValue(value), range); } - cmdbuf.pipelineBarrier(vk::PipelineStageFlagBits::eTransfer, - params.pipeline_flags, vk::DependencyFlagBits::eByRegion, - {}, {}, post_barrier); + cmdbuf.pipelineBarrier(vk::PipelineStageFlagBits::eTransfer, params.pipeline_flags, + vk::DependencyFlagBits::eByRegion, {}, {}, post_barrier); }); return true; } @@ -494,14 +491,14 @@ void TextureRuntime::ClearTextureWithRenderpass(Surface& surface, surface.type != VideoCore::SurfaceType::DepthStencil; const vk::AccessFlags access_flag = - is_color ? vk::AccessFlagBits::eColorAttachmentRead | - vk::AccessFlagBits::eColorAttachmentWrite - : vk::AccessFlagBits::eDepthStencilAttachmentRead | - vk::AccessFlagBits::eDepthStencilAttachmentWrite; + is_color + ? vk::AccessFlagBits::eColorAttachmentRead | vk::AccessFlagBits::eColorAttachmentWrite + : vk::AccessFlagBits::eDepthStencilAttachmentRead | + vk::AccessFlagBits::eDepthStencilAttachmentWrite; const vk::PipelineStageFlags pipeline_flags = - is_color ? vk::PipelineStageFlagBits::eColorAttachmentOutput - : vk::PipelineStageFlagBits::eEarlyFragmentTests; + is_color ? vk::PipelineStageFlagBits::eColorAttachmentOutput + : vk::PipelineStageFlagBits::eEarlyFragmentTests; const vk::RenderPass clear_renderpass = is_color ? renderpass_cache.GetRenderpass(surface.pixel_format, @@ -698,13 +695,13 @@ bool TextureRuntime::CopyTextures(Surface& source, Surface& dest, }; cmdbuf.pipelineBarrier(params.pipeline_flags, vk::PipelineStageFlagBits::eTransfer, - vk::DependencyFlagBits::eByRegion, {}, {}, pre_barriers); + vk::DependencyFlagBits::eByRegion, {}, {}, pre_barriers); - cmdbuf.copyImage(params.src_image, vk::ImageLayout::eTransferSrcOptimal, - params.dst_image, vk::ImageLayout::eTransferDstOptimal, image_copy); + cmdbuf.copyImage(params.src_image, vk::ImageLayout::eTransferSrcOptimal, params.dst_image, + vk::ImageLayout::eTransferDstOptimal, image_copy); cmdbuf.pipelineBarrier(vk::PipelineStageFlagBits::eTransfer, params.pipeline_flags, - vk::DependencyFlagBits::eByRegion, {}, {}, post_barriers); + vk::DependencyFlagBits::eByRegion, {}, {}, post_barriers); }); return true; @@ -826,21 +823,19 @@ bool TextureRuntime::BlitTextures(Surface& source, Surface& dest, }; cmdbuf.pipelineBarrier(params.pipeline_flags, vk::PipelineStageFlagBits::eTransfer, - vk::DependencyFlagBits::eByRegion, {}, {}, read_barriers); + vk::DependencyFlagBits::eByRegion, {}, {}, read_barriers); - cmdbuf.blitImage(params.src_image, vk::ImageLayout::eTransferSrcOptimal, - params.dst_image, vk::ImageLayout::eTransferDstOptimal, blit_area, - params.filter); + cmdbuf.blitImage(params.src_image, vk::ImageLayout::eTransferSrcOptimal, params.dst_image, + vk::ImageLayout::eTransferDstOptimal, blit_area, params.filter); cmdbuf.pipelineBarrier(vk::PipelineStageFlagBits::eTransfer, params.pipeline_flags, - vk::DependencyFlagBits::eByRegion, {}, {}, write_barriers); + vk::DependencyFlagBits::eByRegion, {}, {}, write_barriers); }); return true; } -void TextureRuntime::GenerateMipmaps(Surface& surface, u32 max_level) { -} +void TextureRuntime::GenerateMipmaps(Surface& surface, u32 max_level) {} const ReinterpreterList& TextureRuntime::GetPossibleReinterpretations( VideoCore::PixelFormat dest_format) const { @@ -914,81 +909,79 @@ void Surface::Upload(const VideoCore::BufferTextureCopy& upload, const StagingDa .src_image = alloc.image, }; - scheduler.Record([format = alloc.format, params, staging, - upload](vk::CommandBuffer cmdbuf) { - u32 num_copies = 1; - std::array buffer_image_copies; + scheduler.Record( + [format = alloc.format, params, staging, upload](vk::CommandBuffer cmdbuf) { + u32 num_copies = 1; + std::array buffer_image_copies; - const VideoCore::Rect2D rect = upload.texture_rect; - buffer_image_copies[0] = vk::BufferImageCopy{ - .bufferOffset = staging.buffer_offset + upload.buffer_offset, - .bufferRowLength = rect.GetWidth(), - .bufferImageHeight = rect.GetHeight(), - .imageSubresource{ - .aspectMask = params.aspect, - .mipLevel = upload.texture_level, - .baseArrayLayer = 0, - .layerCount = 1, - }, - .imageOffset = {static_cast(rect.left), static_cast(rect.bottom), 0}, - .imageExtent = {rect.GetWidth(), rect.GetHeight(), 1}, - }; + const VideoCore::Rect2D rect = upload.texture_rect; + buffer_image_copies[0] = vk::BufferImageCopy{ + .bufferOffset = staging.buffer_offset + upload.buffer_offset, + .bufferRowLength = rect.GetWidth(), + .bufferImageHeight = rect.GetHeight(), + .imageSubresource{ + .aspectMask = params.aspect, + .mipLevel = upload.texture_level, + .baseArrayLayer = 0, + .layerCount = 1, + }, + .imageOffset = {static_cast(rect.left), static_cast(rect.bottom), 0}, + .imageExtent = {rect.GetWidth(), rect.GetHeight(), 1}, + }; - if (params.aspect & vk::ImageAspectFlagBits::eStencil) { - buffer_image_copies[0].imageSubresource.aspectMask = - vk::ImageAspectFlagBits::eDepth; - vk::BufferImageCopy& stencil_copy = buffer_image_copies[1]; - stencil_copy = buffer_image_copies[0]; - stencil_copy.bufferOffset += UnpackDepthStencil(staging, format); - stencil_copy.imageSubresource.aspectMask = vk::ImageAspectFlagBits::eStencil; - num_copies++; - } + if (params.aspect & vk::ImageAspectFlagBits::eStencil) { + buffer_image_copies[0].imageSubresource.aspectMask = + vk::ImageAspectFlagBits::eDepth; + vk::BufferImageCopy& stencil_copy = buffer_image_copies[1]; + stencil_copy = buffer_image_copies[0]; + stencil_copy.bufferOffset += UnpackDepthStencil(staging, format); + stencil_copy.imageSubresource.aspectMask = vk::ImageAspectFlagBits::eStencil; + num_copies++; + } - const vk::ImageMemoryBarrier read_barrier = { - .srcAccessMask = params.src_access, - .dstAccessMask = vk::AccessFlagBits::eTransferWrite, - .oldLayout = vk::ImageLayout::eGeneral, - .newLayout = vk::ImageLayout::eTransferDstOptimal, - .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, - .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, - .image = params.src_image, - .subresourceRange{ - .aspectMask = params.aspect, - .baseMipLevel = upload.texture_level, - .levelCount = 1, - .baseArrayLayer = 0, - .layerCount = VK_REMAINING_ARRAY_LAYERS, - }, - }; - const vk::ImageMemoryBarrier write_barrier = { - .srcAccessMask = vk::AccessFlagBits::eTransferWrite, - .dstAccessMask = params.src_access, - .oldLayout = vk::ImageLayout::eTransferDstOptimal, - .newLayout = vk::ImageLayout::eGeneral, - .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, - .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, - .image = params.src_image, - .subresourceRange{ - .aspectMask = params.aspect, - .baseMipLevel = upload.texture_level, - .levelCount = 1, - .baseArrayLayer = 0, - .layerCount = VK_REMAINING_ARRAY_LAYERS, - }, - }; + const vk::ImageMemoryBarrier read_barrier = { + .srcAccessMask = params.src_access, + .dstAccessMask = vk::AccessFlagBits::eTransferWrite, + .oldLayout = vk::ImageLayout::eGeneral, + .newLayout = vk::ImageLayout::eTransferDstOptimal, + .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, + .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, + .image = params.src_image, + .subresourceRange{ + .aspectMask = params.aspect, + .baseMipLevel = upload.texture_level, + .levelCount = 1, + .baseArrayLayer = 0, + .layerCount = VK_REMAINING_ARRAY_LAYERS, + }, + }; + const vk::ImageMemoryBarrier write_barrier = { + .srcAccessMask = vk::AccessFlagBits::eTransferWrite, + .dstAccessMask = params.src_access, + .oldLayout = vk::ImageLayout::eTransferDstOptimal, + .newLayout = vk::ImageLayout::eGeneral, + .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, + .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, + .image = params.src_image, + .subresourceRange{ + .aspectMask = params.aspect, + .baseMipLevel = upload.texture_level, + .levelCount = 1, + .baseArrayLayer = 0, + .layerCount = VK_REMAINING_ARRAY_LAYERS, + }, + }; - cmdbuf.pipelineBarrier(params.pipeline_flags, - vk::PipelineStageFlagBits::eTransfer, - vk::DependencyFlagBits::eByRegion, {}, {}, read_barrier); + cmdbuf.pipelineBarrier(params.pipeline_flags, vk::PipelineStageFlagBits::eTransfer, + vk::DependencyFlagBits::eByRegion, {}, {}, read_barrier); - cmdbuf.copyBufferToImage(staging.buffer, params.src_image, - vk::ImageLayout::eTransferDstOptimal, num_copies, - buffer_image_copies.data()); + cmdbuf.copyBufferToImage(staging.buffer, params.src_image, + vk::ImageLayout::eTransferDstOptimal, num_copies, + buffer_image_copies.data()); - cmdbuf.pipelineBarrier(vk::PipelineStageFlagBits::eTransfer, - params.pipeline_flags, vk::DependencyFlagBits::eByRegion, - {}, {}, write_barrier); - }); + cmdbuf.pipelineBarrier(vk::PipelineStageFlagBits::eTransfer, params.pipeline_flags, + vk::DependencyFlagBits::eByRegion, {}, {}, write_barrier); + }); runtime.upload_buffer.Commit(staging.size); } @@ -1073,16 +1066,15 @@ void Surface::Download(const VideoCore::BufferTextureCopy& download, const Stagi .dstAccessMask = vk::AccessFlagBits::eMemoryRead | vk::AccessFlagBits::eMemoryWrite, }; - cmdbuf.pipelineBarrier(params.pipeline_flags, - vk::PipelineStageFlagBits::eTransfer, - vk::DependencyFlagBits::eByRegion, {}, {}, read_barrier); + cmdbuf.pipelineBarrier(params.pipeline_flags, vk::PipelineStageFlagBits::eTransfer, + vk::DependencyFlagBits::eByRegion, {}, {}, read_barrier); cmdbuf.copyImageToBuffer(params.src_image, vk::ImageLayout::eTransferSrcOptimal, - staging.buffer, buffer_image_copy); + staging.buffer, buffer_image_copy); - cmdbuf.pipelineBarrier(vk::PipelineStageFlagBits::eTransfer, - params.pipeline_flags, vk::DependencyFlagBits::eByRegion, - memory_write_barrier, {}, image_write_barrier); + cmdbuf.pipelineBarrier(vk::PipelineStageFlagBits::eTransfer, params.pipeline_flags, + vk::DependencyFlagBits::eByRegion, memory_write_barrier, {}, + image_write_barrier); }); runtime.download_buffer.Commit(staging.size); }