diff options
author | FengChen <vonchenplus@gmail.com> | 2022-10-21 13:14:22 +0200 |
---|---|---|
committer | FengChen <vonchenplus@gmail.com> | 2022-10-22 10:58:23 +0200 |
commit | 2f90694797e30088820937855acf613bdcf27247 (patch) | |
tree | e0eeea1cd4b5ca0aae9319a670ad968b0b5f658e /src/video_core/renderer_opengl | |
parent | video_coare: Reimplementing the maxwell drawing trigger mechanism (diff) | |
download | yuzu-2f90694797e30088820937855acf613bdcf27247.tar yuzu-2f90694797e30088820937855acf613bdcf27247.tar.gz yuzu-2f90694797e30088820937855acf613bdcf27247.tar.bz2 yuzu-2f90694797e30088820937855acf613bdcf27247.tar.lz yuzu-2f90694797e30088820937855acf613bdcf27247.tar.xz yuzu-2f90694797e30088820937855acf613bdcf27247.tar.zst yuzu-2f90694797e30088820937855acf613bdcf27247.zip |
Diffstat (limited to 'src/video_core/renderer_opengl')
-rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.cpp | 12 | ||||
-rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.h | 2 |
2 files changed, 14 insertions, 0 deletions
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index 21bac6ebf..1590b21de 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp @@ -222,6 +222,8 @@ void RasterizerOpenGL::Draw(bool is_indexed, u32 instance_count) { pipeline->SetEngine(maxwell3d, gpu_memory); pipeline->Configure(is_indexed); + BindInlineIndexBuffer(); + SyncState(); const GLenum primitive_mode = MaxwellToGL::PrimitiveTopology(maxwell3d->regs.draw.topology); @@ -1128,6 +1130,16 @@ void RasterizerOpenGL::ReleaseChannel(s32 channel_id) { query_cache.EraseChannel(channel_id); } +void RasterizerOpenGL::BindInlineIndexBuffer() { + if (maxwell3d->inline_index_draw_indexes.empty()) { + return; + } + const auto data_count = static_cast<u32>(maxwell3d->inline_index_draw_indexes.size()); + auto buffer = Buffer(buffer_cache_runtime, *this, 0, data_count); + buffer.ImmediateUpload(0, maxwell3d->inline_index_draw_indexes); + buffer_cache_runtime.BindIndexBuffer(buffer, 0, data_count); +} + AccelerateDMA::AccelerateDMA(BufferCache& buffer_cache_) : buffer_cache{buffer_cache_} {} bool AccelerateDMA::BufferCopy(GPUVAddr src_address, GPUVAddr dest_address, u64 amount) { diff --git a/src/video_core/renderer_opengl/gl_rasterizer.h b/src/video_core/renderer_opengl/gl_rasterizer.h index c93ba3b42..793e0d608 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.h +++ b/src/video_core/renderer_opengl/gl_rasterizer.h @@ -199,6 +199,8 @@ private: /// End a transform feedback void EndTransformFeedback(); + void BindInlineIndexBuffer(); + Tegra::GPU& gpu; const Device& device; |