Blender V4.3
blender::draw::detail::PassBase< DrawCommandBufType > Class Template Reference

#include <draw_pass.hh>

Inherited by blender::draw::detail::Pass< DrawCommandBufType >.

Public Member Functions

 PassBase (const char *name, DrawCommandBufType &draw_command_buf, SubPassVector< PassBase< DrawCommandBufType > > &sub_passes, GPUShader *shader=nullptr)
 
void init ()
 
template<class U >
void bind_resources (U &resources)
 
State Implementation
void state_set (DRWState state, int clip_plane_count=0)
 
void state_stencil (uint8_t write_mask, uint8_t reference, uint8_t compare_mask)
 
void shader_set (GPUShader *shader)
 
void framebuffer_set (GPUFrameBuffer **framebuffer)
 
void subpass_transition (GPUAttachmentState depth_attachment, Span< GPUAttachmentState > color_attachments)
 
void material_set (Manager &manager, GPUMaterial *material)
 
Clear Implementation
void clear_color (float4 color)
 
void clear_depth (float depth)
 
void clear_stencil (uint8_t stencil)
 
void clear_depth_stencil (float depth, uint8_t stencil)
 
void clear_color_depth_stencil (float4 color, float depth, uint8_t stencil)
 
Draw calls
void draw (gpu::Batch *batch, uint instance_len=-1, uint vertex_len=-1, uint vertex_first=-1, ResourceHandle handle={0}, uint custom_id=0)
 
void draw (gpu::Batch *batch, ResourceHandle handle, uint custom_id=0)
 
void draw_procedural (GPUPrimType primitive, uint instance_len, uint vertex_len, uint vertex_first=-1, ResourceHandle handle={0}, uint custom_id=0)
 
void draw_expand (gpu::Batch *batch, GPUPrimType primitive_type, uint primitive_len, uint instance_len, uint vertex_len=-1, uint vertex_first=-1, ResourceHandle handle={0}, uint custom_id=0)
 
void draw_expand (gpu::Batch *batch, GPUPrimType primitive_type, uint primitive_len, uint instance_len, ResourceHandle handle={0}, uint custom_id=0)
 
Indirect draw calls
void draw_indirect (gpu::Batch *batch, StorageBuffer< DrawCommand, true > &indirect_buffer, ResourceHandle handle={0})
 
void draw_procedural_indirect (GPUPrimType primitive, StorageBuffer< DrawCommand, true > &indirect_buffer, ResourceHandle handle={0})
 
Compute Dispatch Implementation
void dispatch (int group_len)
 
void dispatch (int2 group_len)
 
void dispatch (int3 group_len)
 
void dispatch (int3 *group_len)
 
void dispatch (StorageBuffer< DispatchCommand > &indirect_buffer)
 
Barrier Implementation
void barrier (eGPUBarrier type)
 
Push Constant Implementation
void push_constant (const char *name, const float &data)
 
void push_constant (const char *name, const float2 &data)
 
void push_constant (const char *name, const float3 &data)
 
void push_constant (const char *name, const float4 &data)
 
void push_constant (const char *name, const int &data)
 
void push_constant (const char *name, const int2 &data)
 
void push_constant (const char *name, const int3 &data)
 
void push_constant (const char *name, const int4 &data)
 
void push_constant (const char *name, const bool &data)
 
void push_constant (const char *name, const float4x4 &data)
 
void push_constant (const char *name, const float *data, int array_len=1)
 
void push_constant (const char *name, const float2 *data, int array_len=1)
 
void push_constant (const char *name, const float3 *data, int array_len=1)
 
void push_constant (const char *name, const float4 *data, int array_len=1)
 
void push_constant (const char *name, const int *data, int array_len=1)
 
void push_constant (const char *name, const int2 *data, int array_len=1)
 
void push_constant (const char *name, const int3 *data, int array_len=1)
 
void push_constant (const char *name, const int4 *data, int array_len=1)
 
void push_constant (const char *name, const float4x4 *data)
 

Public Attributes

const char * debug_name
 
bool use_custom_ids
 

Protected Attributes

Vector< command::Header, 0 > headers_
 
Vector< command::Undetermined, 0 > commands_
 
DrawCommandBufType & draw_commands_buf_
 
SubPassVector< PassBase< DrawCommandBufType > > & sub_passes_
 
GPUShadershader_
 

Friends

std::ostream & operator<< (std::ostream &stream, const PassBase &pass)
 

PassBase Implementation

PassBase< DrawCommandBufType > & sub (const char *name)
 
void clear_multi (Span< float4 > colors)
 
std::string serialize (std::string line_prefix="") const
 
void clear (eGPUFrameBufferBits planes, float4 color, float depth, uint8_t stencil)
 
gpu::Batch * procedural_batch_get (GPUPrimType primitive)
 
command::Undeterminedcreate_command (command::Type type)
 
void submit (command::RecordingState &state) const
 

Resource bind Implementation

void bind_image (const char *name, GPUTexture *image)
 
void bind_image (const char *name, GPUTexture **image)
 
void bind_image (int slot, GPUTexture *image)
 
void bind_image (int slot, GPUTexture **image)
 
void bind_texture (const char *name, GPUTexture *texture, GPUSamplerState state=sampler_auto)
 
void bind_texture (const char *name, GPUTexture **texture, GPUSamplerState state=sampler_auto)
 
void bind_texture (const char *name, gpu::VertBuf *buffer)
 
void bind_texture (const char *name, gpu::VertBuf **buffer)
 
void bind_texture (int slot, GPUTexture *texture, GPUSamplerState state=sampler_auto)
 
void bind_texture (int slot, GPUTexture **texture, GPUSamplerState state=sampler_auto)
 
void bind_texture (int slot, gpu::VertBuf *buffer)
 
void bind_texture (int slot, gpu::VertBuf **buffer)
 
void bind_ssbo (const char *name, GPUStorageBuf *buffer)
 
void bind_ssbo (const char *name, GPUStorageBuf **buffer)
 
void bind_ssbo (int slot, GPUStorageBuf *buffer)
 
void bind_ssbo (int slot, GPUStorageBuf **buffer)
 
void bind_ssbo (const char *name, GPUUniformBuf *buffer)
 
void bind_ssbo (const char *name, GPUUniformBuf **buffer)
 
void bind_ssbo (int slot, GPUUniformBuf *buffer)
 
void bind_ssbo (int slot, GPUUniformBuf **buffer)
 
void bind_ssbo (const char *name, gpu::VertBuf *buffer)
 
void bind_ssbo (const char *name, gpu::VertBuf **buffer)
 
void bind_ssbo (int slot, gpu::VertBuf *buffer)
 
void bind_ssbo (int slot, gpu::VertBuf **buffer)
 
void bind_ssbo (const char *name, gpu::IndexBuf *buffer)
 
void bind_ssbo (const char *name, gpu::IndexBuf **buffer)
 
void bind_ssbo (int slot, gpu::IndexBuf *buffer)
 
void bind_ssbo (int slot, gpu::IndexBuf **buffer)
 
void bind_ubo (const char *name, GPUUniformBuf *buffer)
 
void bind_ubo (const char *name, GPUUniformBuf **buffer)
 
void bind_ubo (int slot, GPUUniformBuf *buffer)
 
void bind_ubo (int slot, GPUUniformBuf **buffer)
 
void specialize_constant (GPUShader *shader, const char *name, const float &data)
 
void specialize_constant (GPUShader *shader, const char *name, const int &data)
 
void specialize_constant (GPUShader *shader, const char *name, const uint &data)
 
void specialize_constant (GPUShader *shader, const char *name, const bool &data)
 
void specialize_constant (GPUShader *shader, const char *name, const float *data)
 
void specialize_constant (GPUShader *shader, const char *name, const int *data)
 
void specialize_constant (GPUShader *shader, const char *name, const uint *data)
 
void specialize_constant (GPUShader *shader, const char *name, const bool *data)
 
int push_constant_offset (const char *name)
 

Detailed Description

template<typename DrawCommandBufType>
class blender::draw::detail::PassBase< DrawCommandBufType >

Public API of a draw pass.

Definition at line 123 of file draw_pass.hh.

Constructor & Destructor Documentation

◆ PassBase()

template<typename DrawCommandBufType >
blender::draw::detail::PassBase< DrawCommandBufType >::PassBase ( const char * name,
DrawCommandBufType & draw_command_buf,
SubPassVector< PassBase< DrawCommandBufType > > & sub_passes,
GPUShader * shader = nullptr )
inline

Definition at line 147 of file draw_pass.hh.

Member Function Documentation

◆ barrier()

◆ bind_image() [1/4]

template<class T >
void blender::draw::detail::PassBase< T >::bind_image ( const char * name,
GPUTexture ** image )
inline

Definition at line 1224 of file draw_pass.hh.

References BLI_assert, and GPU_shader_get_sampler_binding().

◆ bind_image() [2/4]

template<class T >
void blender::draw::detail::PassBase< T >::bind_image ( const char * name,
GPUTexture * image )
inline

Bind a shader resource.

Reference versions are to be used when the resource might be resize / realloc or even change between the time it is referenced and the time it is dereferenced for drawing.

IMPORTANT: Will keep a reference to the data and dereference it upon drawing. Make sure data still alive until pass submission.

Note
Variations using slot will not query a shader interface and can be used before binding a shader.

Definition at line 1118 of file draw_pass.hh.

References BLI_assert, and GPU_shader_get_sampler_binding().

Referenced by blender::eevee::DeferredLayer::end_sync(), blender::eevee::ShadowModule::end_sync(), blender::eevee::VolumeModule::end_sync(), blender::eevee::DeferredLayerBase::gbuffer_pass_sync(), blender::eevee::Precompute::Precompute(), blender::eevee::AmbientOcclusion::sync(), blender::eevee::BackgroundPipeline::sync(), blender::eevee::Film::sync(), blender::eevee::MotionBlurModule::sync(), and blender::eevee::Film::write_viewport_compositor_passes().

◆ bind_image() [3/4]

template<class T >
void blender::draw::detail::PassBase< T >::bind_image ( int slot,
GPUTexture ** image )
inline

Definition at line 1250 of file draw_pass.hh.

References BLI_assert.

◆ bind_image() [4/4]

template<class T >
void blender::draw::detail::PassBase< T >::bind_image ( int slot,
GPUTexture * image )
inline

Definition at line 1197 of file draw_pass.hh.

References BLI_assert.

◆ bind_resources()

◆ bind_ssbo() [1/16]

template<class T >
void blender::draw::detail::PassBase< T >::bind_ssbo ( const char * name,
gpu::IndexBuf ** buffer )
inline

Definition at line 1087 of file draw_pass.hh.

References BLI_assert, and GPU_shader_get_ssbo_binding().

◆ bind_ssbo() [2/16]

template<class T >
void blender::draw::detail::PassBase< T >::bind_ssbo ( const char * name,
gpu::IndexBuf * buffer )
inline

Definition at line 1081 of file draw_pass.hh.

References BLI_assert, and GPU_shader_get_ssbo_binding().

◆ bind_ssbo() [3/16]

template<class T >
void blender::draw::detail::PassBase< T >::bind_ssbo ( const char * name,
gpu::VertBuf ** buffer )
inline

Definition at line 1075 of file draw_pass.hh.

References BLI_assert, and GPU_shader_get_ssbo_binding().

◆ bind_ssbo() [4/16]

template<class T >
void blender::draw::detail::PassBase< T >::bind_ssbo ( const char * name,
gpu::VertBuf * buffer )
inline

Definition at line 1069 of file draw_pass.hh.

References BLI_assert, and GPU_shader_get_ssbo_binding().

◆ bind_ssbo() [5/16]

template<class T >
void blender::draw::detail::PassBase< T >::bind_ssbo ( const char * name,
GPUStorageBuf ** buffer )
inline

Definition at line 1203 of file draw_pass.hh.

References BLI_assert, and GPU_shader_get_ssbo_binding().

◆ bind_ssbo() [6/16]

◆ bind_ssbo() [7/16]

template<class T >
void blender::draw::detail::PassBase< T >::bind_ssbo ( const char * name,
GPUUniformBuf ** buffer )
inline

