|
Blender V5.0
|
#include <gpu_context_private.hh>
Inherited by blender::gpu::DummyContext, blender::gpu::GLContext, blender::gpu::MTLContext, and blender::gpu::VKContext.
Public Member Functions | |
| Context () | |
| virtual | ~Context () |
| virtual void | activate ()=0 |
| virtual void | deactivate ()=0 |
| virtual void | begin_frame ()=0 |
| virtual void | end_frame ()=0 |
| virtual void | flush ()=0 |
| virtual void | finish ()=0 |
| virtual void | memory_statistics_get (int *r_total_mem, int *r_free_mem)=0 |
| virtual void | debug_group_begin (const char *, int) |
| virtual void | debug_group_end () |
| virtual bool | debug_capture_begin (const char *title)=0 |
| virtual void | debug_capture_end ()=0 |
| virtual void * | debug_capture_scope_create (const char *name)=0 |
| virtual bool | debug_capture_scope_begin (void *scope)=0 |
| virtual void | debug_capture_scope_end (void *scope)=0 |
| virtual void | debug_unbind_all_ubo ()=0 |
| virtual void | debug_unbind_all_ssbo ()=0 |
| bool | is_active_on_thread () |
| VertBuf * | dummy_vbo_get () |
| Batch * | procedural_points_batch_get () |
| Batch * | procedural_lines_batch_get () |
| Batch * | procedural_triangles_batch_get () |
| Batch * | procedural_triangle_strips_batch_get () |
| void | assert_framebuffer_shader_compatibility (Shader *sh) |
Static Public Member Functions | |
| static Context * | get () |
Public Attributes | |
| Shader * | shader = nullptr |
| FrameBuffer * | active_fb = nullptr |
| GPUMatrixState * | matrix_state = nullptr |
| StateManager * | state_manager = nullptr |
| Immediate * | imm = nullptr |
| FrameBuffer * | back_left = nullptr |
| FrameBuffer * | front_left = nullptr |
| FrameBuffer * | back_right = nullptr |
| FrameBuffer * | front_right = nullptr |
| DebugStack | debug_stack |
| bool | debug_is_capturing = false |
| int | context_id = 0 |
| Vector< StorageBuf * > | printf_buf |
| VertBuf * | dummy_vbo = nullptr |
| Batch * | procedural_points_batch = nullptr |
| Batch * | procedural_lines_batch = nullptr |
| Batch * | procedural_triangles_batch = nullptr |
| Batch * | procedural_triangle_strips_batch = nullptr |
| TexturePool * | texture_pool = nullptr |
| int | shader_builtin_srgb_transform = 0 |
| bool | shader_builtin_srgb_is_dirty = false |
Static Public Attributes | |
| static int | context_counter = 0 |
Protected Member Functions | |
| void | free_resources () |
Protected Attributes | |
| pthread_t | thread_ |
| bool | is_active_ |
| void * | ghost_window_ |
Definition at line 31 of file gpu_context_private.hh.
| blender::gpu::Context::Context | ( | ) |
Definition at line 70 of file gpu_context.cc.
References context_counter, context_id, GPU_matrix_state_create(), is_active_, matrix_state, texture_pool, and thread_.
Referenced by get().
|
virtual |
IMPORTANT: Do not free resources (texture, batch, buffers) in this function. These objects are likely to reference the GL/VK/MTLContext which is already destroyed at this point.
Definition at line 81 of file gpu_context.cc.
References back_left, back_right, BLI_assert, front_left, front_right, GPU_matrix_state_discard(), imm, matrix_state, state_manager, and texture_pool.
|
pure virtual |
Implemented in blender::gpu::DummyContext, blender::gpu::GLContext, blender::gpu::MTLContext, and blender::gpu::VKContext.
Referenced by GPU_context_active_set().
|
inline |
Definition at line 131 of file gpu_context_private.hh.
References active_fb, BLI_assert_msg, blender::gpu::Shader::fragment_output_bits, G, G_DEBUG_GPU, GPU_WRITE_COLOR, blender::gpu::Shader::name_get(), and state_manager.
Referenced by GPU_batch_draw_advanced(), GPU_batch_draw_indirect(), GPU_batch_multi_draw_indirect(), and immEnd().
|
pure virtual |
Implemented in blender::gpu::DummyContext, blender::gpu::GLContext, blender::gpu::MTLContext, and blender::gpu::VKContext.
Referenced by GPU_context_begin_frame().
|
pure virtual |
Implemented in blender::gpu::DummyContext, blender::gpu::GLContext, blender::gpu::MTLContext, and blender::gpu::VKContext.
|
pure virtual |
Implemented in blender::gpu::DummyContext, blender::gpu::GLContext, blender::gpu::MTLContext, and blender::gpu::VKContext.
Referenced by GPU_debug_capture_begin().
|
pure virtual |
Implemented in blender::gpu::DummyContext, blender::gpu::GLContext, blender::gpu::MTLContext, and blender::gpu::VKContext.
Referenced by GPU_debug_capture_end().
|
pure virtual |
Implemented in blender::gpu::DummyContext, blender::gpu::GLContext, blender::gpu::MTLContext, and blender::gpu::VKContext.
Referenced by GPU_debug_capture_scope_begin().
|
pure virtual |
Implemented in blender::gpu::DummyContext, blender::gpu::GLContext, blender::gpu::MTLContext, and blender::gpu::VKContext.
References name.
Referenced by GPU_debug_capture_scope_create().
|
pure virtual |
Implemented in blender::gpu::DummyContext, blender::gpu::GLContext, blender::gpu::MTLContext, and blender::gpu::VKContext.
Referenced by GPU_debug_capture_scope_end().
|
inlinevirtual |
Reimplemented in blender::gpu::DummyContext, blender::gpu::GLContext, blender::gpu::MTLContext, and blender::gpu::VKContext.
Definition at line 106 of file gpu_context_private.hh.
Referenced by GPU_debug_group_begin().
|
inlinevirtual |
Reimplemented in blender::gpu::DummyContext, blender::gpu::GLContext, blender::gpu::MTLContext, and blender::gpu::VKContext.
Definition at line 107 of file gpu_context_private.hh.
Referenced by GPU_debug_group_end().
|
pure virtual |
Implemented in blender::gpu::DummyContext, blender::gpu::GLContext, blender::gpu::MTLContext, and blender::gpu::VKContext.
Referenced by GPU_storagebuf_debug_unbind_all().
|
pure virtual |
Implemented in blender::gpu::DummyContext, blender::gpu::GLContext, blender::gpu::MTLContext, and blender::gpu::VKContext.
Referenced by GPU_uniformbuf_debug_unbind_all().
| VertBuf * blender::gpu::Context::dummy_vbo_get | ( | ) |
Definition at line 129 of file gpu_context.cc.
References dummy_vbo, GPU_vertbuf_create_with_format(), GPU_vertbuf_data_alloc(), and GPU_vertformat_attr_add().
Referenced by procedural_lines_batch_get(), procedural_points_batch_get(), procedural_triangle_strips_batch_get(), and procedural_triangles_batch_get().
|
pure virtual |
Implemented in blender::gpu::DummyContext, blender::gpu::GLContext, blender::gpu::MTLContext, and blender::gpu::VKContext.
Referenced by GPU_context_end_frame().
|
pure virtual |
Implemented in blender::gpu::DummyContext, blender::gpu::GLContext, blender::gpu::MTLContext, and blender::gpu::VKContext.
Referenced by GPU_finish().
|
pure virtual |
Implemented in blender::gpu::DummyContext, blender::gpu::GLContext, blender::gpu::MTLContext, and blender::gpu::VKContext.
Referenced by GPU_flush().
|
protected |
Derived classes should call this from the destructor, as freeing textures and frame-buffers may need the derived context to be valid.
Definition at line 98 of file gpu_context.cc.
References back_left, back_right, dummy_vbo, front_left, front_right, GPU_BATCH_DISCARD_SAFE, GPU_VERTBUF_DISCARD_SAFE, procedural_lines_batch, procedural_points_batch, procedural_triangle_strips_batch, procedural_triangles_batch, and texture_pool.
Referenced by blender::gpu::DummyContext::~DummyContext(), blender::gpu::GLContext::~GLContext(), blender::gpu::MTLContext::~MTLContext(), and blender::gpu::VKContext::~VKContext().
|
static |
Definition at line 124 of file gpu_context.cc.
References active_ctx, and Context().
Referenced by blender::gpu::GLTexture::check_feedback_loop(), blender::gpu::ShaderCompiler::compile(), blender::gpu::debug_validate_binding_image_format(), blender::gpu::GLContext::get(), blender::gpu::MTLContext::get(), blender::gpu::VKContext::get(), GPU_apply_state(), GPU_backbuffer_bind(), GPU_batch_draw_advanced(), GPU_batch_draw_indirect(), GPU_batch_multi_draw_indirect(), GPU_batch_procedural_lines_get(), GPU_batch_procedural_points_get(), GPU_batch_procedural_triangle_strips_get(), GPU_batch_procedural_triangles_get(), GPU_blend_get(), GPU_clear_color(), GPU_clear_depth(), GPU_color_mask(), GPU_context_active_get(), GPU_debug_capture_begin(), GPU_debug_capture_end(), GPU_debug_capture_scope_begin(), GPU_debug_capture_scope_create(), GPU_debug_capture_scope_end(), GPU_debug_get_groups_names(), GPU_debug_group_begin(), GPU_debug_group_end(), GPU_debug_group_match(), GPU_depth_mask(), GPU_depth_mask_get(), GPU_depth_range(), GPU_depth_test_get(), GPU_face_culling_get(), GPU_finish(), GPU_flush(), GPU_framebuffer_active_get(), GPU_framebuffer_back_get(), GPU_framebuffer_blit(), GPU_framebuffer_restore(), GPU_frontbuffer_read_color(), GPU_line_smooth_get(), GPU_line_width_get(), GPU_matrix_dirty_get(), GPU_matrix_reset(), GPU_matrix_stack_level_get_model_view(), GPU_matrix_stack_level_get_projection(), gpu_matrix_state_active_set_dirty(), GPU_mem_stats_get(), GPU_memory_barrier(), GPU_offscreen_draw_to_screen(), gpu_offscreen_fb_get(), GPU_point_size(), GPU_program_point_size(), GPU_scissor(), GPU_scissor_get(), GPU_scissor_test(), GPU_shader_bind(), GPU_shader_get_bound(), GPU_shader_unbind(), GPU_state_set(), GPU_stencil_mask_get(), GPU_stencil_test_get(), GPU_stereo_quadbuffer_support(), GPU_storagebuf_debug_unbind_all(), GPU_texture_bind(), GPU_texture_bind_ex(), GPU_texture_image_bind(), GPU_texture_image_unbind(), GPU_texture_image_unbind_all(), GPU_texture_unbind(), GPU_texture_unbind_all(), GPU_uniformbuf_debug_unbind_all(), GPU_unpack_row_length_set(), GPU_viewport(), GPU_viewport_size_get_f(), GPU_viewport_size_get_i(), GPU_write_mask_get(), immActivate(), immEnd(), blender::gpu::Immediate::polyline_draw_workaround(), polyline_draw_workaround(), blender::gpu::Shader::set_framebuffer_srgb_target(), blender::gpu::MTLShaderCompiler::specialize_shader(), blender::gpu::GLFrameBuffer::~GLFrameBuffer(), and blender::gpu::Shader::~Shader().
| bool blender::gpu::Context::is_active_on_thread | ( | ) |
Definition at line 119 of file gpu_context.cc.
References active_ctx, and thread_.
Referenced by blender::gpu::MTLContext::deactivate().
|
pure virtual |
Implemented in blender::gpu::DummyContext, blender::gpu::GLContext, blender::gpu::MTLContext, and blender::gpu::VKContext.
Referenced by GPU_mem_stats_get().
| Batch * blender::gpu::Context::procedural_lines_batch_get | ( | ) |
Definition at line 153 of file gpu_context.cc.
References dummy_vbo_get(), GPU_batch_create, GPU_PRIM_LINES, and procedural_lines_batch.
Referenced by GPU_batch_procedural_lines_get().
| Batch * blender::gpu::Context::procedural_points_batch_get | ( | ) |
Definition at line 143 of file gpu_context.cc.
References dummy_vbo_get(), GPU_batch_create, GPU_PRIM_POINTS, and procedural_points_batch.
Referenced by GPU_batch_procedural_points_get().
| Batch * blender::gpu::Context::procedural_triangle_strips_batch_get | ( | ) |
Definition at line 173 of file gpu_context.cc.
References dummy_vbo_get(), GPU_batch_create, GPU_PRIM_TRI_STRIP, and procedural_triangle_strips_batch.
Referenced by GPU_batch_procedural_triangle_strips_get().
| Batch * blender::gpu::Context::procedural_triangles_batch_get | ( | ) |
Definition at line 163 of file gpu_context.cc.
References dummy_vbo_get(), GPU_batch_create, GPU_PRIM_TRIS, and procedural_triangles_batch.
Referenced by GPU_batch_procedural_triangles_get(), blender::gpu::Immediate::polyline_draw_workaround(), and polyline_draw_workaround().
| FrameBuffer* blender::gpu::Context::active_fb = nullptr |
Definition at line 35 of file gpu_context_private.hh.
Referenced by blender::gpu::VKContext::activate_framebuffer(), blender::gpu::VKContext::active_framebuffer_get(), blender::gpu::MTLFrameBuffer::apply_state(), assert_framebuffer_shader_compatibility(), blender::gpu::GLTexture::check_feedback_loop(), blender::gpu::VKContext::deactivate_framebuffer(), blender::gpu::DummyContext::DummyContext(), blender::gpu::MTLContext::ensure_begin_render_pass(), blender::gpu::MTLContext::framebuffer_bind(), blender::gpu::MTLContext::framebuffer_restore(), blender::gpu::MTLContext::get_current_framebuffer(), blender::gpu::GLContext::GLContext(), GPU_clear_color(), GPU_clear_depth(), GPU_framebuffer_active_get(), GPU_framebuffer_blit(), GPU_offscreen_draw_to_screen(), GPU_scissor(), GPU_scissor_get(), GPU_scissor_test(), GPU_viewport(), GPU_viewport_size_get_f(), GPU_viewport_size_get_i(), blender::gpu::MTLContext::MTLContext(), and blender::gpu::VKContext::VKContext().
| FrameBuffer* blender::gpu::Context::back_left = nullptr |
All 4 window frame-buffers. None of them are valid in an off-screen context. Right frame-buffers are only available if using stereo rendering. Front frame-buffers contains (in principle, but not always) the last frame color. Default frame-buffer is back_left.
Definition at line 47 of file gpu_context_private.hh.
Referenced by blender::gpu::GLContext::activate(), blender::gpu::DummyContext::DummyContext(), blender::gpu::MTLContext::framebuffer_restore(), free_resources(), blender::gpu::MTLContext::get_default_framebuffer(), blender::gpu::GLContext::GLContext(), GPU_backbuffer_bind(), GPU_framebuffer_back_get(), GPU_framebuffer_restore(), blender::gpu::MTLContext::MTLContext(), blender::gpu::VKContext::sync_backbuffer(), blender::gpu::VKContext::VKContext(), ~Context(), and blender::gpu::VKContext::~VKContext().
| FrameBuffer* blender::gpu::Context::back_right = nullptr |
Definition at line 49 of file gpu_context_private.hh.
Referenced by blender::gpu::GLContext::activate(), free_resources(), blender::gpu::GLContext::GLContext(), GPU_backbuffer_bind(), and ~Context().
|
static |
Definition at line 60 of file gpu_context_private.hh.
Referenced by Context().
| int blender::gpu::Context::context_id = 0 |
Definition at line 61 of file gpu_context_private.hh.
Referenced by Context().
| bool blender::gpu::Context::debug_is_capturing = false |
Definition at line 53 of file gpu_context_private.hh.
Referenced by GPU_debug_capture_begin(), GPU_debug_capture_end(), GPU_debug_capture_scope_begin(), and GPU_debug_capture_scope_end().
| DebugStack blender::gpu::Context::debug_stack |
Definition at line 52 of file gpu_context_private.hh.
Referenced by blender::gpu::VKContext::activate(), blender::gpu::VKContext::flush_render_graph(), GPU_debug_get_groups_names(), GPU_debug_group_begin(), GPU_debug_group_end(), and GPU_debug_group_match().
Dummy VBO to feed the procedural batches.
Definition at line 67 of file gpu_context_private.hh.
Referenced by dummy_vbo_get(), and free_resources().
| FrameBuffer* blender::gpu::Context::front_left = nullptr |
Definition at line 48 of file gpu_context_private.hh.
Referenced by blender::gpu::GLContext::activate(), free_resources(), blender::gpu::GLContext::GLContext(), GPU_frontbuffer_read_color(), blender::gpu::MTLContext::MTLContext(), blender::gpu::VKContext::sync_backbuffer(), blender::gpu::VKContext::VKContext(), ~Context(), and blender::gpu::VKContext::~VKContext().
| FrameBuffer* blender::gpu::Context::front_right = nullptr |
Definition at line 50 of file gpu_context_private.hh.
Referenced by blender::gpu::GLContext::activate(), free_resources(), blender::gpu::GLContext::GLContext(), GPU_stereo_quadbuffer_support(), and ~Context().
|
protected |
Avoid including GHOST headers. Can be nullptr for off-screen contexts.
Definition at line 86 of file gpu_context_private.hh.
Referenced by blender::gpu::GLContext::activate(), blender::gpu::MTLContext::activate(), blender::gpu::GLContext::GLContext(), blender::gpu::MTLContext::MTLContext(), blender::gpu::VKContext::sync_backbuffer(), and blender::gpu::VKContext::VKContext().
Definition at line 38 of file gpu_context_private.hh.
Referenced by blender::gpu::GLContext::GLContext(), immActivate(), blender::gpu::MTLContext::MTLContext(), blender::gpu::VKContext::VKContext(), ~Context(), and blender::gpu::VKContext::~VKContext().
|
protected |
Definition at line 84 of file gpu_context_private.hh.
Referenced by blender::gpu::GLContext::activate(), blender::gpu::MTLContext::activate(), blender::gpu::VKContext::activate(), Context(), blender::gpu::GLContext::deactivate(), blender::gpu::MTLContext::deactivate(), blender::gpu::VKContext::deactivate(), and blender::gpu::MTLContext::get_active().
| GPUMatrixState* blender::gpu::Context::matrix_state = nullptr |
Definition at line 36 of file gpu_context_private.hh.
Referenced by Context(), GPU_matrix_dirty_get(), GPU_matrix_reset(), GPU_matrix_stack_level_get_model_view(), GPU_matrix_stack_level_get_projection(), gpu_matrix_state_active_set_dirty(), and ~Context().
| Vector<StorageBuf *> blender::gpu::Context::printf_buf |
Definition at line 64 of file gpu_context_private.hh.
Referenced by GPU_shader_bind(), blender::gpu::printf_begin(), and blender::gpu::printf_end().
| Batch* blender::gpu::Context::procedural_lines_batch = nullptr |
Definition at line 70 of file gpu_context_private.hh.
Referenced by free_resources(), and procedural_lines_batch_get().
| Batch* blender::gpu::Context::procedural_points_batch = nullptr |
Dummy batches for procedural geometry rendering.
Definition at line 69 of file gpu_context_private.hh.
Referenced by free_resources(), and procedural_points_batch_get().
| Batch* blender::gpu::Context::procedural_triangle_strips_batch = nullptr |
Definition at line 72 of file gpu_context_private.hh.
Referenced by free_resources(), and procedural_triangle_strips_batch_get().
| Batch* blender::gpu::Context::procedural_triangles_batch = nullptr |
Definition at line 71 of file gpu_context_private.hh.
Referenced by free_resources(), and procedural_triangles_batch_get().
State management
Definition at line 34 of file gpu_context_private.hh.
Referenced by blender::gpu::MTLBatch::bind(), blender::gpu::GLTexture::check_feedback_loop(), blender::gpu::debug::check_gl_resources(), blender::gpu::debug_validate_binding_image_format(), blender::gpu::VKImmediate::end(), GPU_shader_bind(), GPU_shader_get_bound(), GPU_shader_unbind(), blender::gpu::VKContext::update_pipeline_data(), blender::gpu::VKContext::update_pipeline_data(), and blender::gpu::GLVaoCache::vao_get().
| bool blender::gpu::Context::shader_builtin_srgb_is_dirty = false |
Definition at line 79 of file gpu_context_private.hh.
Referenced by GPU_context_active_set(), GPU_shader_bind(), blender::gpu::Shader::set_framebuffer_srgb_target(), and blender::gpu::Shader::set_srgb_uniform().
| int blender::gpu::Context::shader_builtin_srgb_transform = 0 |
Global state to avoid setting the srgb builtin uniform for every shader bind.
Definition at line 78 of file gpu_context_private.hh.
Referenced by blender::gpu::Shader::set_framebuffer_srgb_target(), and blender::gpu::Shader::set_srgb_uniform().
| StateManager* blender::gpu::Context::state_manager = nullptr |
Definition at line 37 of file gpu_context_private.hh.
Referenced by assert_framebuffer_shader_compatibility(), blender::gpu::MTLShader::bake_current_pipeline_state(), blender::gpu::GLBatch::bind(), blender::gpu::debug_validate_binding_image_format(), blender::gpu::GLImmediate::end(), blender::gpu::MTLImmediate::end(), blender::gpu::MTLContext::ensure_render_pipeline_state(), blender::gpu::GLContext::GLContext(), blender::gpu::GLFrameBuffer::GLFrameBuffer(), GPU_apply_state(), GPU_blend_get(), GPU_color_mask(), GPU_depth_mask(), GPU_depth_mask_get(), GPU_depth_range(), GPU_depth_test_get(), GPU_face_culling_get(), GPU_line_smooth_get(), GPU_line_width_get(), GPU_memory_barrier(), GPU_point_size(), GPU_program_point_size(), GPU_state_set(), GPU_stencil_mask_get(), GPU_stencil_test_get(), GPU_texture_bind(), GPU_texture_bind_ex(), GPU_texture_image_bind(), GPU_texture_image_unbind(), GPU_texture_image_unbind_all(), GPU_texture_unbind(), GPU_texture_unbind_all(), GPU_unpack_row_length_set(), GPU_write_mask_get(), blender::gpu::MTLContext::MTLContext(), blender::gpu::GLContext::state_manager_active_get(), blender::gpu::VKContext::state_manager_get(), blender::gpu::MTLContext::texture_unbind(), blender::gpu::VKContext::VKContext(), ~Context(), blender::gpu::GLTexture::~GLTexture(), and blender::gpu::MTLTexture::~MTLTexture().
| TexturePool* blender::gpu::Context::texture_pool = nullptr |
Texture pool used to recycle temporary texture (or render target) memory.
Definition at line 75 of file gpu_context_private.hh.
Referenced by Context(), free_resources(), blender::gpu::TexturePool::get(), and ~Context().
|
protected |
Thread on which this context is active.
Definition at line 83 of file gpu_context_private.hh.
Referenced by blender::gpu::GLContext::activate(), blender::gpu::MTLContext::activate(), Context(), and is_active_on_thread().