Blender V5.0
blender::gpu::VKStateManager Class Reference

#include <vk_state_manager.hh>

Inherits blender::gpu::StateManager.

Public Member Functions

void apply_state () override
void force_state () override
void issue_barrier (GPUBarrier barrier_bits) override
void texture_bind (Texture *tex, GPUSamplerState sampler, int unit) override
void texture_unbind (Texture *tex) override
void texture_unbind_all () override
void image_bind (Texture *tex, int unit) override
void image_unbind (Texture *tex) override
void image_unbind_all () override
void uniform_buffer_bind (VKUniformBuffer *uniform_buffer, int slot)
void uniform_buffer_unbind (VKUniformBuffer *uniform_buffer)
void uniform_buffer_unbind_all ()
void texel_buffer_bind (VKVertexBuffer &vertex_buffer, int slot)
void texel_buffer_unbind (VKVertexBuffer &vertex_buffer)
void storage_buffer_bind (BindSpaceStorageBuffers::Type resource_type, void *resource, int binding)
void storage_buffer_bind (BindSpaceStorageBuffers::Type resource_type, void *resource, int binding, VkDeviceSize offset)
void storage_buffer_unbind (void *resource)
void storage_buffer_unbind_all ()
void texture_unpack_row_length_set (uint len) override
uint texture_unpack_row_length_get () const
Public Member Functions inherited from blender::gpu::StateManager
virtual ~StateManager ()=default
 StateManager ()

Public Attributes

bool is_dirty = false
Public Attributes inherited from blender::gpu::StateManager
GPUState state
GPUStateMutable mutable_state
std::array< TextureWriteFormat, GPU_MAX_IMAGEimage_formats

Friends

class VKDescriptorSetUpdator

Detailed Description

Definition at line 217 of file vk_state_manager.hh.

Member Function Documentation

◆ apply_state()

void blender::gpu::VKStateManager::apply_state ( )
overridevirtual

Implements blender::gpu::StateManager.

Definition at line 21 of file vk_state_manager.cc.

◆ force_state()

void blender::gpu::VKStateManager::force_state ( )
overridevirtual

Implements blender::gpu::StateManager.

Definition at line 27 of file vk_state_manager.cc.

◆ image_bind()

void blender::gpu::VKStateManager::image_bind ( Texture * tex,
int unit )
overridevirtual

◆ image_unbind()

void blender::gpu::VKStateManager::image_unbind ( Texture * tex)
overridevirtual

Implements blender::gpu::StateManager.

Definition at line 81 of file vk_state_manager.cc.

References is_dirty, texture(), and blender::gpu::unwrap().

◆ image_unbind_all()

void blender::gpu::VKStateManager::image_unbind_all ( )
overridevirtual

◆ issue_barrier()

void blender::gpu::VKStateManager::issue_barrier ( GPUBarrier barrier_bits)
overridevirtual

Workaround for EEVEE ThicknessFromShadow shader.

EEVEE light evaluation uses layered sub-pass tracking. Currently, the tracking supports transitioning a layer to a different layout once per rendering scope. When using the thickness from shadow, the layers need to be transitioned twice: once to image load/store for the thickness from shadow shader and then to a sampler for the light evaluation shader. We work around this limitation by suspending the rendering.

The reason we need to suspend the rendering is that Vulkan, by default, doesn't support layout transitions between the begin and end of rendering. By suspending the render, the graph will create a new node group that allows the necessary image layout transition.

This limitation could also be addressed in the render graph scheduler, but that would be quite a hassle to track and might not be worth the effort.

Implements blender::gpu::StateManager.

Definition at line 32 of file vk_state_manager.cc.

References blender::gpu::VKContext::get(), and GPU_BARRIER_SHADER_IMAGE_ACCESS.

◆ storage_buffer_bind() [1/2]

void blender::gpu::VKStateManager::storage_buffer_bind ( BindSpaceStorageBuffers::Type resource_type,
void * resource,
int binding )
inline

◆ storage_buffer_bind() [2/2]

void blender::gpu::VKStateManager::storage_buffer_bind ( BindSpaceStorageBuffers::Type resource_type,
void * resource,
int binding,
VkDeviceSize offset )

Definition at line 128 of file vk_state_manager.cc.

References is_dirty, and resource.

◆ storage_buffer_unbind()

void blender::gpu::VKStateManager::storage_buffer_unbind ( void * resource)

Definition at line 137 of file vk_state_manager.cc.

References is_dirty, and resource.

Referenced by blender::gpu::VKUniformBuffer::unbind().

◆ storage_buffer_unbind_all()

void blender::gpu::VKStateManager::storage_buffer_unbind_all ( )

Definition at line 143 of file vk_state_manager.cc.

References is_dirty.

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

◆ texel_buffer_bind()

void blender::gpu::VKStateManager::texel_buffer_bind ( VKVertexBuffer & vertex_buffer,
int slot )

◆ texel_buffer_unbind()

void blender::gpu::VKStateManager::texel_buffer_unbind ( VKVertexBuffer & vertex_buffer)

Definition at line 122 of file vk_state_manager.cc.

References is_dirty.

◆ texture_bind()

void blender::gpu::VKStateManager::texture_bind ( Texture * tex,
GPUSamplerState sampler,
int unit )
overridevirtual

◆ texture_unbind()

void blender::gpu::VKStateManager::texture_unbind ( Texture * tex)
overridevirtual

Implements blender::gpu::StateManager.

Definition at line 62 of file vk_state_manager.cc.

References is_dirty, and texture().

◆ texture_unbind_all()

void blender::gpu::VKStateManager::texture_unbind_all ( )
overridevirtual

Implements blender::gpu::StateManager.

Definition at line 68 of file vk_state_manager.cc.

References is_dirty.

◆ texture_unpack_row_length_get()

uint blender::gpu::VKStateManager::texture_unpack_row_length_get ( ) const

Row length for unpacking host data when uploading texture data.

When set to zero (0) host data can be assumed to be stored sequentially.

Definition at line 154 of file vk_state_manager.cc.

◆ texture_unpack_row_length_set()

void blender::gpu::VKStateManager::texture_unpack_row_length_set ( uint len)
overridevirtual

Implements blender::gpu::StateManager.

Definition at line 149 of file vk_state_manager.cc.

References len.

◆ uniform_buffer_bind()

void blender::gpu::VKStateManager::uniform_buffer_bind ( VKUniformBuffer * uniform_buffer,
int slot )

Definition at line 95 of file vk_state_manager.cc.

References is_dirty.

◆ uniform_buffer_unbind()

void blender::gpu::VKStateManager::uniform_buffer_unbind ( VKUniformBuffer * uniform_buffer)

Definition at line 101 of file vk_state_manager.cc.

References is_dirty.

Referenced by blender::gpu::VKUniformBuffer::unbind().

◆ uniform_buffer_unbind_all()

void blender::gpu::VKStateManager::uniform_buffer_unbind_all ( )

Definition at line 107 of file vk_state_manager.cc.

References is_dirty.

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

◆ VKDescriptorSetUpdator

friend class VKDescriptorSetUpdator
friend

Definition at line 218 of file vk_state_manager.hh.

References VKDescriptorSetUpdator.

Referenced by VKDescriptorSetUpdator.

Member Data Documentation

◆ is_dirty


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