texture_cache: Remove execution context copies from the texture cache
This is done to simplify the OpenGL implementation, it is needed for Vulkan.
This commit is contained in:
parent
fa59a7b4d8
commit
6c410104f4
7 changed files with 59 additions and 168 deletions
|
@ -9,7 +9,7 @@
|
|||
#include "video_core/renderer_opengl/gl_resource_manager.h"
|
||||
#include "video_core/renderer_opengl/gl_texture_cache.h"
|
||||
#include "video_core/renderer_opengl/utils.h"
|
||||
#include "video_core/texture_cache/texture_cache_contextless.h"
|
||||
#include "video_core/texture_cache/texture_cache.h"
|
||||
#include "video_core/textures/convert.h"
|
||||
#include "video_core/textures/texture.h"
|
||||
|
||||
|
@ -18,6 +18,10 @@ namespace OpenGL {
|
|||
using Tegra::Texture::SwizzleSource;
|
||||
using VideoCore::MortonSwizzleMode;
|
||||
|
||||
using VideoCore::Surface::ComponentType;
|
||||
using VideoCore::Surface::PixelFormat;
|
||||
using VideoCore::Surface::SurfaceTarget;
|
||||
|
||||
namespace {
|
||||
|
||||
struct FormatTuple {
|
||||
|
@ -209,8 +213,7 @@ OGLTexture CreateTexture(const SurfaceParams& params, GLenum target, GLenum inte
|
|||
} // Anonymous namespace
|
||||
|
||||
CachedSurface::CachedSurface(TextureCacheOpenGL& texture_cache, const SurfaceParams& params)
|
||||
: VideoCommon::SurfaceBaseContextless<TextureCacheOpenGL, CachedSurfaceView>{texture_cache,
|
||||
params} {
|
||||
: VideoCommon::SurfaceBase<TextureCacheOpenGL, CachedSurfaceView>{texture_cache, params} {
|
||||
const auto& tuple{GetFormatTuple(params.GetPixelFormat(), params.GetComponentType())};
|
||||
internal_format = tuple.internal_format;
|
||||
format = tuple.format;
|
||||
|
@ -222,7 +225,7 @@ CachedSurface::CachedSurface(TextureCacheOpenGL& texture_cache, const SurfacePar
|
|||
|
||||
CachedSurface::~CachedSurface() = default;
|
||||
|
||||
void CachedSurface::DownloadTextureImpl() {
|
||||
void CachedSurface::DownloadTexture() {
|
||||
// TODO(Rodrigo): Optimize alignment
|
||||
glPixelStorei(GL_PACK_ALIGNMENT, 1);
|
||||
SCOPE_EXIT({ glPixelStorei(GL_PACK_ROW_LENGTH, 0); });
|
||||
|
@ -241,7 +244,7 @@ void CachedSurface::DownloadTextureImpl() {
|
|||
}
|
||||
}
|
||||
|
||||
void CachedSurface::UploadTextureImpl() {
|
||||
void CachedSurface::UploadTexture() {
|
||||
SCOPE_EXIT({ glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); });
|
||||
for (u32 level = 0; level < params.GetNumLevels(); ++level) {
|
||||
UploadTextureMipmap(level);
|
||||
|
@ -321,7 +324,8 @@ void CachedSurface::UploadTextureMipmap(u32 level) {
|
|||
}
|
||||
|
||||
void CachedSurface::DecorateSurfaceName() {
|
||||
LabelGLObject(GL_TEXTURE, texture.handle, GetGpuAddr());
|
||||
LabelGLObject(GL_TEXTURE, texture.handle, GetGpuAddr(),
|
||||
params.GetTarget() == SurfaceTarget::Texture3D ? "3D" : "");
|
||||
}
|
||||
|
||||
std::unique_ptr<CachedSurfaceView> CachedSurface::CreateView(const ViewKey& view_key) {
|
||||
|
|
|
@ -14,32 +14,30 @@
|
|||
#include "common/common_types.h"
|
||||
#include "video_core/engines/shader_bytecode.h"
|
||||
#include "video_core/renderer_opengl/gl_resource_manager.h"
|
||||
#include "video_core/texture_cache/texture_cache_contextless.h"
|
||||
#include "video_core/texture_cache/texture_cache.h"
|
||||
|
||||
namespace OpenGL {
|
||||
|
||||
using VideoCommon::SurfaceParams;
|
||||
using VideoCommon::ViewKey;
|
||||
using VideoCore::Surface::ComponentType;
|
||||
using VideoCore::Surface::PixelFormat;
|
||||
using VideoCore::Surface::SurfaceTarget;
|
||||
using VideoCore::Surface::SurfaceType;
|
||||
|
||||
class CachedSurfaceView;
|
||||
class CachedSurface;
|
||||
class TextureCacheOpenGL;
|
||||
|
||||
using Surface = std::shared_ptr<CachedSurface>;
|
||||
using TextureCacheBase = VideoCommon::TextureCacheContextless<CachedSurface, CachedSurfaceView>;
|
||||
using TextureCacheBase = VideoCommon::TextureCache<CachedSurface, CachedSurfaceView>;
|
||||
|
||||
class CachedSurface final
|
||||
: public VideoCommon::SurfaceBaseContextless<TextureCacheOpenGL, CachedSurfaceView> {
|
||||
class CachedSurface final : public VideoCommon::SurfaceBase<TextureCacheOpenGL, CachedSurfaceView> {
|
||||
friend CachedSurfaceView;
|
||||
|
||||
public:
|
||||
explicit CachedSurface(TextureCacheOpenGL& texture_cache, const SurfaceParams& params);
|
||||
~CachedSurface();
|
||||
|
||||
void UploadTexture();
|
||||
void DownloadTexture();
|
||||
|
||||
GLenum GetTarget() const {
|
||||
return target;
|
||||
}
|
||||
|
@ -53,9 +51,6 @@ protected:
|
|||
|
||||
std::unique_ptr<CachedSurfaceView> CreateView(const ViewKey& view_key);
|
||||
|
||||
void UploadTextureImpl();
|
||||
void DownloadTextureImpl();
|
||||
|
||||
private:
|
||||
void UploadTextureMipmap(u32 level);
|
||||
|
||||
|
|
|
@ -18,7 +18,9 @@ namespace OpenGL {
|
|||
|
||||
using Tegra::Shader::TextureType;
|
||||
using Tegra::Texture::SwizzleSource;
|
||||
|
||||
using VideoCore::Surface::SurfaceTarget;
|
||||
using VideoCore::Surface::SurfaceType;
|
||||
|
||||
BindBuffersRangePushBuffer::BindBuffersRangePushBuffer(GLenum target) : target{target} {}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue