Blender V4.3
blender::gpu::VKShader Class Reference

#include <vk_shader.hh>

Inherits blender::gpu::Shader.

Public Member Functions

 VKShader (const char *name)
 
virtual ~VKShader ()
 
void init (const shader::ShaderCreateInfo &info, bool is_batch_compilation) override
 
void vertex_shader_from_glsl (MutableSpan< const char * > sources) override
 
void geometry_shader_from_glsl (MutableSpan< const char * > sources) override
 
void fragment_shader_from_glsl (MutableSpan< const char * > sources) override
 
void compute_shader_from_glsl (MutableSpan< const char * > sources) override
 
bool finalize (const shader::ShaderCreateInfo *info=nullptr) override
 
bool finalize_post ()
 
bool is_ready () const
 
void warm_cache (int limit) override
 
void bind () override
 
void unbind () override
 
void uniform_float (int location, int comp_len, int array_size, const float *data) override
 
void uniform_int (int location, int comp_len, int array_size, const int *data) override
 
std::string resources_declare (const shader::ShaderCreateInfo &info) const override
 
std::string vertex_interface_declare (const shader::ShaderCreateInfo &info) const override
 
std::string fragment_interface_declare (const shader::ShaderCreateInfo &info) const override
 
std::string geometry_interface_declare (const shader::ShaderCreateInfo &info) const override
 
std::string geometry_layout_declare (const shader::ShaderCreateInfo &info) const override
 
std::string compute_layout_declare (const shader::ShaderCreateInfo &info) const override
 
bool get_uses_ssbo_vertex_fetch () const override
 
int get_ssbo_vertex_fetch_output_num_verts () const override
 
int program_handle_get () const override
 
VkPipeline ensure_and_get_compute_pipeline ()
 
VkPipeline ensure_and_get_graphics_pipeline (GPUPrimType primitive, VKVertexAttributeObject &vao, VKStateManager &state_manager, VKFrameBuffer &framebuffer)
 
const VKShaderInterfaceinterface_get () const
 
bool has_descriptor_set () const
 
VkDescriptorSetLayout vk_descriptor_set_layout_get () const
 
Transform feedback

Not supported in the vulkan backend.

void transform_feedback_names_set (Span< const char * > name_list, eGPUShaderTFBType geom_type) override
 
bool transform_feedback_enable (VertBuf *) override
 
void transform_feedback_disable () override
 
- Public Member Functions inherited from blender::gpu::Shader
std::string defines_declare (const shader::ShaderCreateInfo &info) const
 
const char *const name_get () const
 
void parent_set (Shader *parent)
 
Shaderparent_get () const
 
 Shader (const char *name)
 
virtual ~Shader ()
 
void specialization_constants_init (const shader::ShaderCreateInfo &info)
 

Public Attributes

VKShaderModule vertex_module
 
VKShaderModule geometry_module
 
VKShaderModule fragment_module
 
VKShaderModule compute_module
 
bool compilation_finished = false
 
bool compilation_failed = false
 
VkPipelineLayout vk_pipeline_layout = VK_NULL_HANDLE
 
VKPushConstants push_constants
 
- Public Attributes inherited from blender::gpu::Shader
ShaderInterfaceinterface = nullptr
 
struct blender::gpu::Shader::Constants constants
 

Additional Inherited Members

- Static Public Member Functions inherited from blender::gpu::Shader
static bool srgb_uniform_dirty_get ()
 
static void set_srgb_uniform (GPUShader *shader)
 
static void set_framebuffer_srgb_target (int use_srgb_to_linear)
 
- Protected Member Functions inherited from blender::gpu::Shader
void print_log (Span< const char * > sources, const char *log, const char *stage, bool error, GPULogParser *parser)
 
- Protected Attributes inherited from blender::gpu::Shader
char name [64]
 
Shaderparent_shader_ = nullptr
 

Detailed Description

Definition at line 25 of file vk_shader.hh.

Constructor & Destructor Documentation

◆ VKShader()

blender::gpu::VKShader::VKShader ( const char * name)

Definition at line 493 of file vk_shader.cc.

References blender::gpu::VKContext::get().

◆ ~VKShader()

Member Function Documentation

◆ bind()

void blender::gpu::VKShader::bind ( )
overridevirtual

Implements blender::gpu::Shader.

Definition at line 729 of file vk_shader.cc.

◆ compute_layout_declare()

◆ compute_shader_from_glsl()

void blender::gpu::VKShader::compute_shader_from_glsl ( MutableSpan< const char * > sources)
overridevirtual

Implements blender::gpu::Shader.

Definition at line 556 of file vk_shader.cc.

References compute_module.

◆ ensure_and_get_compute_pipeline()

◆ ensure_and_get_graphics_pipeline()

VkPipeline blender::gpu::VKShader::ensure_and_get_graphics_pipeline ( GPUPrimType primitive,
VKVertexAttributeObject & vao,
VKStateManager & state_manager,
VKFrameBuffer & framebuffer )

Definition at line 1231 of file vk_shader.cc.

References blender::gpu::VKGraphicsInfo::VertexIn::attributes, blender::gpu::VKVertexAttributeObject::attributes, blender::gpu::VKGraphicsInfo::VertexIn::bindings, blender::gpu::VKVertexAttributeObject::bindings, BLI_assert, BLI_assert_msg, blender::Vector< T, InlineBufferCapacity, Allocator >::clear(), blender::gpu::VKGraphicsInfo::FragmentOut::color_attachment_formats, blender::gpu::VKFrameBuffer::color_attachment_formats_get(), blender::gpu::Shader::constants, blender::gpu::VKGraphicsInfo::FragmentOut::depth_attachment_format, blender::gpu::VKFrameBuffer::depth_attachment_format_get(), blender::gpu::VKBackend::device, blender::Vector< T, InlineBufferCapacity, Allocator >::extend(), fragment_module, blender::gpu::VKGraphicsInfo::fragment_out, blender::gpu::VKGraphicsInfo::fragment_shader, geometry_module, blender::gpu::VKBackend::get(), blender::gpu::VKPipelinePool::get_or_create_graphics_pipeline(), GPU_PRIM_POINTS, interface_get(), blender::gpu::StateManager::mutable_state, blender::gpu::VKGraphicsInfo::mutable_state, blender::gpu::VKDevice::pipelines, blender::gpu::VKGraphicsInfo::pre_rasterization, blender::gpu::VKGraphicsInfo::FragmentShader::scissors, blender::gpu::VKGraphicsInfo::specialization_constants, blender::gpu::StateManager::state, blender::gpu::VKGraphicsInfo::state, blender::gpu::VKGraphicsInfo::FragmentOut::stencil_attachment_format, blender::gpu::VKFrameBuffer::stencil_attachment_format_get(), blender::gpu::to_vk_primitive_topology(), blender::gpu::Shader::Constants::values, blender::gpu::VKGraphicsInfo::vertex_in, vertex_module, blender::gpu::VKGraphicsInfo::FragmentShader::viewports, blender::gpu::VKGraphicsInfo::FragmentShader::vk_fragment_module, blender::gpu::VKGraphicsInfo::PreRasterization::vk_geometry_module, blender::gpu::VKGraphicsInfo::vk_pipeline_layout, vk_pipeline_layout, blender::gpu::VKFrameBuffer::vk_render_areas_get(), blender::gpu::VKShaderModule::vk_shader_module, blender::gpu::VKGraphicsInfo::VertexIn::vk_topology, blender::gpu::VKGraphicsInfo::PreRasterization::vk_vertex_module, and blender::gpu::VKFrameBuffer::vk_viewports_get().

Referenced by blender::gpu::VKContext::update_pipeline_data().

◆ finalize()

◆ finalize_post()

bool blender::gpu::VKShader::finalize_post ( )

◆ fragment_interface_declare()

◆ fragment_shader_from_glsl()

void blender::gpu::VKShader::fragment_shader_from_glsl ( MutableSpan< const char * > sources)
overridevirtual

Implements blender::gpu::Shader.

Definition at line 551 of file vk_shader.cc.

References fragment_module.

◆ geometry_interface_declare()

◆ geometry_layout_declare()

◆ geometry_shader_from_glsl()

void blender::gpu::VKShader::geometry_shader_from_glsl ( MutableSpan< const char * > sources)
overridevirtual

Implements blender::gpu::Shader.

Definition at line 546 of file vk_shader.cc.

References geometry_module.

Referenced by finalize().

◆ get_ssbo_vertex_fetch_output_num_verts()

int blender::gpu::VKShader::get_ssbo_vertex_fetch_output_num_verts ( ) const
inlineoverridevirtual

Implements blender::gpu::Shader.