Definition at line 1063 of file draw_pass.hh.

References BLI_assert, and GPU_shader_get_ssbo_binding().

◆ bind_ssbo() [8/16]

template<class T >
void blender::draw::detail::PassBase< T >::bind_ssbo ( const char * name,
GPUUniformBuf * buffer )
inline

Definition at line 1057 of file draw_pass.hh.

References BLI_assert, and GPU_shader_get_ssbo_binding().

◆ bind_ssbo() [9/16]

template<class T >
void blender::draw::detail::PassBase< T >::bind_ssbo ( int slot,
gpu::IndexBuf ** buffer )
inline

Definition at line 1165 of file draw_pass.hh.

References BLI_assert.

◆ bind_ssbo() [10/16]

template<class T >
void blender::draw::detail::PassBase< T >::bind_ssbo ( int slot,
gpu::IndexBuf * buffer )
inline

Definition at line 1158 of file draw_pass.hh.

References BLI_assert.

◆ bind_ssbo() [11/16]

template<class T >
void blender::draw::detail::PassBase< T >::bind_ssbo ( int slot,
gpu::VertBuf ** buffer )
inline

Definition at line 1151 of file draw_pass.hh.

References BLI_assert.

◆ bind_ssbo() [12/16]

template<class T >
void blender::draw::detail::PassBase< T >::bind_ssbo ( int slot,
gpu::VertBuf * buffer )
inline

Definition at line 1144 of file draw_pass.hh.

References BLI_assert.

◆ bind_ssbo() [13/16]

template<class T >
void blender::draw::detail::PassBase< T >::bind_ssbo ( int slot,
GPUStorageBuf ** buffer )
inline

Definition at line 1230 of file draw_pass.hh.

References BLI_assert.

◆ bind_ssbo() [14/16]

template<class T >
void blender::draw::detail::PassBase< T >::bind_ssbo ( int slot,
GPUStorageBuf * buffer )
inline

Definition at line 1124 of file draw_pass.hh.

References BLI_assert.

◆ bind_ssbo() [15/16]

template<class T >
void blender::draw::detail::PassBase< T >::bind_ssbo ( int slot,
GPUUniformBuf ** buffer )
inline

Definition at line 1137 of file draw_pass.hh.

References BLI_assert.

◆ bind_ssbo() [16/16]

template<class T >
void blender::draw::detail::PassBase< T >::bind_ssbo ( int slot,
GPUUniformBuf * buffer )
inline

Definition at line 1130 of file draw_pass.hh.

References BLI_assert.

◆ bind_texture() [1/8]

template<class T >
void blender::draw::detail::PassBase< T >::bind_texture ( const char * name,
gpu::VertBuf ** buffer )
inline

Definition at line 1112 of file draw_pass.hh.

References BLI_assert, and GPU_shader_get_sampler_binding().

◆ bind_texture() [2/8]

template<class T >
void blender::draw::detail::PassBase< T >::bind_texture ( const char * name,
gpu::VertBuf * buffer )
inline

Definition at line 1106 of file draw_pass.hh.

References BLI_assert, and GPU_shader_get_sampler_binding().

◆ bind_texture() [3/8]

template<class T >
void blender::draw::detail::PassBase< T >::bind_texture ( const char * name,
GPUTexture ** texture,
GPUSamplerState state = sampler_auto )
inline

Definition at line 1216 of file draw_pass.hh.

References BLI_assert, GPU_shader_get_sampler_binding(), and state.

◆ bind_texture() [4/8]

template<class T >
void blender::draw::detail::PassBase< T >::bind_texture ( const char * name,
GPUTexture * texture,
GPUSamplerState state = sampler_auto )
inline

◆ bind_texture() [5/8]

template<class T >
void blender::draw::detail::PassBase< T >::bind_texture ( int slot,
gpu::VertBuf ** buffer )
inline

Definition at line 1191 of file draw_pass.hh.

References BLI_assert.

◆ bind_texture() [6/8]

template<class T >
void blender::draw::detail::PassBase< T >::bind_texture ( int slot,
gpu::VertBuf * buffer )
inline

Definition at line 1185 of file draw_pass.hh.

References BLI_assert.

◆ bind_texture() [7/8]

template<class T >
void blender::draw::detail::PassBase< T >::bind_texture ( int slot,
GPUTexture ** texture,
GPUSamplerState state = sampler_auto )
inline

Definition at line 1244 of file draw_pass.hh.

References BLI_assert, state, and texture.

◆ bind_texture() [8/8]

template<class T >
void blender::draw::detail::PassBase< T >::bind_texture ( int slot,
GPUTexture * texture,
GPUSamplerState state = sampler_auto )
inline

Definition at line 1179 of file draw_pass.hh.

References BLI_assert, state, and texture.

◆ bind_ubo() [1/4]

template<class T >
void blender::draw::detail::PassBase< T >::bind_ubo ( const char * name,
GPUUniformBuf ** buffer )
inline

Definition at line 1209 of file draw_pass.hh.

References BLI_assert, and GPU_shader_get_ubo_binding().

◆ bind_ubo() [2/4]

◆ bind_ubo() [3/4]

template<class T >
void blender::draw::detail::PassBase< T >::bind_ubo ( int slot,
GPUUniformBuf ** buffer )
inline

Definition at line 1237 of file draw_pass.hh.

References BLI_assert.

◆ bind_ubo() [4/4]

template<class T >
void blender::draw::detail::PassBase< T >::bind_ubo ( int slot,
GPUUniformBuf * buffer )
inline

Definition at line 1172 of file draw_pass.hh.

References BLI_assert.

◆ clear()

◆ clear_color()

◆ clear_color_depth_stencil()

template<class T >
void blender::draw::detail::PassBase< T >::clear_color_depth_stencil ( float4 color,
float depth,
uint8_t stencil )
inline

Definition at line 932 of file draw_pass.hh.

References clear(), GPU_COLOR_BIT, GPU_DEPTH_BIT, and GPU_STENCIL_BIT.

◆ clear_depth()

template<class T >
void blender::draw::detail::PassBase< T >::clear_depth ( float depth)
inline

