summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_opengl/gl_rasterizer.cpp
diff options
context:
space:
mode:
authorAmeer J <52414509+ameerj@users.noreply.github.com>2023-12-19 22:25:08 +0100
committerAmeer J <52414509+ameerj@users.noreply.github.com>2023-12-20 01:54:57 +0100
commitbbc0ed118df7f64522e198307a6d28607b23d4be (patch)
tree2dfd7ecaec445de037ec0af719d12991b88379fd /src/video_core/renderer_opengl/gl_rasterizer.cpp
parentMerge pull request #12411 from ameerj/gl-nv-tfb-fixups (diff)
downloadyuzu-bbc0ed118df7f64522e198307a6d28607b23d4be.tar
yuzu-bbc0ed118df7f64522e198307a6d28607b23d4be.tar.gz
yuzu-bbc0ed118df7f64522e198307a6d28607b23d4be.tar.bz2
yuzu-bbc0ed118df7f64522e198307a6d28607b23d4be.tar.lz
yuzu-bbc0ed118df7f64522e198307a6d28607b23d4be.tar.xz
yuzu-bbc0ed118df7f64522e198307a6d28607b23d4be.tar.zst
yuzu-bbc0ed118df7f64522e198307a6d28607b23d4be.zip
Diffstat (limited to 'src/video_core/renderer_opengl/gl_rasterizer.cpp')
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer.cpp11
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 4832c03c5..291515e73 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer.cpp
+++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp
@@ -294,6 +294,13 @@ void RasterizerOpenGL::DrawIndirect() {
const auto& params = maxwell3d->draw_manager->GetIndirectParams();
buffer_cache.SetDrawIndirect(&params);
PrepareDraw(params.is_indexed, [this, &params](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));
@@ -1350,6 +1357,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_} {}