Definition at line 102 of file vk_shader.hh.

◆ get_uses_ssbo_vertex_fetch()

bool blender::gpu::VKShader::get_uses_ssbo_vertex_fetch ( ) const
inlineoverridevirtual

Implements blender::gpu::Shader.

Definition at line 98 of file vk_shader.hh.

◆ has_descriptor_set()

bool blender::gpu::VKShader::has_descriptor_set ( ) const
inline

Some shaders don't have a descriptor set and should not bind any descriptor set to the pipeline. This function can be used to determine if a descriptor set can be bound when this shader or one of its pipelines are active.

Definition at line 123 of file vk_shader.hh.

◆ init()

◆ interface_get()

const VKShaderInterface & blender::gpu::VKShader::interface_get ( ) const

◆ is_ready()

bool blender::gpu::VKShader::is_ready ( ) const

Check if needed compilation steps have been finished.

Returns true when all modules that needed compilation have finished their compilation steps. Compilations with errors are still considered finished. Returns false when compilation is still needed for one of the shader modules.

Definition at line 647 of file vk_shader.cc.

References compilation_finished.

◆ program_handle_get()

int blender::gpu::VKShader::program_handle_get ( ) const
overridevirtual

Implements blender::gpu::Shader.

Definition at line 1280 of file vk_shader.cc.

◆ resources_declare()

◆ transform_feedback_disable()

void blender::gpu::VKShader::transform_feedback_disable ( )
overridevirtual

Implements blender::gpu::Shader.

Definition at line 722 of file vk_shader.cc.

References BLI_assert_unreachable.

◆ transform_feedback_enable()

bool blender::gpu::VKShader::transform_feedback_enable ( VertBuf * )
overridevirtual

Implements blender::gpu::Shader.

Definition at line 717 of file vk_shader.cc.

◆ transform_feedback_names_set()

void blender::gpu::VKShader::transform_feedback_names_set ( Span< const char * > name_list,
eGPUShaderTFBType geom_type )
overridevirtual

Implements blender::gpu::Shader.

Definition at line 711 of file vk_shader.cc.

References BLI_assert_unreachable.

◆ unbind()

void blender::gpu::VKShader::unbind ( )
overridevirtual

Implements blender::gpu::Shader.

Definition at line 735 of file vk_shader.cc.

◆ uniform_float()

void blender::gpu::VKShader::uniform_float ( int location,
int comp_len,
int array_size,
const float * data )
overridevirtual

◆ uniform_int()

void blender::gpu::VKShader::uniform_int ( int location,
int comp_len,
int array_size,
const int * data )
overridevirtual

◆ vertex_interface_declare()

◆ vertex_shader_from_glsl()

void blender::gpu::VKShader::vertex_shader_from_glsl ( MutableSpan< const char * > sources)
overridevirtual

Implements blender::gpu::Shader.

Definition at line 541 of file vk_shader.cc.

References vertex_module.

◆ vk_descriptor_set_layout_get()

VkDescriptorSetLayout blender::gpu::VKShader::vk_descriptor_set_layout_get ( ) const
inline

Definition at line 128 of file vk_shader.hh.

◆ warm_cache()

void blender::gpu::VKShader::warm_cache ( int limit)
overridevirtual

Implements blender::gpu::Shader.

Definition at line 561 of file vk_shader.cc.

References NOT_YET_IMPLEMENTED.

Member Data Documentation

◆ compilation_failed

bool blender::gpu::VKShader::compilation_failed = false

Definition at line 52 of file vk_shader.hh.

Referenced by finalize().

◆ compilation_finished

bool blender::gpu::VKShader::compilation_finished = false

Definition at line 51 of file vk_shader.hh.

Referenced by finalize(), and is_ready().

◆ compute_module

VKShaderModule blender::gpu::VKShader::compute_module

◆ fragment_module

VKShaderModule blender::gpu::VKShader::fragment_module

◆ geometry_module

VKShaderModule blender::gpu::VKShader::geometry_module

◆ push_constants

VKPushConstants blender::gpu::VKShader::push_constants

Definition at line 55 of file vk_shader.hh.

Referenced by finalize(), uniform_float(), and uniform_int().

◆ vertex_module

VKShaderModule blender::gpu::VKShader::vertex_module

◆ vk_pipeline_layout

VkPipelineLayout blender::gpu::VKShader::vk_pipeline_layout = VK_NULL_HANDLE

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