summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Fernando Sahmkow2019-05-11 00:17:47 -0400
committerGravatar ReinUsesLisp2019-06-20 21:36:12 -0300
commit41b4674458595d3d5cd938c06ce651b6d80d305c (patch)
treeb647258e16830af3a22d6be6e5d4e10d54dae781 /src
parenttexture_cache: Add ASync Protections (diff)
downloadyuzu-41b4674458595d3d5cd938c06ce651b6d80d305c.tar.gz
yuzu-41b4674458595d3d5cd938c06ce651b6d80d305c.tar.xz
yuzu-41b4674458595d3d5cd938c06ce651b6d80d305c.zip
gl_texture_cache: Make main views be proxy textures instead of a full view.
Diffstat (limited to 'src')
-rw-r--r--src/video_core/renderer_opengl/gl_texture_cache.cpp28
-rw-r--r--src/video_core/renderer_opengl/gl_texture_cache.h8
2 files changed, 25 insertions, 11 deletions
diff --git a/src/video_core/renderer_opengl/gl_texture_cache.cpp b/src/video_core/renderer_opengl/gl_texture_cache.cpp
index 32cb08963..a55097e5f 100644
--- a/src/video_core/renderer_opengl/gl_texture_cache.cpp
+++ b/src/video_core/renderer_opengl/gl_texture_cache.cpp
@@ -228,10 +228,9 @@ CachedSurface::CachedSurface(const GPUVAddr gpu_addr, const SurfaceParams& param
228 target = GetTextureTarget(params.target); 228 target = GetTextureTarget(params.target);
229 texture = CreateTexture(params, target, internal_format); 229 texture = CreateTexture(params, target, internal_format);
230 DecorateSurfaceName(); 230 DecorateSurfaceName();
231 main_view = CreateView( 231 main_view = CreateViewInner(
232 ViewParams(params.target, 0, params.is_layered ? params.depth : 1, 0, params.num_levels)); 232 ViewParams(params.target, 0, params.is_layered ? params.depth : 1, 0, params.num_levels),
233 main_view->DecorateViewName(gpu_addr, 233 true);
234 params.TargetName() + "V:" + std::to_string(view_count++));
235} 234}
236 235
237CachedSurface::~CachedSurface() { 236CachedSurface::~CachedSurface() {
@@ -351,16 +350,24 @@ void CachedSurfaceView::DecorateViewName(GPUVAddr gpu_addr, std::string prefix)
351} 350}
352 351
353View CachedSurface::CreateView(const ViewParams& view_key) { 352View CachedSurface::CreateView(const ViewParams& view_key) {
354 auto view = std::make_shared<CachedSurfaceView>(*this, view_key); 353 return CreateViewInner(view_key, false);
354}
355
356View CachedSurface::CreateViewInner(const ViewParams& view_key, const bool is_proxy) {
357 auto view = std::make_shared<CachedSurfaceView>(*this, view_key, is_proxy);
355 views[view_key] = view; 358 views[view_key] = view;
356 view->DecorateViewName(gpu_addr, params.TargetName() + "V:" + std::to_string(view_count++)); 359 if (!is_proxy)
360 view->DecorateViewName(gpu_addr, params.TargetName() + "V:" + std::to_string(view_count++));
357 return view; 361 return view;
358} 362}
359 363
360CachedSurfaceView::CachedSurfaceView(CachedSurface& surface, const ViewParams& params) 364CachedSurfaceView::CachedSurfaceView(CachedSurface& surface, const ViewParams& params,
361 : VideoCommon::ViewBase(params), surface{surface} { 365 const bool is_proxy)
366 : VideoCommon::ViewBase(params), surface{surface}, is_proxy{is_proxy} {
362 target = GetTextureTarget(params.target); 367 target = GetTextureTarget(params.target);
363 texture_view = CreateTextureView(); 368 if (!is_proxy) {
369 texture_view = CreateTextureView();
370 }
364 swizzle = EncodeSwizzle(SwizzleSource::R, SwizzleSource::G, SwizzleSource::B, SwizzleSource::A); 371 swizzle = EncodeSwizzle(SwizzleSource::R, SwizzleSource::G, SwizzleSource::B, SwizzleSource::A);
365} 372}
366 373
@@ -401,7 +408,8 @@ void CachedSurfaceView::ApplySwizzle(SwizzleSource x_source, SwizzleSource y_sou
401 const std::array<GLint, 4> gl_swizzle = {GetSwizzleSource(x_source), GetSwizzleSource(y_source), 408 const std::array<GLint, 4> gl_swizzle = {GetSwizzleSource(x_source), GetSwizzleSource(y_source),
402 GetSwizzleSource(z_source), 409 GetSwizzleSource(z_source),
403 GetSwizzleSource(w_source)}; 410 GetSwizzleSource(w_source)};
404 glTextureParameteriv(texture_view.handle, GL_TEXTURE_SWIZZLE_RGBA, gl_swizzle.data()); 411 const GLuint handle = GetTexture();
412 glTextureParameteriv(handle, GL_TEXTURE_SWIZZLE_RGBA, gl_swizzle.data());
405} 413}
406 414
407OGLTextureView CachedSurfaceView::CreateTextureView() const { 415OGLTextureView CachedSurfaceView::CreateTextureView() const {
diff --git a/src/video_core/renderer_opengl/gl_texture_cache.h b/src/video_core/renderer_opengl/gl_texture_cache.h
index 0a1b57014..0ba42dbab 100644
--- a/src/video_core/renderer_opengl/gl_texture_cache.h
+++ b/src/video_core/renderer_opengl/gl_texture_cache.h
@@ -51,6 +51,7 @@ protected:
51 void DecorateSurfaceName(); 51 void DecorateSurfaceName();
52 52
53 View CreateView(const ViewParams& view_key) override; 53 View CreateView(const ViewParams& view_key) override;
54 View CreateViewInner(const ViewParams& view_key, const bool is_proxy);
54 55
55private: 56private:
56 void UploadTextureMipmap(u32 level, std::vector<u8>& staging_buffer); 57 void UploadTextureMipmap(u32 level, std::vector<u8>& staging_buffer);
@@ -67,13 +68,17 @@ private:
67 68
68class CachedSurfaceView final : public VideoCommon::ViewBase { 69class CachedSurfaceView final : public VideoCommon::ViewBase {
69public: 70public:
70 explicit CachedSurfaceView(CachedSurface& surface, const ViewParams& params); 71 explicit CachedSurfaceView(CachedSurface& surface, const ViewParams& params,
72 const bool is_proxy);
71 ~CachedSurfaceView(); 73 ~CachedSurfaceView();
72 74
73 /// Attaches this texture view to the current bound GL_DRAW_FRAMEBUFFER 75 /// Attaches this texture view to the current bound GL_DRAW_FRAMEBUFFER
74 void Attach(GLenum attachment) const; 76 void Attach(GLenum attachment) const;
75 77
76 GLuint GetTexture() { 78 GLuint GetTexture() {
79 if (is_proxy) {
80 return surface.GetTexture();
81 }
77 return texture_view.handle; 82 return texture_view.handle;
78 } 83 }
79 84
@@ -119,6 +124,7 @@ private:
119 124
120 OGLTextureView texture_view; 125 OGLTextureView texture_view;
121 u32 swizzle; 126 u32 swizzle;
127 bool is_proxy;
122}; 128};
123 129
124class TextureCacheOpenGL final : public TextureCacheBase { 130class TextureCacheOpenGL final : public TextureCacheBase {