فهرست منبع

Merge pull request #9583 from FernandoS27/fuck-ogl-already

VideoCore: Fix OGL cache invalidation.
Fernando S 3 سال پیش
والد
کامیت
948ac976d1
2فایلهای تغییر یافته به همراه6 افزوده شده و 0 حذف شده
  1. 4 0
      src/video_core/renderer_opengl/gl_rasterizer.cpp
  2. 2 0
      src/video_core/renderer_vulkan/vk_rasterizer.cpp

+ 4 - 0
src/video_core/renderer_opengl/gl_rasterizer.cpp

@@ -139,6 +139,7 @@ void RasterizerOpenGL::LoadDiskResources(u64 title_id, std::stop_token stop_load
 void RasterizerOpenGL::Clear(u32 layer_count) {
 void RasterizerOpenGL::Clear(u32 layer_count) {
     MICROPROFILE_SCOPE(OpenGL_Clears);
     MICROPROFILE_SCOPE(OpenGL_Clears);
 
 
+    gpu_memory->FlushCaching();
     const auto& regs = maxwell3d->regs;
     const auto& regs = maxwell3d->regs;
     bool use_color{};
     bool use_color{};
     bool use_depth{};
     bool use_depth{};
@@ -207,6 +208,7 @@ void RasterizerOpenGL::PrepareDraw(bool is_indexed, Func&& draw_func) {
     MICROPROFILE_SCOPE(OpenGL_Drawing);
     MICROPROFILE_SCOPE(OpenGL_Drawing);
 
 
     SCOPE_EXIT({ gpu.TickWork(); });
     SCOPE_EXIT({ gpu.TickWork(); });
+    gpu_memory->FlushCaching();
     query_cache.UpdateCounters();
     query_cache.UpdateCounters();
 
 
     GraphicsPipeline* const pipeline{shader_cache.CurrentGraphicsPipeline()};
     GraphicsPipeline* const pipeline{shader_cache.CurrentGraphicsPipeline()};
@@ -319,6 +321,7 @@ void RasterizerOpenGL::DrawIndirect() {
 }
 }
 
 
 void RasterizerOpenGL::DispatchCompute() {
 void RasterizerOpenGL::DispatchCompute() {
+    gpu_memory->FlushCaching();
     ComputePipeline* const pipeline{shader_cache.CurrentComputePipeline()};
     ComputePipeline* const pipeline{shader_cache.CurrentComputePipeline()};
     if (!pipeline) {
     if (!pipeline) {
         return;
         return;
@@ -526,6 +529,7 @@ void RasterizerOpenGL::TickFrame() {
 }
 }
 
 
 bool RasterizerOpenGL::AccelerateConditionalRendering() {
 bool RasterizerOpenGL::AccelerateConditionalRendering() {
+    gpu_memory->FlushCaching();
     if (Settings::IsGPULevelHigh()) {
     if (Settings::IsGPULevelHigh()) {
         // Reimplement Host conditional rendering.
         // Reimplement Host conditional rendering.
         return false;
         return false;

+ 2 - 0
src/video_core/renderer_vulkan/vk_rasterizer.cpp

@@ -270,6 +270,7 @@ void RasterizerVulkan::Clear(u32 layer_count) {
     MICROPROFILE_SCOPE(Vulkan_Clearing);
     MICROPROFILE_SCOPE(Vulkan_Clearing);
 
 
     FlushWork();
     FlushWork();
+    gpu_memory->FlushCaching();
 
 
     query_cache.UpdateCounters();
     query_cache.UpdateCounters();
 
 
@@ -628,6 +629,7 @@ void RasterizerVulkan::TickFrame() {
 }
 }
 
 
 bool RasterizerVulkan::AccelerateConditionalRendering() {
 bool RasterizerVulkan::AccelerateConditionalRendering() {
+    gpu_memory->FlushCaching();
     if (Settings::IsGPULevelHigh()) {
     if (Settings::IsGPULevelHigh()) {
         // TODO(Blinkhawk): Reimplement Host conditional rendering.
         // TODO(Blinkhawk): Reimplement Host conditional rendering.
         return false;
         return false;