diff options
author | liamwhite <liamwhite@users.noreply.github.com> | 2023-12-26 17:45:25 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-26 17:45:25 +0100 |
commit | ad049f13aaa046d82722510e078a78c9b6f20188 (patch) | |
tree | aea9be0bedc0e5fd55860c687c662069c8e6bc26 /src/video_core/renderer_opengl/gl_rasterizer.cpp | |
parent | Merge pull request #12394 from liamwhite/per-process-memory (diff) | |
parent | gl_rasterizer: Implement DrawTransformFeedback macro (diff) | |
download | yuzu-ad049f13aaa046d82722510e078a78c9b6f20188.tar yuzu-ad049f13aaa046d82722510e078a78c9b6f20188.tar.gz yuzu-ad049f13aaa046d82722510e078a78c9b6f20188.tar.bz2 yuzu-ad049f13aaa046d82722510e078a78c9b6f20188.tar.lz yuzu-ad049f13aaa046d82722510e078a78c9b6f20188.tar.xz yuzu-ad049f13aaa046d82722510e078a78c9b6f20188.tar.zst yuzu-ad049f13aaa046d82722510e078a78c9b6f20188.zip |
Diffstat (limited to 'src/video_core/renderer_opengl/gl_rasterizer.cpp')
-rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index 339950d2e..7a5fad735 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp @@ -309,6 +309,13 @@ void RasterizerOpenGL::DrawIndirect() { const auto& params = maxwell3d->draw_manager->GetIndirectParams(); buffer_cache.SetDrawIndirect(¶ms); PrepareDraw(params.is_indexed, [this, ¶ms](GLenum primitive_mode) { + if (params.is_byte_count) { + const GPUVAddr tfb_object_base_addr = params.indirect_start_address - 4U; + const GLuint tfb_object = + buffer_cache_runtime.GetTransformFeedbackObject(tfb_object_base_addr); + glDrawTransformFeedback(primitive_mode, tfb_object); + return; + } const auto [buffer, offset] = buffer_cache.GetDrawIndirectBuffer(); const GLvoid* const gl_offset = reinterpret_cast<const GLvoid*>(static_cast<uintptr_t>(offset)); @@ -1371,6 +1378,10 @@ void RasterizerOpenGL::ReleaseChannel(s32 channel_id) { query_cache.EraseChannel(channel_id); } +void RasterizerOpenGL::RegisterTransformFeedback(GPUVAddr tfb_object_addr) { + buffer_cache_runtime.BindTransformFeedbackObject(tfb_object_addr); +} + AccelerateDMA::AccelerateDMA(BufferCache& buffer_cache_, TextureCache& texture_cache_) : buffer_cache{buffer_cache_}, texture_cache{texture_cache_} {} |