Definition at line 916 of file draw_pass.hh.

References clear(), and GPU_DEPTH_BIT.

◆ clear_depth_stencil()

template<class T >
void blender::draw::detail::PassBase< T >::clear_depth_stencil ( float depth,
uint8_t stencil )
inline

Definition at line 926 of file draw_pass.hh.

References clear(), GPU_DEPTH_BIT, and GPU_STENCIL_BIT.

◆ clear_multi()

template<class T >
void blender::draw::detail::PassBase< T >::clear_multi ( Span< float4 > colors)
inline

Clear each color attachment with different values. Span needs to be appropriately sized. IMPORTANT: The source is dereference on pass submission.

Definition at line 592 of file draw_pass.hh.

References blender::draw::detail::PassBase< DrawCommandBufType >::clear_multi().

Referenced by blender::draw::detail::PassBase< DrawCommandBufType >::clear_multi().

◆ clear_stencil()

template<class T >
void blender::draw::detail::PassBase< T >::clear_stencil ( uint8_t stencil)
inline

Definition at line 921 of file draw_pass.hh.

References clear(), and GPU_STENCIL_BIT.

Referenced by blender::eevee::VolumeLayer::sync().

◆ create_command()

template<class T >
command::Undetermined & blender::draw::detail::PassBase< T >::create_command ( command::Type type)
inlineprotected

◆ dispatch() [1/5]

◆ dispatch() [2/5]

template<class T >
void blender::draw::detail::PassBase< T >::dispatch ( int2 group_len)
inline

Definition at line 880 of file draw_pass.hh.

References BLI_assert.

◆ dispatch() [3/5]

template<class T >
void blender::draw::detail::PassBase< T >::dispatch ( int3 * group_len)
inline

Definition at line 892 of file draw_pass.hh.

References BLI_assert.

◆ dispatch() [4/5]

template<class T >
void blender::draw::detail::PassBase< T >::dispatch ( int3 group_len)
inline

Definition at line 886 of file draw_pass.hh.

References BLI_assert.

◆ dispatch() [5/5]

template<class T >
void blender::draw::detail::PassBase< T >::dispatch ( StorageBuffer< DispatchCommand > & indirect_buffer)
inline

Definition at line 899 of file draw_pass.hh.

References BLI_assert.

◆ draw() [1/2]

template<class T >
void blender::draw::detail::PassBase< T >::draw ( gpu::Batch * batch,
ResourceHandle handle,
uint custom_id = 0 )
inline

Shorter version for the common case.

Note
Implemented in derived class. Not a virtual function to avoid indirection.

Definition at line 787 of file draw_pass.hh.

References batch.

◆ draw() [2/2]

template<class T >
void blender::draw::detail::PassBase< T >::draw ( gpu::Batch * batch,
uint instance_len = -1,
uint vertex_len = -1,
uint vertex_first = -1,
ResourceHandle handle = {0},
uint custom_id = 0 )
inline

Record a draw call.

Note
Setting the count or first to -1 will use the values from the batch.
An instance or vertex count of 0 will discard the draw call. It will not be recorded.

Definition at line 760 of file draw_pass.hh.

References batch, BLI_assert, GPU_PRIM_NONE, and GPU_shader_uses_ssbo_vertex_fetch().

Referenced by blender::draw::overlay::Background::begin_sync(), blender::draw::overlay::Sculpts::curves_sync(), blender::draw::overlay::Curves::edit_object_sync(), blender::draw::overlay::GreasePencil::edit_object_sync(), blender::draw::overlay::Lattices::edit_object_sync(), blender::draw::overlay::Meshes::edit_object_sync(), blender::draw::overlay::MeshUVs::edit_object_sync(), blender::draw::overlay::Particles::edit_object_sync(), blender::draw::overlay::Curves::edit_object_sync_legacy(), blender::eevee::geometry_call(), blender::draw::overlay::Sculpts::mesh_sync(), blender::draw::overlay::Facing::object_sync(), blender::draw::overlay::Lattices::object_sync(), blender::draw::overlay::ModeTransfer::object_sync(), blender::draw::overlay::Outline::object_sync(), blender::draw::overlay::Paints::object_sync(), blender::draw::overlay::Particles::object_sync(), blender::draw::overlay::Wireframe::object_sync(), blender::draw::overlay::Prepass::particle_sync(), blender::draw::overlay::Prepass::sculpt_sync(), blender::eevee::SyncModule::sync_curves(), blender::eevee::ShadowModule::sync_object(), blender::eevee::SyncModule::sync_point_cloud(), blender::eevee::SyncModule::sync_volume(), and blender::eevee::volume_call().

◆ draw_expand() [1/2]

template<class T >
void blender::draw::detail::PassBase< T >::draw_expand ( gpu::Batch * batch,
GPUPrimType primitive_type,
uint primitive_len,
uint instance_len,
ResourceHandle handle = {0},
uint custom_id = 0 )
inline

Shorter version for the common case.

Note
Implemented in derived class. Not a virtual function to avoid indirection.

Definition at line 822 of file draw_pass.hh.

References batch.

◆ draw_expand() [2/2]

template<class T >
void blender::draw::detail::PassBase< T >::draw_expand ( gpu::Batch * batch,
GPUPrimType primitive_type,
uint primitive_len,
uint instance_len,
uint vertex_len = -1,
uint vertex_first = -1,
ResourceHandle handle = {0},
uint custom_id = 0 )
inline

Record a regular draw call but replaces each original primitive by a set of the given primitive. Geometry attributes are still sourced from a gpu::Batch, however, the attributes indexing needs to be done manually inside the shader.

Note
primitive_type and primitive_len must be baked into the shader and without using specialization constant!
A primitive_len count of 0 will discard the draw call. It will not be recorded.
vertex_len and vertex_first are relative to the original primitive list.
Only works for GPU_PRIM_POINTS, GPU_PRIM_LINES, GPU_PRIM_TRIS, GPU_PRIM_LINES_ADJ and GPU_PRIM_TRIS_ADJ original primitive types.

Definition at line 793 of file draw_pass.hh.

References batch, BLI_assert, and GPU_shader_uses_ssbo_vertex_fetch().

