|
Blender V5.0
|
#include <mtl_shader_interface.hh>
Inherits blender::gpu::ShaderInterface.
Public Member Functions | |
| MTLShaderInterface (const char *name) | |
| ~MTLShaderInterface () override | |
| void | init () |
| void | add_input_attribute (uint32_t name_offset, uint32_t attribute_location, MTLVertexFormat format, uint32_t buffer_index, uint32_t size, uint32_t offset, int matrix_element_count=1) |
| uint32_t | add_uniform_block (uint32_t name_offset, uint32_t buffer_index, uint32_t location, uint32_t size, ShaderStage stage_mask=ShaderStage::ANY) |
| uint32_t | add_storage_block (uint32_t name_offset, uint32_t buffer_index, uint32_t location, uint32_t size, ShaderStage stage_mask=ShaderStage::ANY) |
| void | add_uniform (uint32_t name_offset, MTLInterfaceDataType type, int array_len=1) |
| void | add_texture (uint32_t name_offset, uint32_t texture_slot, uint32_t location, GPUTextureType tex_binding_type, GPUSamplerFormat sampler_format, bool is_texture_sampler, ShaderStage stage_mask=ShaderStage::FRAGMENT, int tex_buffer_ssbo_location=-1) |
| void | add_push_constant_block (uint32_t name_offset) |
| void | add_constant (uint32_t name_offset) |
| void | map_builtins () |
| void | set_sampler_properties (bool use_argument_buffer, uint32_t argument_buffer_bind_index_vert, uint32_t argument_buffer_bind_index_frag, uint32_t argument_buffer_bind_index_compute) |
| void | prepare_common_shader_inputs (const shader::ShaderCreateInfo *info=nullptr) |
| const MTLShaderUniform & | get_uniform (uint index) const |
| uint32_t | get_total_uniforms () const |
| uint32_t | get_total_constants () const |
| const MTLShaderBufferBlock & | get_uniform_block (uint index) const |
| uint32_t | get_total_uniform_blocks () const |
| bool | has_uniform_block (uint32_t block_index) const |
| uint32_t | get_uniform_block_size (uint32_t block_index) const |
| const MTLShaderBufferBlock & | get_storage_block (uint index) const |
| uint32_t | get_total_storage_blocks () const |
| bool | has_storage_block (uint32_t block_index) const |
| uint32_t | get_storage_block_size (uint32_t block_index) const |
| const MTLShaderBufferBlock & | get_push_constant_block () const |
| uint32_t | get_max_buffer_index () const |
| const MTLShaderTexture & | get_texture (uint index) const |
| uint32_t | get_total_textures () const |
| uint32_t | get_max_texture_index () const |
| bool | uses_argument_buffer_for_samplers () const |
| int | get_argument_buffer_bind_index (ShaderStage stage) const |
| const MTLShaderInputAttribute & | get_attribute (uint index) const |
| uint32_t | get_total_attributes () const |
| uint32_t | get_total_vertex_stride () const |
| uint32_t | get_enabled_attribute_mask () const |
| const char * | get_name_at_offset (uint32_t offset) const |
| const char * | get_name () const |
| id< MTLArgumentEncoder > | find_argument_encoder (int buffer_index) const |
| void | insert_argument_encoder (int buffer_index, id encoder) |
| MEM_CXX_CLASS_ALLOC_FUNCS ("MTLShaderInterface") | |
| Public Member Functions inherited from blender::gpu::ShaderInterface | |
| ShaderInterface () | |
| virtual | ~ShaderInterface () |
| void | debug_print () const |
| const ShaderInput * | attr_get (const StringRefNull name) const |
| const ShaderInput * | attr_get (const int binding) const |
| const ShaderInput * | ubo_get (const StringRefNull name) const |
| const ShaderInput * | ubo_get (const int binding) const |
| const ShaderInput * | uniform_get (const StringRefNull name) const |
| const ShaderInput * | texture_get (const int binding) const |
| const ShaderInput * | ssbo_get (const StringRefNull name) const |
| const ShaderInput * | ssbo_get (const int binding) const |
| const ShaderInput * | constant_get (const StringRefNull name) const |
| const char * | input_name_get (const ShaderInput *input) const |
| int32_t | uniform_builtin (const GPUUniformBuiltin builtin) const |
| int32_t | ubo_builtin (const GPUUniformBlockBuiltin builtin) const |
| uint | valid_bindings_get (const ShaderInput *const inputs, const uint inputs_len) const |
Implementation of Shader interface for Metal Back-end.
Definition at line 167 of file mtl_shader_interface.hh.
| blender::gpu::MTLShaderInterface::MTLShaderInterface | ( | const char * | name | ) |
Definition at line 27 of file mtl_shader_interface.mm.
References init(), blender::gpu::ShaderInterface::inputs_, and STRNCPY().
|
override |
Definition at line 41 of file mtl_shader_interface.mm.
References i.
| void blender::gpu::MTLShaderInterface::add_constant | ( | uint32_t | name_offset | ) |
Definition at line 262 of file mtl_shader_interface.mm.
References blender::gpu::MTLShaderConstant::name_offset.
| void blender::gpu::MTLShaderInterface::add_input_attribute | ( | uint32_t | name_offset, |
| uint32_t | attribute_location, | ||
| MTLVertexFormat | format, | ||
| uint32_t | buffer_index, | ||
| uint32_t | size, | ||
| uint32_t | offset, | ||
| int | matrix_element_count = 1 ) |
Definition at line 93 of file mtl_shader_interface.mm.
References blender::gpu::MTLShaderInputAttribute::buffer_index, blender::gpu::MTLShaderInputAttribute::format, blender::gpu::MTLShaderInputAttribute::index, blender::gpu::MTLShaderInputAttribute::location, blender::gpu::MTLShaderInputAttribute::matrix_element_count, max_ii(), blender::gpu::MTLShaderInputAttribute::name_offset, blender::gpu::MTLShaderInputAttribute::offset, blender::gpu::MTLShaderInputAttribute::size, and size().
| void blender::gpu::MTLShaderInterface::add_push_constant_block | ( | uint32_t | name_offset | ) |
Definition at line 163 of file mtl_shader_interface.mm.
References blender::gpu::ANY.
| uint32_t blender::gpu::MTLShaderInterface::add_storage_block | ( | uint32_t | name_offset, |
| uint32_t | buffer_index, | ||
| uint32_t | location, | ||
| uint32_t | size, | ||
| ShaderStage | stage_mask = ShaderStage::ANY ) |
Definition at line 139 of file mtl_shader_interface.mm.
References blender::gpu::ANY, BLI_assert, blender::gpu::MTLShaderBufferBlock::buffer_index, blender::gpu::MTLShaderBufferBlock::current_offset, blender::gpu::MTLShaderBufferBlock::location, max_ii(), MTL_MAX_BUFFER_BINDINGS, blender::gpu::MTLShaderBufferBlock::name_offset, blender::gpu::MTLShaderBufferBlock::size, size(), and blender::gpu::MTLShaderBufferBlock::stage_mask.
| void blender::gpu::MTLShaderInterface::add_texture | ( | uint32_t | name_offset, |
| uint32_t | texture_slot, | ||
| uint32_t | location, | ||
| GPUTextureType | tex_binding_type, | ||
| GPUSamplerFormat | sampler_format, | ||
| bool | is_texture_sampler, | ||
| ShaderStage | stage_mask = ShaderStage::FRAGMENT, | ||
| int | tex_buffer_ssbo_location = -1 ) |
Definition at line 225 of file mtl_shader_interface.mm.
References BLI_assert, BLI_assert_msg, GPU_max_textures(), blender::gpu::GPU_SAMPLER_TYPE_MAX, blender::gpu::MTLShaderTexture::is_texture_sampler, blender::gpu::MTLShaderTexture::location, max_ii(), MTL_LOG_WARNING, blender::gpu::MTLShaderTexture::name_offset, blender::gpu::MTLShaderTexture::sampler_format, blender::gpu::MTLShaderTexture::slot_index, blender::gpu::MTLShaderTexture::stage_mask, blender::gpu::MTLShaderTexture::texture_buffer_ssbo_location, blender::gpu::MTLShaderTexture::type, and blender::gpu::MTLShaderTexture::used.
| void blender::gpu::MTLShaderInterface::add_uniform | ( | uint32_t | name_offset, |
| MTLInterfaceDataType | type, | ||
| int | array_len = 1 ) |
Definition at line 175 of file mtl_shader_interface.mm.
References blender::gpu::MTLShaderUniform::array_len, BLI_assert, BLI_assert_msg, blender::gpu::MTLShaderUniform::byte_offset, mtl_get_data_type_alignment(), mtl_get_data_type_size(), MTL_LOG_WARNING, MTL_MAX_UNIFORMS_PER_BLOCK, blender::gpu::MTLShaderUniform::name_offset, blender::gpu::MTLShaderUniform::size_in_bytes, and blender::gpu::MTLShaderUniform::type.
| uint32_t blender::gpu::MTLShaderInterface::add_uniform_block | ( | uint32_t | name_offset, |
| uint32_t | buffer_index, | ||
| uint32_t | location, | ||
| uint32_t | size, | ||
| ShaderStage | stage_mask = ShaderStage::ANY ) |
Definition at line 115 of file mtl_shader_interface.mm.
References blender::gpu::ANY, BLI_assert, blender::gpu::MTLShaderBufferBlock::buffer_index, blender::gpu::MTLShaderBufferBlock::current_offset, blender::gpu::MTLShaderBufferBlock::location, max_ii(), MTL_MAX_BUFFER_BINDINGS, blender::gpu::MTLShaderBufferBlock::name_offset, blender::gpu::MTLShaderBufferBlock::size, size(), and blender::gpu::MTLShaderBufferBlock::stage_mask.
| id< MTLArgumentEncoder > blender::gpu::MTLShaderInterface::find_argument_encoder | ( | int | buffer_index | ) | const |
Definition at line 613 of file mtl_shader_interface.mm.
References i.
Referenced by blender::gpu::MTLContext::ensure_texture_bindings(), and blender::gpu::MTLContext::ensure_texture_bindings().
| int blender::gpu::MTLShaderInterface::get_argument_buffer_bind_index | ( | ShaderStage | stage | ) | const |
Definition at line 608 of file mtl_shader_interface.mm.
References blender::gpu::get_shader_stage_index().
Referenced by blender::gpu::MTLShader::bake_pipeline_state(), blender::gpu::MTLContext::ensure_texture_bindings(), and blender::gpu::MTLContext::ensure_texture_bindings().
| const MTLShaderInputAttribute & blender::gpu::MTLShaderInterface::get_attribute | ( | uint | index | ) | const |
Definition at line 488 of file mtl_shader_interface.mm.
References BLI_assert, get_total_attributes(), and MTL_MAX_VERTEX_INPUT_ATTRIBUTES.
Referenced by blender::gpu::MTLShader::bake_pipeline_state().
| uint32_t blender::gpu::MTLShaderInterface::get_enabled_attribute_mask | ( | ) | const |
Definition at line 510 of file mtl_shader_interface.mm.
| uint32_t blender::gpu::MTLShaderInterface::get_max_buffer_index | ( | ) | const |
Definition at line 579 of file mtl_shader_interface.mm.
References get_total_storage_blocks(), and get_total_uniform_blocks().
| uint32_t blender::gpu::MTLShaderInterface::get_max_texture_index | ( | ) | const |
Definition at line 598 of file mtl_shader_interface.mm.
Referenced by blender::gpu::MTLContext::ensure_texture_bindings(), blender::gpu::MTLContext::ensure_texture_bindings(), and get_texture().
|
inline |
Definition at line 304 of file mtl_shader_interface.hh.
Referenced by blender::gpu::MTLShader::bake_pipeline_state(), blender::gpu::MTLImmediate::end(), blender::gpu::MTLContext::ensure_buffer_bindings(), blender::gpu::MTLContext::ensure_buffer_bindings(), blender::gpu::MTLContext::ensure_render_pipeline_state(), blender::gpu::MTLContext::ensure_texture_bindings(), and blender::gpu::MTLContext::ensure_texture_bindings().
| const char * blender::gpu::MTLShaderInterface::get_name_at_offset | ( | uint32_t | offset | ) | const |
Definition at line 51 of file mtl_shader_interface.mm.
References blender::gpu::ShaderInterface::name_buffer_.
Referenced by blender::gpu::MTLShader::bake_pipeline_state(), blender::gpu::MTLContext::ensure_buffer_bindings(), blender::gpu::MTLContext::ensure_buffer_bindings(), blender::gpu::MTLContext::ensure_texture_bindings(), blender::gpu::MTLContext::ensure_texture_bindings(), map_builtins(), and prepare_common_shader_inputs().
| const MTLShaderBufferBlock & blender::gpu::MTLShaderInterface::get_push_constant_block | ( | ) | const |
Definition at line 536 of file mtl_shader_interface.mm.
Referenced by blender::gpu::MTLContext::ensure_buffer_bindings(), blender::gpu::MTLContext::ensure_buffer_bindings(), and blender::gpu::MTLShader::finalize().
| const MTLShaderBufferBlock & blender::gpu::MTLShaderInterface::get_storage_block | ( | uint | index | ) | const |
Definition at line 557 of file mtl_shader_interface.mm.
References BLI_assert, get_total_storage_blocks(), and MTL_MAX_BUFFER_BINDINGS.
Referenced by blender::gpu::MTLContext::ensure_buffer_bindings(), and blender::gpu::MTLContext::ensure_buffer_bindings().
| uint32_t blender::gpu::MTLShaderInterface::get_storage_block_size | ( | uint32_t | block_index | ) | const |
Definition at line 574 of file mtl_shader_interface.mm.
| const MTLShaderTexture & blender::gpu::MTLShaderInterface::get_texture | ( | uint | index | ) | const |
Definition at line 586 of file mtl_shader_interface.mm.
References BLI_assert, get_max_texture_index(), and MTL_MAX_TEXTURE_SLOTS.
Referenced by blender::gpu::MTLContext::ensure_texture_bindings(), and blender::gpu::MTLContext::ensure_texture_bindings().
| uint32_t blender::gpu::MTLShaderInterface::get_total_attributes | ( | ) | const |
Definition at line 495 of file mtl_shader_interface.mm.
Referenced by blender::gpu::MTLShader::bake_pipeline_state(), get_attribute(), and prepare_common_shader_inputs().
| uint32_t blender::gpu::MTLShaderInterface::get_total_constants | ( | ) | const |
Definition at line 500 of file mtl_shader_interface.mm.
Referenced by prepare_common_shader_inputs().
| uint32_t blender::gpu::MTLShaderInterface::get_total_storage_blocks | ( | ) | const |
Definition at line 564 of file mtl_shader_interface.mm.
Referenced by blender::gpu::MTLContext::ensure_buffer_bindings(), blender::gpu::MTLContext::ensure_buffer_bindings(), get_max_buffer_index(), get_storage_block(), and prepare_common_shader_inputs().
| uint32_t blender::gpu::MTLShaderInterface::get_total_textures | ( | ) | const |
Definition at line 593 of file mtl_shader_interface.mm.
Referenced by blender::gpu::MTLContext::compute_dispatch(), blender::gpu::MTLContext::compute_dispatch_indirect(), blender::gpu::MTLContext::ensure_render_pipeline_state(), prepare_common_shader_inputs(), and blender::gpu::MTLShader::uniform_int().
| uint32_t blender::gpu::MTLShaderInterface::get_total_uniform_blocks | ( | ) | const |
Definition at line 541 of file mtl_shader_interface.mm.
Referenced by blender::gpu::MTLShader::bake_compute_pipeline_state(), blender::gpu::MTLShader::bake_pipeline_state(), blender::gpu::MTLContext::ensure_buffer_bindings(), blender::gpu::MTLContext::ensure_buffer_bindings(), get_max_buffer_index(), get_uniform_block(), and prepare_common_shader_inputs().
| uint32_t blender::gpu::MTLShaderInterface::get_total_uniforms | ( | ) | const |
Definition at line 523 of file mtl_shader_interface.mm.
Referenced by get_uniform(), prepare_common_shader_inputs(), blender::gpu::MTLShader::uniform_float(), and blender::gpu::MTLShader::uniform_int().
| uint32_t blender::gpu::MTLShaderInterface::get_total_vertex_stride | ( | ) | const |
Definition at line 505 of file mtl_shader_interface.mm.
| const MTLShaderUniform & blender::gpu::MTLShaderInterface::get_uniform | ( | uint | index | ) | const |
Definition at line 516 of file mtl_shader_interface.mm.
References BLI_assert, get_total_uniforms(), and MTL_MAX_UNIFORMS_PER_BLOCK.
Referenced by blender::gpu::MTLShader::uniform_float(), and blender::gpu::MTLShader::uniform_int().
| const MTLShaderBufferBlock & blender::gpu::MTLShaderInterface::get_uniform_block | ( | uint | index | ) | const |
Definition at line 529 of file mtl_shader_interface.mm.
References BLI_assert, get_total_uniform_blocks(), and MTL_MAX_BUFFER_BINDINGS.
Referenced by blender::gpu::MTLContext::ensure_buffer_bindings(), and blender::gpu::MTLContext::ensure_buffer_bindings().
| uint32_t blender::gpu::MTLShaderInterface::get_uniform_block_size | ( | uint32_t | block_index | ) | const |
Definition at line 551 of file mtl_shader_interface.mm.
| bool blender::gpu::MTLShaderInterface::has_storage_block | ( | uint32_t | block_index | ) | const |
Definition at line 569 of file mtl_shader_interface.mm.
| bool blender::gpu::MTLShaderInterface::has_uniform_block | ( | uint32_t | block_index | ) | const |
Definition at line 546 of file mtl_shader_interface.mm.
| void blender::gpu::MTLShaderInterface::init | ( | ) |
Definition at line 56 of file mtl_shader_interface.mm.
References ARRAY_SIZE, blender::gpu::ShaderInterface::builtin_blocks_, blender::gpu::ShaderInterface::builtins_, GPU_NUM_UNIFORM_BLOCKS, GPU_NUM_UNIFORMS, i, and MTL_MAX_TEXTURE_SLOTS.
Referenced by MTLShaderInterface().
| void blender::gpu::MTLShaderInterface::insert_argument_encoder | ( | int | buffer_index, |
| id | encoder ) |
Definition at line 622 of file mtl_shader_interface.mm.
References i, and MTL_LOG_WARNING.
Referenced by blender::gpu::MTLContext::ensure_texture_bindings(), and blender::gpu::MTLContext::ensure_texture_bindings().
| void blender::gpu::MTLShaderInterface::map_builtins | ( | ) |
Definition at line 270 of file mtl_shader_interface.mm.
References blender::gpu::ShaderInput::binding, BLI_assert, blender::gpu::ShaderInterface::builtin_blocks_, blender::gpu::ShaderInterface::builtin_uniform_block_name(), blender::gpu::ShaderInterface::builtin_uniform_name(), blender::gpu::ShaderInterface::builtins_, get_name_at_offset(), GPU_NUM_UNIFORM_BLOCKS, GPU_NUM_UNIFORMS, blender::gpu::ShaderInput::location, MTL_LOG_DEBUG, blender::gpu::ShaderInput::name_offset, blender::gpu::ShaderInterface::ubo_get(), and blender::gpu::ShaderInterface::uniform_get().
Referenced by prepare_common_shader_inputs().
| blender::gpu::MTLShaderInterface::MEM_CXX_CLASS_ALLOC_FUNCS | ( | "MTLShaderInterface" | ) |
| void blender::gpu::MTLShaderInterface::prepare_common_shader_inputs | ( | const shader::ShaderCreateInfo * | info = nullptr | ) |
Definition at line 312 of file mtl_shader_interface.mm.
References blender::gpu::ShaderInterface::attr_len_, blender::gpu::shader::ShaderCreateInfo::Resource::bind_type, blender::gpu::ShaderInput::binding, BLI_assert, BLI_assert_msg, BLI_hash_string(), BLI_snprintf(), blender::gpu::MTLShaderTexture::buffer_metadata_uniform_loc, blender::gpu::ShaderInterface::constant_len_, blender::gpu::shader::ShaderCreateInfo::geometry_resources_, get_name_at_offset(), get_total_attributes(), get_total_constants(), get_total_storage_blocks(), get_total_textures(), get_total_uniform_blocks(), get_total_uniforms(), blender::gpu::ShaderInterface::inputs_, blender::gpu::MTLShaderBufferBlock::location, blender::gpu::MTLShaderInputAttribute::location, blender::gpu::MTLShaderTexture::location, blender::gpu::ShaderInput::location, map_builtins(), MEM_calloc_arrayN(), blender::gpu::ShaderInput::name_hash, blender::gpu::MTLShaderBufferBlock::name_offset, blender::gpu::MTLShaderConstant::name_offset, blender::gpu::MTLShaderInputAttribute::name_offset, blender::gpu::MTLShaderTexture::name_offset, blender::gpu::MTLShaderUniform::name_offset, blender::gpu::ShaderInput::name_offset, blender::gpu::ShaderInterface::set_image_formats_from_info(), blender::gpu::shader::ShaderCreateInfo::Resource::slot, blender::gpu::MTLShaderTexture::slot_index, blender::gpu::ShaderInterface::sort_inputs(), blender::gpu::ShaderInterface::ssbo_attr_mask_, blender::gpu::ShaderInterface::ssbo_len_, blender::gpu::shader::ShaderCreateInfo::Resource::STORAGE_BUFFER, blender::gpu::MTLShaderTexture::texture_buffer_ssbo_location, blender::gpu::ShaderInterface::ubo_len_, blender::gpu::ShaderInterface::uniform_get(), blender::gpu::ShaderInterface::uniform_len_, and blender::gpu::MTLShaderTexture::used.
| void blender::gpu::MTLShaderInterface::set_sampler_properties | ( | bool | use_argument_buffer, |
| uint32_t | argument_buffer_bind_index_vert, | ||
| uint32_t | argument_buffer_bind_index_frag, | ||
| uint32_t | argument_buffer_bind_index_compute ) |
Definition at line 473 of file mtl_shader_interface.mm.
References blender::gpu::COMPUTE, blender::gpu::FRAGMENT, blender::gpu::get_shader_stage_index(), and blender::gpu::VERTEX.
| bool blender::gpu::MTLShaderInterface::uses_argument_buffer_for_samplers | ( | ) | const |
Definition at line 603 of file mtl_shader_interface.mm.
Referenced by blender::gpu::MTLShader::bake_pipeline_state(), blender::gpu::MTLContext::ensure_texture_bindings(), and blender::gpu::MTLContext::ensure_texture_bindings().