|
|
|
@ -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_} {}
|
|
|
|
|
|
|
|
|
|