Referenced by blender::draw::overlay::Curves::edit_object_sync(), blender::draw::overlay::Meshes::edit_object_sync(), blender::draw::overlay::MeshUVs::edit_object_sync(), blender::draw::overlay::Curves::edit_object_sync_legacy(), blender::draw::overlay::Outline::object_sync(), blender::draw::overlay::Particles::object_sync(), and blender::workbench::ShadowPass::object_sync().

◆ draw_indirect()

template<class T >
void blender::draw::detail::PassBase< T >::draw_indirect ( gpu::Batch * batch,
StorageBuffer< DrawCommand, true > & indirect_buffer,
ResourceHandle handle = {0} )
inline

Indirect variants.

Note
If needed, the resource id need to also be set accordingly in the DrawCommand.

Definition at line 851 of file draw_pass.hh.

References batch, and BLI_assert.

◆ draw_procedural()

◆ draw_procedural_indirect()

template<class T >
void blender::draw::detail::PassBase< T >::draw_procedural_indirect ( GPUPrimType primitive,
StorageBuffer< DrawCommand, true > & indirect_buffer,
ResourceHandle handle = {0} )
inline

Definition at line 860 of file draw_pass.hh.

◆ framebuffer_set()

template<class T >
void blender::draw::detail::PassBase< T >::framebuffer_set ( GPUFrameBuffer ** framebuffer)
inline

Bind a framebuffer. This is equivalent to a deferred GPU_framebuffer_bind() call.

Note
Changes the global GPU state (outside of DRW).
Capture reference to the framebuffer so it can be initialized later.

Definition at line 977 of file draw_pass.hh.

Referenced by blender::draw::overlay::Background::begin_sync(), blender::eevee::ShadowModule::begin_sync(), blender::eevee::ShadowModule::end_sync(), blender::eevee::CapturePipeline::sync(), and blender::eevee::PlanarProbeModule::viewport_draw().

◆ init()

template<typename DrawCommandBufType >
void blender::draw::detail::PassBase< DrawCommandBufType >::init ( )

Reset the pass command pool.

Note
Implemented in derived class. Not a virtual function to avoid indirection. Here only for API readability listing.

◆ material_set()

template<class T >
void blender::draw::detail::PassBase< T >::material_set ( Manager & manager,
GPUMaterial * material )
inline

◆ procedural_batch_get()

◆ push_constant() [1/19]

template<class T >
void blender::draw::detail::PassBase< T >::push_constant ( const char * name,
const bool & data )
inline

◆ push_constant() [2/19]

template<class T >
void blender::draw::detail::PassBase< T >::push_constant ( const char * name,
const float & data )
inline

Update a shader constant.

Reference versions are to be used when the resource might change between the time it is referenced and the time it is dereferenced for drawing.

IMPORTANT: Will keep a reference to the data and dereference it upon drawing. Make sure data still alive until pass submission.

Note
bool reference version is expected to take bool32_t reference which is aliased to int.

Definition at line 1262 of file draw_pass.hh.

References blender::draw::detail::PassBase< DrawCommandBufType >::push_constant().

Referenced by blender::draw::overlay::Background::begin_sync(), blender::draw::overlay::Fade::begin_sync(), blender::draw::overlay::LightProbes::begin_sync(), blender::eevee::ShadowModule::begin_sync(), blender::draw::curves_cache_get(), blender::draw::overlay::Sculpts::curves_sync(), blender::eevee::ShadowModule::debug_end_sync(), blender::eevee::DeferredLayer::end_sync(), blender::eevee::ShadowModule::end_sync(), blender::eevee::VelocityModule::geometry_steps_fill(), blender::workbench::MeshPass::get_subpass(), blender::draw::hair_particle_cache_get(), blender::draw::overlay::Fluids::object_sync(), blender::draw::overlay::GreasePencil::object_sync(), blender::draw::overlay::LightProbes::object_sync(), blender::draw::overlay::ModeTransfer::object_sync(), blender::draw::overlay::Paints::object_sync(), blender::draw::overlay::Particles::object_sync(), blender::eevee::Precompute::Precompute(), blender::draw::detail::PassBase< DrawCommandBufType >::push_constant(), blender::draw::detail::PassBase< DrawCommandBufType >::push_constant(), blender::draw::detail::PassBase< DrawCommandBufType >::push_constant(), blender::draw::detail::PassBase< DrawCommandBufType >::push_constant(), blender::draw::detail::PassBase< DrawCommandBufType >::push_constant(), blender::draw::detail::PassBase< DrawCommandBufType >::push_constant(), blender::draw::detail::PassBase< DrawCommandBufType >::push_constant(), blender::draw::detail::PassBase< DrawCommandBufType >::push_constant(), blender::draw::detail::PassBase< DrawCommandBufType >::push_constant(), blender::draw::detail::PassBase< DrawCommandBufType >::push_constant(), blender::draw::detail::PassBase< DrawCommandBufType >::push_constant(), blender::draw::detail::PassBase< DrawCommandBufType >::push_constant(), blender::draw::detail::PassBase< DrawCommandBufType >::push_constant(), blender::draw::detail::PassBase< DrawCommandBufType >::push_constant(), blender::draw::detail::PassBase< DrawCommandBufType >::push_constant(), blender::draw::detail::PassBase< DrawCommandBufType >::push_constant(), blender::draw::detail::PassBase< DrawCommandBufType >::push_constant(), blender::draw::detail::PassBase< DrawCommandBufType >::push_constant(), blender::eevee::CapturePipeline::surface_material_add(), blender::eevee::AmbientOcclusion::sync(), blender::eevee::BackgroundPipeline::sync(), blender::eevee::Film::sync(), blender::eevee::IrradianceBake::sync(), blender::workbench::AntiAliasingPass::sync(), blender::workbench::DofPass::sync(), blender::workbench::OpaquePass::sync(), blender::draw::test_draw_pass_sub_ordering(), blender::eevee::PlanarProbeModule::viewport_draw(), and blender::eevee::Film::write_viewport_compositor_passes().

◆ push_constant() [3/19]

template<class T >
void blender::draw::detail::PassBase< T >::push_constant ( const char * name,
const float * data,
int array_len = 1 )
inline

◆ push_constant() [4/19]

template<class T >
void blender::draw::detail::PassBase< T >::push_constant ( const char * name,
const float2 & data )
inline

◆ push_constant() [5/19]

template<class T >
void blender::draw::detail::PassBase< T >::push_constant ( const char * name,
const float2 * data,
int array_len = 1 )
inline

◆ push_constant() [6/19]

template<class T >
void blender::draw::detail::PassBase< T >::push_constant ( const char * name,
const float3 & data )
inline

◆ push_constant() [7/19]

template<class T >
void blender::draw::detail::PassBase< T >::push_constant ( const char * name,
const float3 * data,
int array_len = 1 )
inline

◆ push_constant() [8/19]

template<class T >
void blender::draw::detail::PassBase< T >::push_constant ( const char * name,
const float4 & data )
inline

◆ push_constant() [9/19]

template<class T >
void blender::draw::detail::PassBase< T >::push_constant ( const char * name,
const float4 * data,
int array_len = 1 )
inline

◆ push_constant() [10/19]

◆ push_constant() [11/19]

template<class T >
void blender::draw::detail::PassBase< T >::push_constant ( const char * name,
const float4x4 * data )
inline

◆ push_constant() [12/19]

template<class T >
void blender::draw::detail::PassBase< T >::push_constant ( const char * name,
const int & data )
inline

◆ push_constant() [13/19]

template<class T >
void blender::draw::detail::PassBase< T >::push_constant ( const char * name,
const int * data,
int array_len = 1 )
inline

◆ push_constant() [14/19]

template<class T >
void blender::draw::detail::PassBase< T >::push_constant ( const char * name,
const int2 & data )
inline

◆ push_constant() [15/19]

template<class T >
void blender::draw::detail::PassBase< T >::push_constant ( const char * name,
const int2 * data,
int array_len = 1 )
inline

◆ push_constant() [16/19]

template<class T >
void blender::draw::detail::PassBase< T >::push_constant ( const char * name,
const int3 & data )
inline

◆ push_constant() [17/19]

template<class T >
void blender::draw::detail::PassBase< T >::push_constant ( const char * name,
const int3 * data,
int array_len = 1 )
inline

◆ push_constant() [18/19]

template<class T >
void blender::draw::detail::PassBase< T >::push_constant ( const char * name,
const int4 & data )
inline

◆ push_constant() [19/19]

template<class T >
void blender::draw::detail::PassBase< T >::push_constant ( const char * name,
const int4 * data,
int array_len = 1 )
inline

◆ push_constant_offset()

template<class T >
int blender::draw::detail::PassBase< T >::push_constant_offset ( const char * name)
inlineprotected

Internal Helpers

Definition at line 1046 of file draw_pass.hh.

References GPU_shader_get_uniform().

◆ serialize()

template<class T >
std::string blender::draw::detail::PassBase< T >::serialize ( std::string line_prefix = "") const

Turn the pass into a string for inspection.

Definition at line 690 of file draw_pass.hh.

References blender::Vector< T, InlineBufferCapacity, Allocator >::clear().

◆ shader_set()

template<class T >
void blender::draw::detail::PassBase< T >::shader_set ( GPUShader * shader)
inline

Bind a shader. Any following bind() or push_constant() call will use its interface.

Definition at line 971 of file draw_pass.hh.

Referenced by blender::draw::overlay::Armatures::begin_sync(), blender::draw::overlay::AttributeViewer::begin_sync(), blender::draw::overlay::Background::begin_sync(), blender::draw::overlay::Facing::begin_sync(), blender::draw::overlay::Fade::begin_sync(), blender::draw::overlay::Fluids::begin_sync(), blender::draw::overlay::GreasePencil::begin_sync(), blender::draw::overlay::Grid::begin_sync(), blender::draw::overlay::Lattices::begin_sync(), blender::draw::overlay::LightProbes::begin_sync(), blender::draw::overlay::ModeTransfer::begin_sync(), blender::draw::overlay::MotionPath::begin_sync(), blender::draw::overlay::Outline::begin_sync(), blender::draw::overlay::Particles::begin_sync(), blender::draw::overlay::Prepass::begin_sync(), blender::draw::overlay::Sculpts::begin_sync(), blender::eevee::ShadowModule::begin_sync(), blender::draw::curves_cache_get(), blender::eevee::ShadowModule::debug_end_sync(), blender::draw::overlay::Bounds::end_sync(), blender::draw::overlay::Cameras::end_sync(), blender::draw::overlay::Empties::end_sync(), blender::draw::overlay::Fluids::end_sync(), blender::draw::overlay::ForceFields::end_sync(), blender::draw::overlay::LightProbes::end_sync(), blender::draw::overlay::Lights::end_sync(), blender::draw::overlay::Metaballs::end_sync(), blender::draw::overlay::Origins::end_sync(), blender::draw::overlay::Relations::end_sync(), blender::draw::overlay::Speakers::end_sync(), blender::eevee::DeferredLayer::end_sync(), blender::eevee::ShadowModule::end_sync(), blender::eevee::VolumeModule::end_sync(), blender::workbench::StencilViewWorkaround::extract(), blender::eevee::VelocityModule::geometry_steps_fill(), blender::draw::hair_particle_cache_get(), blender::workbench::VolumePass::object_sync_modifier(), blender::workbench::VolumePass::object_sync_volume(), blender::eevee::Precompute::Precompute(), blender::eevee::VolumeLayer::render(), blender::eevee::CapturePipeline::surface_material_add(), blender::eevee::AmbientOcclusion::sync(), blender::eevee::BackgroundPipeline::sync(), blender::eevee::Film::sync(), blender::eevee::HiZBuffer::sync(), blender::eevee::IrradianceBake::sync(), blender::eevee::MotionBlurModule::sync(), blender::eevee::ShadowPipeline::sync(), blender::workbench::AntiAliasingPass::sync(), blender::workbench::DofPass::sync(), blender::workbench::OpaquePass::sync(), blender::workbench::OutlinePass::sync(), blender::workbench::ShadowPass::sync(), blender::workbench::TransparentDepthPass::sync(), blender::workbench::TransparentPass::sync(), blender::eevee::PlanarProbeModule::viewport_draw(), and blender::eevee::Film::write_viewport_compositor_passes().

◆ specialize_constant() [1/8]

template<class T >
void blender::draw::detail::PassBase< T >::specialize_constant ( GPUShader * shader,
const char * name,
const bool & data )
inline

◆ specialize_constant() [2/8]

template<class T >
void blender::draw::detail::PassBase< T >::specialize_constant ( GPUShader * shader,
const char * name,
const bool * data )
inline

◆ specialize_constant() [3/8]

template<class T >
void blender::draw::detail::PassBase< T >::specialize_constant ( GPUShader * shader,
const char * name,
const float & data )
inline

◆ specialize_constant() [4/8]

template<class T >
void blender::draw::detail::PassBase< T >::specialize_constant ( GPUShader * shader,
const char * name,
const float * data )
inline

◆ specialize_constant() [5/8]

template<class T >
void blender::draw::detail::PassBase< T >::specialize_constant ( GPUShader * shader,
const char * name,
const int & data )
inline

◆ specialize_constant() [6/8]

template<class T >
void blender::draw::detail::PassBase< T >::specialize_constant ( GPUShader * shader,
const char * name,
const int * data )
inline

◆ specialize_constant() [7/8]

template<class T >
void blender::draw::detail::PassBase< T >::specialize_constant ( GPUShader * shader,
const char * name,
const uint & data )
inline

◆ specialize_constant() [8/8]

template<class T >
void blender::draw::detail::PassBase< T >::specialize_constant ( GPUShader * shader,
const char * name,
const uint * data )
inline

◆ state_set()

template<class T >
void blender::draw::detail::PassBase< T >::state_set ( DRWState state,
int clip_plane_count = 0 )
inline

Changes the fixed function pipeline state. Starts as DRW_STATE_NO_DRAW at the start of a Pass submission. SubPass inherit previous pass state.

IMPORTANT: This does not set the stencil mask/reference values. Add a call to state_stencil() to ensure correct behavior of stencil aware draws.

TODO(fclem): clip_plane_count should be part of shader state.

Note
This is for compatibility with the old clip plane API.

Definition at line 954 of file draw_pass.hh.

References DRW_STATE_CLIP_PLANES, DRW_STATE_PROGRAM_POINT_SIZE, state, and blender::draw::detail::PassBase< DrawCommandBufType >::state_set().

Referenced by blender::draw::overlay::Armatures::begin_sync(), blender::draw::overlay::AttributeViewer::begin_sync(), blender::draw::overlay::Background::begin_sync(), blender::draw::overlay::Curves::begin_sync(), blender::draw::overlay::Empties::begin_sync(), blender::draw::overlay::Facing::begin_sync(), blender::draw::overlay::Fade::begin_sync(), blender::draw::overlay::Grid::begin_sync(), blender::draw::overlay::Lattices::begin_sync(), blender::draw::overlay::LightProbes::begin_sync(), blender::draw::overlay::ModeTransfer::begin_sync(), blender::draw::overlay::Paints::begin_sync(), blender::draw::overlay::Prepass::begin_sync(), blender::draw::overlay::Sculpts::begin_sync(), blender::eevee::DeferredLayer::begin_sync(), blender::eevee::DeferredProbePipeline::begin_sync(), blender::eevee::PlanarProbePipeline::begin_sync(), blender::eevee::ShadowModule::begin_sync(), blender::draw::curves_init(), blender::eevee::ShadowModule::debug_end_sync(), blender::draw::overlay::Bounds::end_sync(), blender::draw::overlay::Cameras::end_sync(), blender::draw::overlay::EditText::end_sync(), blender::draw::overlay::Empties::end_sync(), blender::draw::overlay::ForceFields::end_sync(), blender::draw::overlay::LightProbes::end_sync(), blender::draw::overlay::Lights::end_sync(), blender::draw::overlay::Metaballs::end_sync(), blender::draw::overlay::Origins::end_sync(), blender::draw::overlay::Relations::end_sync(), blender::draw::overlay::Speakers::end_sync(), blender::eevee::DeferredLayer::end_sync(), blender::eevee::ShadowModule::end_sync(), blender::eevee::VolumeModule::end_sync(), blender::workbench::StencilViewWorkaround::extract(), blender::eevee::DeferredLayerBase::gbuffer_pass_sync(), blender::eevee::VelocityModule::geometry_steps_fill(), blender::draw::hair_init(), blender::eevee::ForwardPipeline::material_transparent_add(), blender::eevee::ForwardPipeline::prepass_transparent_add(), blender::draw::select::SelectMap::select_bind(), blender::draw::detail::PassBase< DrawCommandBufType >::state_set(), blender::eevee::BackgroundPipeline::sync(), blender::eevee::CapturePipeline::sync(), blender::eevee::Film::sync(), blender::eevee::ForwardPipeline::sync(), blender::eevee::HiZBuffer::sync(), blender::eevee::ShadowPipeline::sync(), blender::eevee::VolumeLayer::sync(), blender::eevee::WorldVolumePipeline::sync(), blender::workbench::AntiAliasingPass::sync(), blender::workbench::DofPass::sync(), blender::workbench::OpaquePass::sync(), blender::workbench::OutlinePass::sync(), blender::workbench::ShadowPass::sync(), blender::workbench::TransparentDepthPass::sync(), blender::workbench::TransparentPass::sync(), and blender::eevee::PlanarProbeModule::viewport_draw().

◆ state_stencil()

template<class T >
void blender::draw::detail::PassBase< T >::state_stencil ( uint8_t write_mask,
uint8_t reference,
uint8_t compare_mask )
inline

Reminders:

  • compare_mask & reference is what is tested against compare_mask & stencil_value stencil_value being the value stored in the stencil buffer.
  • write-mask & reference is what gets written if the test condition is fulfilled.

This will modify the stencil state until another call to this function. If not specified before any draw-call, these states will be undefined.

For more information see: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkStencilOpState.html

Definition at line 966 of file draw_pass.hh.

