Browse Source
texture_cache: Remove execution context copies from the texture cache
texture_cache: Remove execution context copies from the texture cache
This is done to simplify the OpenGL implementation, it is needed for Vulkan.nce_cpp
7 changed files with 59 additions and 168 deletions
-
16src/video_core/renderer_opengl/gl_texture_cache.cpp
-
17src/video_core/renderer_opengl/gl_texture_cache.h
-
2src/video_core/renderer_opengl/utils.cpp
-
8src/video_core/texture_cache/surface_base.cpp
-
8src/video_core/texture_cache/surface_base.h
-
83src/video_core/texture_cache/texture_cache.h
-
93src/video_core/texture_cache/texture_cache_contextless.h
@ -1,93 +0,0 @@ |
|||
// Copyright 2019 yuzu Emulator Project |
|||
// Licensed under GPLv2 or any later version |
|||
// Refer to the license.txt file included. |
|||
|
|||
#pragma once |
|||
|
|||
#include "video_core/texture_cache/texture_cache.h" |
|||
|
|||
namespace VideoCommon { |
|||
|
|||
struct DummyExecutionContext {}; |
|||
|
|||
template <typename TSurface, typename TView> |
|||
class TextureCacheContextless : protected TextureCache<TSurface, TView, DummyExecutionContext> { |
|||
using Base = TextureCache<TSurface, TView, DummyExecutionContext>; |
|||
|
|||
public: |
|||
void InvalidateRegion(CacheAddr addr, std::size_t size) { |
|||
Base::InvalidateRegion(addr, size); |
|||
} |
|||
|
|||
TView* GetTextureSurface(const Tegra::Texture::FullTextureInfo& config) { |
|||
return RemoveContext(Base::GetTextureSurface({}, config)); |
|||
} |
|||
|
|||
TView* GetDepthBufferSurface(bool preserve_contents) { |
|||
return RemoveContext(Base::GetDepthBufferSurface({}, preserve_contents)); |
|||
} |
|||
|
|||
TView* GetColorBufferSurface(std::size_t index, bool preserve_contents) { |
|||
return RemoveContext(Base::GetColorBufferSurface({}, index, preserve_contents)); |
|||
} |
|||
|
|||
TView* GetFermiSurface(const Tegra::Engines::Fermi2D::Regs::Surface& config) { |
|||
return RemoveContext(Base::GetFermiSurface({}, config)); |
|||
} |
|||
|
|||
std::shared_ptr<TSurface> TryFindFramebufferSurface(const u8* host_ptr) const { |
|||
return Base::TryFindFramebufferSurface(host_ptr); |
|||
} |
|||
|
|||
u64 Tick() { |
|||
return Base::Tick(); |
|||
} |
|||
|
|||
protected: |
|||
explicit TextureCacheContextless(Core::System& system, |
|||
VideoCore::RasterizerInterface& rasterizer) |
|||
: TextureCache<TSurface, TView, DummyExecutionContext>{system, rasterizer} {} |
|||
|
|||
virtual TView* TryFastGetSurfaceView( |
|||
GPUVAddr gpu_addr, VAddr cpu_addr, u8* host_ptr, const SurfaceParams& params, |
|||
bool preserve_contents, const std::vector<std::shared_ptr<TSurface>>& overlaps) = 0; |
|||
|
|||
private: |
|||
std::tuple<TView*, DummyExecutionContext> TryFastGetSurfaceView( |
|||
DummyExecutionContext, GPUVAddr gpu_addr, VAddr cpu_addr, u8* host_ptr, |
|||
const SurfaceParams& params, bool preserve_contents, |
|||
const std::vector<std::shared_ptr<TSurface>>& overlaps) { |
|||
return {TryFastGetSurfaceView(gpu_addr, cpu_addr, host_ptr, params, preserve_contents, |
|||
overlaps), |
|||
{}}; |
|||
} |
|||
|
|||
TView* RemoveContext(std::tuple<TView*, DummyExecutionContext> return_value) { |
|||
const auto [view, exctx] = return_value; |
|||
return view; |
|||
} |
|||
}; |
|||
|
|||
template <typename TTextureCache, typename TView> |
|||
class SurfaceBaseContextless : public SurfaceBase<TTextureCache, TView, DummyExecutionContext> { |
|||
public: |
|||
DummyExecutionContext DownloadTexture(DummyExecutionContext) { |
|||
DownloadTextureImpl(); |
|||
return {}; |
|||
} |
|||
|
|||
DummyExecutionContext UploadTexture(DummyExecutionContext) { |
|||
UploadTextureImpl(); |
|||
return {}; |
|||
} |
|||
|
|||
protected: |
|||
explicit SurfaceBaseContextless(TTextureCache& texture_cache, const SurfaceParams& params) |
|||
: SurfaceBase<TTextureCache, TView, DummyExecutionContext>{texture_cache, params} {} |
|||
|
|||
virtual void DownloadTextureImpl() = 0; |
|||
|
|||
virtual void UploadTextureImpl() = 0; |
|||
}; |
|||
|
|||
} // namespace VideoCommon |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue