diff options
| author | 2019-05-11 00:17:47 -0400 | |
|---|---|---|
| committer | 2019-06-20 21:36:12 -0300 | |
| commit | 41b4674458595d3d5cd938c06ce651b6d80d305c (patch) | |
| tree | b647258e16830af3a22d6be6e5d4e10d54dae781 /src | |
| parent | texture_cache: Add ASync Protections (diff) | |
| download | yuzu-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.cpp | 28 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_texture_cache.h | 8 |
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 | ||
| 237 | CachedSurface::~CachedSurface() { | 236 | CachedSurface::~CachedSurface() { |
| @@ -351,16 +350,24 @@ void CachedSurfaceView::DecorateViewName(GPUVAddr gpu_addr, std::string prefix) | |||
| 351 | } | 350 | } |
| 352 | 351 | ||
| 353 | View CachedSurface::CreateView(const ViewParams& view_key) { | 352 | View CachedSurface::CreateView(const ViewParams& view_key) { |
| 354 | auto view = std::make_shared<CachedSurfaceView>(*this, view_key); | 353 | return CreateViewInner(view_key, false); |
| 354 | } | ||
| 355 | |||
| 356 | View 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 | ||
| 360 | CachedSurfaceView::CachedSurfaceView(CachedSurface& surface, const ViewParams& params) | 364 | CachedSurfaceView::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 | ||
| 407 | OGLTextureView CachedSurfaceView::CreateTextureView() const { | 415 | OGLTextureView 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 | ||
| 55 | private: | 56 | private: |
| 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 | ||
| 68 | class CachedSurfaceView final : public VideoCommon::ViewBase { | 69 | class CachedSurfaceView final : public VideoCommon::ViewBase { |
| 69 | public: | 70 | public: |
| 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 | ||
| 124 | class TextureCacheOpenGL final : public TextureCacheBase { | 130 | class TextureCacheOpenGL final : public TextureCacheBase { |