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:
ReinUsesLisp 2019-04-25 13:41:57 -03:00
parent fa59a7b4d8
commit 6c410104f4
7 changed files with 59 additions and 168 deletions

View file

@ -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) {

View file

@ -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);

View file

@ -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} {}