From c6362543d46de63d276874e79715f05dcdfea8e5 Mon Sep 17 00:00:00 2001 From: bunnei Date: Thu, 22 Mar 2018 20:19:34 -0400 Subject: gl_rasterizer: Replace a bunch of UNIMPLEMENTED with ASSERT. --- src/video_core/renderer_opengl/gl_rasterizer_cache.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src/video_core/renderer_opengl/gl_rasterizer_cache.cpp') diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp index 884637ca5..939391639 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp @@ -290,7 +290,7 @@ static bool BlitTextures(GLuint src_tex, const MathUtil::Rectangle& src_rec static bool FillSurface(const Surface& surface, const u8* fill_data, const MathUtil::Rectangle& fill_rect, GLuint draw_fb_handle) { - UNIMPLEMENTED(); + ASSERT_MSG(false, "Unimplemented"); return true; } @@ -557,7 +557,7 @@ void CachedSurface::LoadGLBuffer(PAddr load_start, PAddr load_end) { load_end - load_start); } else { if (type == SurfaceType::Texture) { - UNIMPLEMENTED(); + ASSERT_MSG(false, "Unimplemented"); } else { morton_to_gl_fns[static_cast(pixel_format)](stride, height, &gl_buffer[0], addr, load_start, load_end); @@ -1102,7 +1102,7 @@ SurfaceRect_Tuple RasterizerCacheOpenGL::GetSurfaceSubRect(const SurfaceParams& } Surface RasterizerCacheOpenGL::GetTextureSurface(const void* config) { - UNIMPLEMENTED(); + ASSERT_MSG(false, "Unimplemented"); return {}; } @@ -1113,7 +1113,7 @@ SurfaceSurfaceRect_Tuple RasterizerCacheOpenGL::GetFramebufferSurfaces( } Surface RasterizerCacheOpenGL::GetFillSurface(const void* config) { - UNIMPLEMENTED(); + ASSERT_MSG(false, "Unimplemented"); return {}; } @@ -1357,5 +1357,5 @@ void RasterizerCacheOpenGL::UnregisterSurface(const Surface& surface) { } void RasterizerCacheOpenGL::UpdatePagesCachedCount(PAddr addr, u64 size, int delta) { - UNIMPLEMENTED(); + // ASSERT_MSG(false, "Unimplemented"); } -- cgit v1.2.3 From 8a250de987404034a4cf1a09f244c40947b4be9b Mon Sep 17 00:00:00 2001 From: bunnei Date: Thu, 22 Mar 2018 21:13:46 -0400 Subject: video_core: Remove usage of PAddr and replace with VAddr. --- .../renderer_opengl/gl_rasterizer_cache.cpp | 36 +++++++++++----------- 1 file changed, 18 insertions(+), 18 deletions(-) (limited to 'src/video_core/renderer_opengl/gl_rasterizer_cache.cpp') diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp index 939391639..7ef08980f 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp @@ -107,7 +107,7 @@ static void MortonCopyTile(u32 stride, u8* tile_buffer, u8* gl_buffer) { } template -static void MortonCopy(u32 stride, u32 height, u8* gl_buffer, PAddr base, PAddr start, PAddr end) { +static void MortonCopy(u32 stride, u32 height, u8* gl_buffer, VAddr base, VAddr start, VAddr end) { constexpr u32 bytes_per_pixel = SurfaceParams::GetFormatBpp(format) / 8; constexpr u32 tile_size = bytes_per_pixel * 64; @@ -115,9 +115,9 @@ static void MortonCopy(u32 stride, u32 height, u8* gl_buffer, PAddr base, PAddr static_assert(gl_bytes_per_pixel >= bytes_per_pixel, ""); gl_buffer += gl_bytes_per_pixel - bytes_per_pixel; - const PAddr aligned_down_start = base + Common::AlignDown(start - base, tile_size); - const PAddr aligned_start = base + Common::AlignUp(start - base, tile_size); - const PAddr aligned_end = base + Common::AlignDown(end - base, tile_size); + const VAddr aligned_down_start = base + Common::AlignDown(start - base, tile_size); + const VAddr aligned_start = base + Common::AlignUp(start - base, tile_size); + const VAddr aligned_end = base + Common::AlignDown(end - base, tile_size); ASSERT(!morton_to_gl || (aligned_start == start && aligned_end == end)); @@ -136,7 +136,7 @@ static void MortonCopy(u32 stride, u32 height, u8* gl_buffer, PAddr base, PAddr } }; - u8* tile_buffer = Memory::GetPhysicalPointer(start); + u8* tile_buffer = Memory::GetPointer(start); if (start < aligned_start && !morton_to_gl) { std::array tmp_buf; @@ -162,7 +162,7 @@ static void MortonCopy(u32 stride, u32 height, u8* gl_buffer, PAddr base, PAddr } } -static constexpr std::array morton_to_gl_fns = { +static constexpr std::array morton_to_gl_fns = { MortonCopy, // 0 MortonCopy, // 1 MortonCopy, // 2 @@ -183,7 +183,7 @@ static constexpr std::array mo MortonCopy // 17 }; -static constexpr std::array gl_to_morton_fns = { +static constexpr std::array gl_to_morton_fns = { MortonCopy, // 0 MortonCopy, // 1 MortonCopy, // 2 @@ -298,9 +298,9 @@ SurfaceParams SurfaceParams::FromInterval(SurfaceInterval interval) const { SurfaceParams params = *this; const u32 tiled_size = is_tiled ? 8 : 1; const u64 stride_tiled_bytes = BytesInPixels(stride * tiled_size); - PAddr aligned_start = + VAddr aligned_start = addr + Common::AlignDown(boost::icl::first(interval) - addr, stride_tiled_bytes); - PAddr aligned_end = + VAddr aligned_end = addr + Common::AlignUp(boost::icl::last_next(interval) - addr, stride_tiled_bytes); if (aligned_end - aligned_start > stride_tiled_bytes) { @@ -527,10 +527,10 @@ void RasterizerCacheOpenGL::CopySurface(const Surface& src_surface, const Surfac } MICROPROFILE_DEFINE(OpenGL_SurfaceLoad, "OpenGL", "Surface Load", MP_RGB(128, 64, 192)); -void CachedSurface::LoadGLBuffer(PAddr load_start, PAddr load_end) { +void CachedSurface::LoadGLBuffer(VAddr load_start, VAddr load_end) { ASSERT(type != SurfaceType::Fill); - const u8* const texture_src_data = Memory::GetPhysicalPointer(addr); + const u8* const texture_src_data = Memory::GetPointer(addr); if (texture_src_data == nullptr) return; @@ -549,7 +549,7 @@ void CachedSurface::LoadGLBuffer(PAddr load_start, PAddr load_end) { MICROPROFILE_SCOPE(OpenGL_SurfaceLoad); ASSERT(load_start >= addr && load_end <= end); - const u32 start_offset = load_start - addr; + const u64 start_offset = load_start - addr; if (!is_tiled) { ASSERT(type == SurfaceType::Color); @@ -566,8 +566,8 @@ void CachedSurface::LoadGLBuffer(PAddr load_start, PAddr load_end) { } MICROPROFILE_DEFINE(OpenGL_SurfaceFlush, "OpenGL", "Surface Flush", MP_RGB(128, 192, 64)); -void CachedSurface::FlushGLBuffer(PAddr flush_start, PAddr flush_end) { - u8* const dst_buffer = Memory::GetPhysicalPointer(addr); +void CachedSurface::FlushGLBuffer(VAddr flush_start, VAddr flush_end) { + u8* const dst_buffer = Memory::GetPointer(addr); if (dst_buffer == nullptr) return; @@ -1167,7 +1167,7 @@ void RasterizerCacheOpenGL::DuplicateSurface(const Surface& src_surface, } } -void RasterizerCacheOpenGL::ValidateSurface(const Surface& surface, PAddr addr, u64 size) { +void RasterizerCacheOpenGL::ValidateSurface(const Surface& surface, VAddr addr, u64 size) { if (size == 0) return; @@ -1227,7 +1227,7 @@ void RasterizerCacheOpenGL::ValidateSurface(const Surface& surface, PAddr addr, } } -void RasterizerCacheOpenGL::FlushRegion(PAddr addr, u64 size, Surface flush_surface) { +void RasterizerCacheOpenGL::FlushRegion(VAddr addr, u64 size, Surface flush_surface) { if (size == 0) return; @@ -1263,7 +1263,7 @@ void RasterizerCacheOpenGL::FlushAll() { FlushRegion(0, 0xFFFFFFFF); } -void RasterizerCacheOpenGL::InvalidateRegion(PAddr addr, u64 size, const Surface& region_owner) { +void RasterizerCacheOpenGL::InvalidateRegion(VAddr addr, u64 size, const Surface& region_owner) { if (size == 0) return; @@ -1356,6 +1356,6 @@ void RasterizerCacheOpenGL::UnregisterSurface(const Surface& surface) { surface_cache.subtract({surface->GetInterval(), SurfaceSet{surface}}); } -void RasterizerCacheOpenGL::UpdatePagesCachedCount(PAddr addr, u64 size, int delta) { +void RasterizerCacheOpenGL::UpdatePagesCachedCount(VAddr addr, u64 size, int delta) { // ASSERT_MSG(false, "Unimplemented"); } -- cgit v1.2.3 From 6ced80bb470977a8a261275bdb4d2a133932facf Mon Sep 17 00:00:00 2001 From: bunnei Date: Thu, 22 Mar 2018 22:54:04 -0400 Subject: gl_rasterizer_cache: LoadGLBuffer should do a morton copy. --- .../renderer_opengl/gl_rasterizer_cache.cpp | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) (limited to 'src/video_core/renderer_opengl/gl_rasterizer_cache.cpp') diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp index 7ef08980f..175f329e3 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp @@ -530,7 +530,7 @@ MICROPROFILE_DEFINE(OpenGL_SurfaceLoad, "OpenGL", "Surface Load", MP_RGB(128, 64 void CachedSurface::LoadGLBuffer(VAddr load_start, VAddr load_end) { ASSERT(type != SurfaceType::Fill); - const u8* const texture_src_data = Memory::GetPointer(addr); + u8* texture_src_data = Memory::GetPointer(addr); if (texture_src_data == nullptr) return; @@ -539,13 +539,6 @@ void CachedSurface::LoadGLBuffer(VAddr load_start, VAddr load_end) { gl_buffer.reset(new u8[gl_buffer_size]); } - // TODO: Should probably be done in ::Memory:: and check for other regions too - if (load_start < Memory::VRAM_VADDR_END && load_end > Memory::VRAM_VADDR_END) - load_end = Memory::VRAM_VADDR_END; - - if (load_start < Memory::VRAM_VADDR && load_end > Memory::VRAM_VADDR) - load_start = Memory::VRAM_VADDR; - MICROPROFILE_SCOPE(OpenGL_SurfaceLoad); ASSERT(load_start >= addr && load_end <= end); @@ -553,15 +546,11 @@ void CachedSurface::LoadGLBuffer(VAddr load_start, VAddr load_end) { if (!is_tiled) { ASSERT(type == SurfaceType::Color); - std::memcpy(&gl_buffer[start_offset], texture_src_data + start_offset, - load_end - load_start); + VideoCore::MortonCopyPixels128(width, height, GetFormatBpp(), 4, + texture_src_data + start_offset, &gl_buffer[start_offset], + true); } else { - if (type == SurfaceType::Texture) { - ASSERT_MSG(false, "Unimplemented"); - } else { - morton_to_gl_fns[static_cast(pixel_format)](stride, height, &gl_buffer[0], addr, - load_start, load_end); - } + ASSERT_MSG(false, "Unimplemented"); } } -- cgit v1.2.3 From f61b9f7338b0f3667f605a399c6a1501e621b3a0 Mon Sep 17 00:00:00 2001 From: bunnei Date: Thu, 22 Mar 2018 23:01:57 -0400 Subject: LoadGLBuffer: Use bytes_per_pixel, not bits. --- src/video_core/renderer_opengl/gl_rasterizer_cache.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/video_core/renderer_opengl/gl_rasterizer_cache.cpp') diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp index 175f329e3..19fb2333a 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp @@ -546,7 +546,8 @@ void CachedSurface::LoadGLBuffer(VAddr load_start, VAddr load_end) { if (!is_tiled) { ASSERT(type == SurfaceType::Color); - VideoCore::MortonCopyPixels128(width, height, GetFormatBpp(), 4, + const u32 bytes_per_pixel{GetFormatBpp() >> 3}; + VideoCore::MortonCopyPixels128(width, height, bytes_per_pixel, 4, texture_src_data + start_offset, &gl_buffer[start_offset], true); } else { -- cgit v1.2.3 From b36b627d4d117cf667f697ade45c2fc3dd6a1f66 Mon Sep 17 00:00:00 2001 From: bunnei Date: Fri, 23 Mar 2018 15:25:16 -0400 Subject: RasterizerCacheOpenGL: FlushAll should flush full memory region. --- src/video_core/renderer_opengl/gl_rasterizer_cache.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/video_core/renderer_opengl/gl_rasterizer_cache.cpp') diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp index 19fb2333a..f54c5aff3 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp @@ -1250,7 +1250,7 @@ void RasterizerCacheOpenGL::FlushRegion(VAddr addr, u64 size, Surface flush_surf } void RasterizerCacheOpenGL::FlushAll() { - FlushRegion(0, 0xFFFFFFFF); + FlushRegion(0, Kernel::VMManager::MAX_ADDRESS); } void RasterizerCacheOpenGL::InvalidateRegion(VAddr addr, u64 size, const Surface& region_owner) { -- cgit v1.2.3 From b7da9d5a5410fc55c24ed49d9ed24c593b10e9e5 Mon Sep 17 00:00:00 2001 From: bunnei Date: Fri, 23 Mar 2018 16:54:20 -0400 Subject: gl_rasterizer_cache: Add missing include for vm_manager. --- src/video_core/renderer_opengl/gl_rasterizer_cache.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'src/video_core/renderer_opengl/gl_rasterizer_cache.cpp') diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp index f54c5aff3..78fa7c051 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp @@ -22,6 +22,7 @@ #include "common/scope_exit.h" #include "common/vector_math.h" #include "core/frontend/emu_window.h" +#include "core/hle/kernel/vm_manager.h" #include "core/memory.h" #include "core/settings.h" #include "video_core/renderer_opengl/gl_rasterizer_cache.h" -- cgit v1.2.3