Referenced by blender::eevee::ShadowModule::begin_sync(), blender::eevee::DeferredLayer::end_sync(), blender::workbench::StencilViewWorkaround::extract(), blender::eevee::DeferredLayer::material_add(), blender::workbench::AntiAliasingPass::sync(), blender::workbench::OpaquePass::sync(), blender::workbench::ShadowPass::sync(), blender::workbench::TransparentDepthPass::sync(), and blender::workbench::TransparentPass::sync().

◆ sub()

template<class T >
PassBase< T > & blender::draw::detail::PassBase< T >::sub ( const char * name)
inline

Create a sub-pass inside this pass.

Definition at line 616 of file draw_pass.hh.

References blender::Vector< T, InlineBufferCapacity, Allocator >::append(), and blender::draw::detail::SubPassVector< T, block_size >::append_and_get_index().

Referenced by blender::draw::overlay::Armatures::begin_sync(), blender::draw::overlay::AttributeViewer::begin_sync(), blender::draw::overlay::Curves::begin_sync(), blender::draw::overlay::Empties::begin_sync(), blender::draw::overlay::Fade::begin_sync(), blender::draw::overlay::Fluids::begin_sync(), blender::draw::overlay::GreasePencil::begin_sync(), blender::draw::overlay::Grid::begin_sync(), blender::draw::overlay::Lattices::begin_sync(), blender::draw::overlay::MotionPath::begin_sync(), blender::draw::overlay::Outline::begin_sync(), blender::draw::overlay::Paints::begin_sync(), blender::draw::overlay::Particles::begin_sync(), blender::draw::overlay::Prepass::begin_sync(), blender::draw::overlay::Sculpts::begin_sync(), blender::eevee::DeferredLayer::begin_sync(), blender::eevee::DeferredProbePipeline::begin_sync(), blender::eevee::PlanarProbePipeline::begin_sync(), blender::eevee::ShadowModule::begin_sync(), blender::draw::curves_cache_get(), blender::draw::overlay::Cameras::end_sync(), blender::draw::overlay::EditText::end_sync(), blender::draw::overlay::LightProbes::end_sync(), blender::draw::overlay::Lights::end_sync(), blender::draw::overlay::Relations::end_sync(), blender::eevee::DeferredLayer::end_sync(), blender::eevee::ShadowModule::end_sync(), blender::eevee::DeferredLayerBase::gbuffer_pass_sync(), blender::workbench::MeshPass::get_subpass(), blender::draw::hair_particle_cache_get(), blender::eevee::DeferredLayer::material_add(), blender::eevee::VolumeLayer::material_add(), blender::workbench::VolumePass::object_sync_modifier(), blender::workbench::VolumePass::object_sync_volume(), blender::eevee::VolumeLayer::occupancy_add(), blender::eevee::DeferredProbePipeline::prepass_add(), blender::eevee::PlanarProbePipeline::prepass_add(), blender::eevee::CapturePipeline::surface_material_add(), blender::eevee::ShadowPipeline::surface_material_add(), blender::eevee::ForwardPipeline::sync(), blender::eevee::IrradianceBake::sync(), blender::eevee::MotionBlurModule::sync(), blender::eevee::ShadowPipeline::sync(), blender::eevee::VolumeLayer::sync(), blender::workbench::ShadowPass::sync(), blender::eevee::SyncModule::sync_curves(), blender::eevee::SyncModule::sync_point_cloud(), blender::draw::test_draw_pass_simple_draw(), and blender::draw::test_draw_pass_sub_ordering().

◆ submit()

◆ subpass_transition()

template<class T >
void blender::draw::detail::PassBase< T >::subpass_transition ( GPUAttachmentState depth_attachment,
Span< GPUAttachmentState > color_attachments )
inline

Start a new sub-pass and change framebuffer attachments status.

Note
Affect the currently bound framebuffer at the time of submission and execution.
States are copied and stored in the command.

Definition at line 983 of file draw_pass.hh.

References GPU_ATTACHMENT_IGNORE, and blender::Span< T >::index_range().

Referenced by blender::eevee::DeferredLayer::end_sync(), blender::eevee::DeferredLayerBase::gbuffer_pass_sync(), and blender::eevee::ShadowPipeline::sync().

Friends And Related Symbol Documentation

◆ operator<<

template<typename DrawCommandBufType >
std::ostream & operator<< ( std::ostream & stream,
const PassBase< DrawCommandBufType > & pass )
friend

Definition at line 436 of file draw_pass.hh.

Member Data Documentation

◆ commands_

template<typename DrawCommandBufType >
Vector<command::Undetermined, 0> blender::draw::detail::PassBase< DrawCommandBufType >::commands_
protected

Commands referenced by headers (which contains their types).

Definition at line 134 of file draw_pass.hh.

◆ debug_name

template<typename DrawCommandBufType >
const char* blender::draw::detail::PassBase< DrawCommandBufType >::debug_name

Definition at line 143 of file draw_pass.hh.

◆ draw_commands_buf_

template<typename DrawCommandBufType >
DrawCommandBufType& blender::draw::detail::PassBase< DrawCommandBufType >::draw_commands_buf_
protected

Definition at line 136 of file draw_pass.hh.

◆ headers_

template<typename DrawCommandBufType >
Vector<command::Header, 0> blender::draw::detail::PassBase< DrawCommandBufType >::headers_
protected

Highest level of the command stream. Split command stream in different command types.

Definition at line 132 of file draw_pass.hh.

◆ shader_

template<typename DrawCommandBufType >
GPUShader* blender::draw::detail::PassBase< DrawCommandBufType >::shader_
protected

Currently bound shader. Used for interface queries.

Definition at line 140 of file draw_pass.hh.

◆ sub_passes_

template<typename DrawCommandBufType >
SubPassVector<PassBase<DrawCommandBufType> >& blender::draw::detail::PassBase< DrawCommandBufType >::sub_passes_
protected

Definition at line 138 of file draw_pass.hh.

◆ use_custom_ids

template<typename DrawCommandBufType >
bool blender::draw::detail::PassBase< DrawCommandBufType >::use_custom_ids

Definition at line 145 of file draw_pass.hh.


The documentation for this class was generated from the following files: