diff options
| author | 2019-12-26 04:17:02 -0300 | |
|---|---|---|
| committer | 2020-02-28 17:36:40 -0300 | |
| commit | 17a7fa751b34ae67c600bd741969dc1bde40fbf3 (patch) | |
| tree | f6d22f2c38b8f8bd64c362e84412692e0c16f0fe | |
| parent | gl_state: Remove texture and sampler tracking (diff) | |
| download | yuzu-17a7fa751b34ae67c600bd741969dc1bde40fbf3.tar.gz yuzu-17a7fa751b34ae67c600bd741969dc1bde40fbf3.tar.xz yuzu-17a7fa751b34ae67c600bd741969dc1bde40fbf3.zip | |
gl_state: Remove image tracking
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.cpp | 6 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_state.cpp | 7 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_state.h | 4 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_texture_cache.cpp | 14 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_texture_cache.h | 5 |
5 files changed, 12 insertions, 24 deletions
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index 669a7c335..1f94f759d 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp | |||
| @@ -633,7 +633,6 @@ void RasterizerOpenGL::DispatchCompute(GPUVAddr code_addr) { | |||
| 633 | bind_ubo_pushbuffer.Bind(); | 633 | bind_ubo_pushbuffer.Bind(); |
| 634 | bind_ssbo_pushbuffer.Bind(); | 634 | bind_ssbo_pushbuffer.Bind(); |
| 635 | 635 | ||
| 636 | state.ApplyImages(); | ||
| 637 | state.ApplyShaderProgram(); | 636 | state.ApplyShaderProgram(); |
| 638 | state.ApplyProgramPipeline(); | 637 | state.ApplyProgramPipeline(); |
| 639 | 638 | ||
| @@ -899,7 +898,7 @@ void RasterizerOpenGL::SetupImage(u32 binding, const Tegra::Texture::TICEntry& t | |||
| 899 | const GLShader::ImageEntry& entry) { | 898 | const GLShader::ImageEntry& entry) { |
| 900 | const auto view = texture_cache.GetImageSurface(tic, entry); | 899 | const auto view = texture_cache.GetImageSurface(tic, entry); |
| 901 | if (!view) { | 900 | if (!view) { |
| 902 | state.images[binding] = 0; | 901 | glBindImageTexture(binding, 0, 0, GL_FALSE, 0, GL_READ_ONLY, GL_R8); |
| 903 | return; | 902 | return; |
| 904 | } | 903 | } |
| 905 | if (!tic.IsBuffer()) { | 904 | if (!tic.IsBuffer()) { |
| @@ -908,7 +907,8 @@ void RasterizerOpenGL::SetupImage(u32 binding, const Tegra::Texture::TICEntry& t | |||
| 908 | if (entry.IsWritten()) { | 907 | if (entry.IsWritten()) { |
| 909 | view->MarkAsModified(texture_cache.Tick()); | 908 | view->MarkAsModified(texture_cache.Tick()); |
| 910 | } | 909 | } |
| 911 | state.images[binding] = view->GetTexture(); | 910 | glBindImageTexture(binding, view->GetTexture(), 0, GL_TRUE, 0, GL_READ_WRITE, |
| 911 | view->GetFormat()); | ||
| 912 | } | 912 | } |
| 913 | 913 | ||
| 914 | void RasterizerOpenGL::SyncViewport() { | 914 | void RasterizerOpenGL::SyncViewport() { |
diff --git a/src/video_core/renderer_opengl/gl_state.cpp b/src/video_core/renderer_opengl/gl_state.cpp index 98de72b5f..7bb87f7ba 100644 --- a/src/video_core/renderer_opengl/gl_state.cpp +++ b/src/video_core/renderer_opengl/gl_state.cpp | |||
| @@ -113,18 +113,11 @@ void OpenGLState::ApplyRenderBuffer() { | |||
| 113 | } | 113 | } |
| 114 | } | 114 | } |
| 115 | 115 | ||
| 116 | void OpenGLState::ApplyImages() { | ||
| 117 | if (const auto update = UpdateArray(cur_state.images, images)) { | ||
| 118 | glBindImageTextures(update->first, update->second, images.data() + update->first); | ||
| 119 | } | ||
| 120 | } | ||
| 121 | |||
| 122 | void OpenGLState::Apply() { | 116 | void OpenGLState::Apply() { |
| 123 | MICROPROFILE_SCOPE(OpenGL_State); | 117 | MICROPROFILE_SCOPE(OpenGL_State); |
| 124 | ApplyFramebufferState(); | 118 | ApplyFramebufferState(); |
| 125 | ApplyShaderProgram(); | 119 | ApplyShaderProgram(); |
| 126 | ApplyProgramPipeline(); | 120 | ApplyProgramPipeline(); |
| 127 | ApplyImages(); | ||
| 128 | ApplyRenderBuffer(); | 121 | ApplyRenderBuffer(); |
| 129 | } | 122 | } |
| 130 | 123 | ||
diff --git a/src/video_core/renderer_opengl/gl_state.h b/src/video_core/renderer_opengl/gl_state.h index 25dd56452..4e34fcfc2 100644 --- a/src/video_core/renderer_opengl/gl_state.h +++ b/src/video_core/renderer_opengl/gl_state.h | |||
| @@ -13,9 +13,6 @@ namespace OpenGL { | |||
| 13 | 13 | ||
| 14 | class OpenGLState { | 14 | class OpenGLState { |
| 15 | public: | 15 | public: |
| 16 | static constexpr std::size_t NumImages = 8 * 5; | ||
| 17 | std::array<GLuint, NumImages> images = {}; | ||
| 18 | |||
| 19 | struct { | 16 | struct { |
| 20 | GLuint read_framebuffer = 0; // GL_READ_FRAMEBUFFER_BINDING | 17 | GLuint read_framebuffer = 0; // GL_READ_FRAMEBUFFER_BINDING |
| 21 | GLuint draw_framebuffer = 0; // GL_DRAW_FRAMEBUFFER_BINDING | 18 | GLuint draw_framebuffer = 0; // GL_DRAW_FRAMEBUFFER_BINDING |
| @@ -38,7 +35,6 @@ public: | |||
| 38 | void ApplyFramebufferState(); | 35 | void ApplyFramebufferState(); |
| 39 | void ApplyShaderProgram(); | 36 | void ApplyShaderProgram(); |
| 40 | void ApplyProgramPipeline(); | 37 | void ApplyProgramPipeline(); |
| 41 | void ApplyImages(); | ||
| 42 | void ApplyRenderBuffer(); | 38 | void ApplyRenderBuffer(); |
| 43 | 39 | ||
| 44 | /// Resets any references to the given resource | 40 | /// Resets any references to the given resource |
diff --git a/src/video_core/renderer_opengl/gl_texture_cache.cpp b/src/video_core/renderer_opengl/gl_texture_cache.cpp index f7a1ca3a9..ca407c1b3 100644 --- a/src/video_core/renderer_opengl/gl_texture_cache.cpp +++ b/src/video_core/renderer_opengl/gl_texture_cache.cpp | |||
| @@ -397,6 +397,7 @@ CachedSurfaceView::CachedSurfaceView(CachedSurface& surface, const ViewParams& p | |||
| 397 | const bool is_proxy) | 397 | const bool is_proxy) |
| 398 | : VideoCommon::ViewBase(params), surface{surface}, is_proxy{is_proxy} { | 398 | : VideoCommon::ViewBase(params), surface{surface}, is_proxy{is_proxy} { |
| 399 | target = GetTextureTarget(params.target); | 399 | target = GetTextureTarget(params.target); |
| 400 | format = GetFormatTuple(surface.GetSurfaceParams().pixel_format).internal_format; | ||
| 400 | if (!is_proxy) { | 401 | if (!is_proxy) { |
| 401 | texture_view = CreateTextureView(); | 402 | texture_view = CreateTextureView(); |
| 402 | } | 403 | } |
| @@ -467,17 +468,12 @@ void CachedSurfaceView::ApplySwizzle(SwizzleSource x_source, SwizzleSource y_sou | |||
| 467 | } | 468 | } |
| 468 | 469 | ||
| 469 | OGLTextureView CachedSurfaceView::CreateTextureView() const { | 470 | OGLTextureView CachedSurfaceView::CreateTextureView() const { |
| 470 | const auto& owner_params = surface.GetSurfaceParams(); | ||
| 471 | OGLTextureView texture_view; | 471 | OGLTextureView texture_view; |
| 472 | texture_view.Create(); | 472 | texture_view.Create(); |
| 473 | 473 | ||
| 474 | const GLuint handle{texture_view.handle}; | 474 | glTextureView(texture_view.handle, target, surface.texture.handle, format, params.base_level, |
| 475 | const FormatTuple& tuple{GetFormatTuple(owner_params.pixel_format)}; | ||
| 476 | |||
| 477 | glTextureView(handle, target, surface.texture.handle, tuple.internal_format, params.base_level, | ||
| 478 | params.num_levels, params.base_layer, params.num_layers); | 475 | params.num_levels, params.base_layer, params.num_layers); |
| 479 | 476 | ApplyTextureDefaults(surface.GetSurfaceParams(), texture_view.handle); | |
| 480 | ApplyTextureDefaults(owner_params, handle); | ||
| 481 | 477 | ||
| 482 | return texture_view; | 478 | return texture_view; |
| 483 | } | 479 | } |
| @@ -521,9 +517,7 @@ void TextureCacheOpenGL::ImageBlit(View& src_view, View& dst_view, | |||
| 521 | const auto& dst_params{dst_view->GetSurfaceParams()}; | 517 | const auto& dst_params{dst_view->GetSurfaceParams()}; |
| 522 | 518 | ||
| 523 | OpenGLState prev_state{OpenGLState::GetCurState()}; | 519 | OpenGLState prev_state{OpenGLState::GetCurState()}; |
| 524 | SCOPE_EXIT({ | 520 | SCOPE_EXIT({ prev_state.Apply(); }); |
| 525 | prev_state.Apply(); | ||
| 526 | }); | ||
| 527 | 521 | ||
| 528 | OpenGLState state; | 522 | OpenGLState state; |
| 529 | state.draw.read_framebuffer = src_framebuffer.handle; | 523 | state.draw.read_framebuffer = src_framebuffer.handle; |
diff --git a/src/video_core/renderer_opengl/gl_texture_cache.h b/src/video_core/renderer_opengl/gl_texture_cache.h index 8e13ab38b..303534ca6 100644 --- a/src/video_core/renderer_opengl/gl_texture_cache.h +++ b/src/video_core/renderer_opengl/gl_texture_cache.h | |||
| @@ -96,6 +96,10 @@ public: | |||
| 96 | return texture_view.handle; | 96 | return texture_view.handle; |
| 97 | } | 97 | } |
| 98 | 98 | ||
| 99 | GLenum GetFormat() const { | ||
| 100 | return format; | ||
| 101 | } | ||
| 102 | |||
| 99 | const SurfaceParams& GetSurfaceParams() const { | 103 | const SurfaceParams& GetSurfaceParams() const { |
| 100 | return surface.GetSurfaceParams(); | 104 | return surface.GetSurfaceParams(); |
| 101 | } | 105 | } |
| @@ -113,6 +117,7 @@ private: | |||
| 113 | 117 | ||
| 114 | CachedSurface& surface; | 118 | CachedSurface& surface; |
| 115 | GLenum target{}; | 119 | GLenum target{}; |
| 120 | GLenum format{}; | ||
| 116 | 121 | ||
| 117 | OGLTextureView texture_view; | 122 | OGLTextureView texture_view; |
| 118 | u32 swizzle{}; | 123 | u32 swizzle{}; |