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