FFmpeg
Data Structures | Macros | Functions | Variables
vulkan.c File Reference
#include "avassert.h"
#include "mem.h"
#include "vulkan.h"
#include "libavutil/vulkan_loader.h"

Go to the source code of this file.

Data Structures

struct  TempSyncCtx
 
struct  ImageViewCtx
 
struct  descriptor_props
 

Macros

#define CASE(VAL)   case VAL: return #VAL
 
#define ARR_REALLOC(str, arr, alloc_s, cnt)
 
#define REPS_FMT(fmt)
 
#define REPS_FMT_PACK(fmt, num)
 

Functions

const char * ff_vk_ret2str (VkResult res)
 Converts Vulkan return values to strings. More...
 
static void load_enabled_qfs (FFVulkanContext *s)
 
int ff_vk_load_props (FFVulkanContext *s)
 Loads props/mprops/driver_props. More...
 
static int vk_qf_get_index (FFVulkanContext *s, VkQueueFlagBits dev_family, int *nb)
 
int ff_vk_qf_init (FFVulkanContext *s, FFVkQueueFamilyCtx *qf, VkQueueFlagBits dev_family)
 Chooses a QF and loads it into a context. More...
 
void ff_vk_exec_pool_free (FFVulkanContext *s, FFVkExecPool *pool)
 
int ff_vk_exec_pool_init (FFVulkanContext *s, FFVkQueueFamilyCtx *qf, FFVkExecPool *pool, int nb_contexts, int nb_queries, VkQueryType query_type, int query_64bit, const void *query_create_pnext)
 Allocates/frees an execution pool. More...
 
VkResult ff_vk_exec_get_query (FFVulkanContext *s, FFVkExecContext *e, void **data, VkQueryResultFlagBits flags)
 Performs nb_queries queries and returns their results and statuses. More...
 
FFVkExecContextff_vk_exec_get (FFVulkanContext *s, FFVkExecPool *pool)
 Retrieve an execution pool. More...
 
void ff_vk_exec_wait (FFVulkanContext *s, FFVkExecContext *e)
 
int ff_vk_exec_start (FFVulkanContext *s, FFVkExecContext *e)
 Start/submit/wait an execution. More...
 
void ff_vk_exec_discard_deps (FFVulkanContext *s, FFVkExecContext *e)
 
int ff_vk_exec_add_dep_buf (FFVulkanContext *s, FFVkExecContext *e, AVBufferRef **deps, int nb_deps, int ref)
 Execution dependency management. More...
 
int ff_vk_exec_add_dep_sw_frame (FFVulkanContext *s, FFVkExecContext *e, AVFrame *f)
 
static void destroy_tmp_semaphores (void *opaque, uint8_t *data)
 
int ff_vk_exec_add_dep_bool_sem (FFVulkanContext *s, FFVkExecContext *e, VkSemaphore *sem, int nb, VkPipelineStageFlagBits2 stage, int wait)
 
int ff_vk_exec_add_dep_frame (FFVulkanContext *s, FFVkExecContext *e, AVFrame *f, VkPipelineStageFlagBits2 wait_stage, VkPipelineStageFlagBits2 signal_stage)
 
void ff_vk_exec_update_frame (FFVulkanContext *s, FFVkExecContext *e, AVFrame *f, VkImageMemoryBarrier2 *bar, uint32_t *nb_img_bar)
 
int ff_vk_exec_mirror_sem_value (FFVulkanContext *s, FFVkExecContext *e, VkSemaphore *dst, uint64_t *dst_val, AVFrame *f)
 
int ff_vk_exec_submit (FFVulkanContext *s, FFVkExecContext *e)
 
int ff_vk_alloc_mem (FFVulkanContext *s, VkMemoryRequirements *req, VkMemoryPropertyFlagBits req_flags, void *alloc_extension, VkMemoryPropertyFlagBits *mem_flags, VkDeviceMemory *mem)
 Memory/buffer/image allocation helpers. More...
 
int ff_vk_create_buf (FFVulkanContext *s, FFVkBuffer *buf, size_t size, void *pNext, void *alloc_pNext, VkBufferUsageFlags usage, VkMemoryPropertyFlagBits flags)
 
static void destroy_avvkbuf (void *opaque, uint8_t *data)
 
int ff_vk_create_avbuf (FFVulkanContext *s, AVBufferRef **ref, size_t size, void *pNext, void *alloc_pNext, VkBufferUsageFlags usage, VkMemoryPropertyFlagBits flags)
 
int ff_vk_map_buffers (FFVulkanContext *s, FFVkBuffer **buf, uint8_t *mem[], int nb_buffers, int invalidate)
 Buffer management code. More...
 
int ff_vk_unmap_buffers (FFVulkanContext *s, FFVkBuffer **buf, int nb_buffers, int flush)
 
void ff_vk_free_buf (FFVulkanContext *s, FFVkBuffer *buf)
 
static void free_data_buf (void *opaque, uint8_t *data)
 
static AVBufferRefalloc_data_buf (void *opaque, size_t size)
 
int ff_vk_get_pooled_buffer (FFVulkanContext *ctx, AVBufferPool **buf_pool, AVBufferRef **buf, VkBufferUsageFlags usage, void *create_pNext, size_t size, VkMemoryPropertyFlagBits mem_props)
 Initialize a pool and create AVBufferRefs containing FFVkBuffer. More...
 
int ff_vk_shader_add_push_const (FFVulkanShader *shd, int offset, int size, VkShaderStageFlagBits stage)
 Add/update push constants for execution. More...
 
int ff_vk_init_sampler (FFVulkanContext *s, VkSampler *sampler, int unnorm_coords, VkFilter filt)
 Create a sampler. More...
 
VkImageAspectFlags ff_vk_aspect_flag (AVFrame *f, int p)
 Get the aspect flag for a plane from an image. More...
 
int ff_vk_mt_is_np_rgb (enum AVPixelFormat pix_fmt)
 Returns 1 if pixfmt is a usable RGB format. More...
 
const char * ff_vk_shader_rep_fmt (enum AVPixelFormat pix_fmt, enum FFVkShaderRepFormat rep_fmt)
 
static void destroy_imageviews (void *opaque, uint8_t *data)
 
static VkFormat map_fmt_to_rep (VkFormat fmt, enum FFVkShaderRepFormat rep_fmt)
 
int ff_vk_create_imageviews (FFVulkanContext *s, FFVkExecContext *e, VkImageView views[AV_NUM_DATA_POINTERS], AVFrame *f, enum FFVkShaderRepFormat rep_fmt)
 Create an imageview and add it as a dependency to an execution. More...
 
void ff_vk_frame_barrier (FFVulkanContext *s, FFVkExecContext *e, AVFrame *pic, VkImageMemoryBarrier2 *bar, int *nb_bar, VkPipelineStageFlags src_stage, VkPipelineStageFlags dst_stage, VkAccessFlagBits new_access, VkImageLayout new_layout, uint32_t new_qf)
 
int ff_vk_shader_init (FFVulkanContext *s, FFVulkanShader *shd, const char *name, VkPipelineStageFlags stage, const char *extensions[], int nb_extensions, int lg_x, int lg_y, int lg_z, uint32_t required_subgroup_size)
 Initialize a shader object, with a specific set of extensions, type+bind, local group size, and subgroup requirements. More...
 
void ff_vk_shader_print (void *ctx, FFVulkanShader *shd, int prio)
 Output the shader code as logging data, with a specific priority. More...
 
static int init_pipeline_layout (FFVulkanContext *s, FFVulkanShader *shd)
 
static int create_shader_module (FFVulkanContext *s, FFVulkanShader *shd, VkShaderModule *mod, uint8_t *spirv, size_t spirv_len)
 
static int init_compute_pipeline (FFVulkanContext *s, FFVulkanShader *shd, VkShaderModule mod, const char *entrypoint)
 
static int create_shader_object (FFVulkanContext *s, FFVulkanShader *shd, uint8_t *spirv, size_t spirv_len, const char *entrypoint)
 
static int init_descriptors (FFVulkanContext *s, FFVulkanShader *shd)
 
int ff_vk_shader_link (FFVulkanContext *s, FFVulkanShader *shd, uint8_t *spirv, size_t spirv_len, const char *entrypoint)
 Link a shader into an executable. More...
 
int ff_vk_shader_add_descriptor_set (FFVulkanContext *s, FFVulkanShader *shd, FFVulkanDescriptorSetBinding *desc, int nb, int singular, int print_to_shader_only)
 Add descriptor to a shader. More...
 
int ff_vk_shader_register_exec (FFVulkanContext *s, FFVkExecPool *pool, FFVulkanShader *shd)
 Register a shader with an exec pool. More...
 
static FFVulkanShaderDataget_shd_data (FFVkExecContext *e, FFVulkanShader *shd)
 
static void update_set_descriptor (FFVulkanContext *s, FFVkExecContext *e, FFVulkanShader *shd, int set, int bind_idx, int array_idx, VkDescriptorGetInfoEXT *desc_get_info, size_t desc_size)
 
static void update_set_pool_write (FFVulkanContext *s, FFVkExecContext *e, FFVulkanShader *shd, int set, VkWriteDescriptorSet *write_info)
 
static int vk_set_descriptor_image (FFVulkanContext *s, FFVulkanShader *shd, FFVkExecContext *e, int set, int bind, int offs, VkImageView view, VkImageLayout layout, VkSampler sampler)
 
int ff_vk_shader_update_desc_buffer (FFVulkanContext *s, FFVkExecContext *e, FFVulkanShader *shd, int set, int bind, int elem, FFVkBuffer *buf, VkDeviceSize offset, VkDeviceSize len, VkFormat fmt)
 Update a descriptor in a buffer with a buffer. More...
 
void ff_vk_shader_update_img_array (FFVulkanContext *s, FFVkExecContext *e, FFVulkanShader *shd, AVFrame *f, VkImageView *views, int set, int binding, VkImageLayout layout, VkSampler sampler)
 Update a descriptor in a buffer with an image array. More...
 
void ff_vk_shader_update_push_const (FFVulkanContext *s, FFVkExecContext *e, FFVulkanShader *shd, VkShaderStageFlagBits stage, int offset, size_t size, void *src)
 Update push constant in a shader. More...
 
void ff_vk_exec_bind_shader (FFVulkanContext *s, FFVkExecContext *e, FFVulkanShader *shd)
 Bind a shader. More...
 
void ff_vk_shader_free (FFVulkanContext *s, FFVulkanShader *shd)
 Free a shader. More...
 
void ff_vk_uninit (FFVulkanContext *s)
 Frees main context. More...
 
int ff_vk_init (FFVulkanContext *s, void *log_parent, AVBufferRef *device_ref, AVBufferRef *frames_ref)
 Initializes the AVClass, in case this context is not used as the main user's context. More...
 

Variables

const VkComponentMapping ff_comp_identity_map
 
static const struct descriptor_props descriptor_props []
 

Macro Definition Documentation

◆ CASE

#define CASE (   VAL)    case VAL: return #VAL

◆ ARR_REALLOC

#define ARR_REALLOC (   str,
  arr,
  alloc_s,
  cnt 
)
Value:
do { \
arr = av_fast_realloc(str->arr, alloc_s, (cnt + 1)*sizeof(*arr)); \
if (!arr) { \
ff_vk_exec_discard_deps(s, e); \
return AVERROR(ENOMEM); \
} \
str->arr = arr; \
} while (0)

Definition at line 620 of file vulkan.c.

◆ REPS_FMT

#define REPS_FMT (   fmt)
Value:
[FF_VK_REP_NATIVE] = fmt ## _UINT, \
[FF_VK_REP_FLOAT] = fmt ## _UNORM, \
[FF_VK_REP_INT] = fmt ## _SINT, \
[FF_VK_REP_UINT] = fmt ## _UINT,

◆ REPS_FMT_PACK

#define REPS_FMT_PACK (   fmt,
  num 
)
Value:
[FF_VK_REP_NATIVE] = fmt ## _UINT_PACK ## num, \
[FF_VK_REP_FLOAT] = fmt ## _UNORM_PACK ## num, \
[FF_VK_REP_INT] = fmt ## _SINT_PACK ## num, \
[FF_VK_REP_UINT] = fmt ## _UINT_PACK ## num,

Function Documentation

◆ ff_vk_ret2str()

const char* ff_vk_ret2str ( VkResult  res)

◆ load_enabled_qfs()

static void load_enabled_qfs ( FFVulkanContext s)
static

Definition at line 87 of file vulkan.c.

Referenced by ff_vk_load_props(), and ff_vk_qf_init().

◆ ff_vk_load_props()

int ff_vk_load_props ( FFVulkanContext s)

Loads props/mprops/driver_props.

Definition at line 106 of file vulkan.c.

Referenced by ff_vk_filter_init_context(), ff_vk_init(), ff_vulkan_encode_init(), and vulkan_device_init().

◆ vk_qf_get_index()

static int vk_qf_get_index ( FFVulkanContext s,
VkQueueFlagBits  dev_family,
int *  nb 
)
static

Definition at line 220 of file vulkan.c.

Referenced by ff_vk_qf_init().

◆ ff_vk_qf_init()

int ff_vk_qf_init ( FFVulkanContext s,
FFVkQueueFamilyCtx qf,
VkQueueFlagBits  dev_family 
)

Chooses a QF and loads it into a context.

Definition at line 232 of file vulkan.c.

Referenced by init_filter(), init_vulkan(), vulkan_device_init(), and vulkan_encode_ffv1_init().

◆ ff_vk_exec_pool_free()

void ff_vk_exec_pool_free ( FFVulkanContext s,
FFVkExecPool pool 
)

◆ ff_vk_exec_pool_init()

int ff_vk_exec_pool_init ( FFVulkanContext s,
FFVkQueueFamilyCtx qf,
FFVkExecPool pool,
int  nb_contexts,
int  nb_queries,
VkQueryType  query_type,
int  query_64bit,
const void *  query_create_pnext 
)

Allocates/frees an execution pool.

ff_vk_exec_pool_init_desc() MUST be called if ff_vk_exec_descriptor_set_add() has been called.

Definition at line 306 of file vulkan.c.

Referenced by ff_vk_decode_init(), ff_vk_update_thread_context(), ff_vulkan_encode_init(), init_filter(), init_vulkan(), vulkan_encode_ffv1_init(), and vulkan_frames_init().

◆ ff_vk_exec_get_query()

VkResult ff_vk_exec_get_query ( FFVulkanContext s,
FFVkExecContext e,
void **  data,
VkQueryResultFlagBits  flags 
)

Performs nb_queries queries and returns their results and statuses.

64_BIT and WITH_STATUS flags are ignored as 64_BIT must be specified via query_64bit in ff_vk_exec_pool_init() and WITH_STATUS is always enabled.

Definition at line 465 of file vulkan.c.

Referenced by ff_vk_decode_frame(), and vulkan_encode_output().

◆ ff_vk_exec_get()

FFVkExecContext* ff_vk_exec_get ( FFVulkanContext s,
FFVkExecPool pool 
)

◆ ff_vk_exec_wait()

void ff_vk_exec_wait ( FFVulkanContext s,
FFVkExecContext e 
)

Definition at line 498 of file vulkan.c.

Referenced by download_slices(), get_packet(), vulkan_encode_wait(), and vulkan_transfer_frame().

◆ ff_vk_exec_start()

int ff_vk_exec_start ( FFVulkanContext s,
FFVkExecContext e 
)

Start/submit/wait an execution.

ff_vk_exec_start() always waits on a submission, so using ff_vk_exec_wait() is not necessary (unless using it is just better).

Definition at line 507 of file vulkan.c.

Referenced by download_slices(), ff_vk_decode_flush(), ff_vk_decode_frame(), ff_vk_filter_process_2pass(), ff_vk_filter_process_Nin(), ff_vk_filter_process_simple(), prepare_frame(), vulkan_encode_ffv1_submit_frame(), vulkan_encode_issue(), and vulkan_transfer_frame().

◆ ff_vk_exec_discard_deps()

void ff_vk_exec_discard_deps ( FFVulkanContext s,
FFVkExecContext e 
)

◆ ff_vk_exec_add_dep_buf()

int ff_vk_exec_add_dep_buf ( FFVulkanContext s,
FFVkExecContext e,
AVBufferRef **  deps,
int  nb_deps,
int  ref 
)

Execution dependency management.

Can attach buffers to executions that will only be unref'd once the buffer has finished executing. Adding a frame dep will lock the frame, until either the dependencies are discarded, the execution is submitted, or a failure happens. update_frame will update the frame's properties before it is unlocked, only if submission was successful.

Definition at line 573 of file vulkan.c.

Referenced by download_slices(), ff_vk_create_imageviews(), ff_vk_decode_frame(), ff_vk_exec_add_dep_bool_sem(), vulkan_encode_ffv1_submit_frame(), vulkan_encode_issue(), and vulkan_transfer_frame().

◆ ff_vk_exec_add_dep_sw_frame()

int ff_vk_exec_add_dep_sw_frame ( FFVulkanContext s,
FFVkExecContext e,
AVFrame f 
)

Definition at line 597 of file vulkan.c.

Referenced by vulkan_transfer_frame().

◆ destroy_tmp_semaphores()

static void destroy_tmp_semaphores ( void *  opaque,
uint8_t *  data 
)
static

Definition at line 635 of file vulkan.c.

Referenced by ff_vk_exec_add_dep_bool_sem().

◆ ff_vk_exec_add_dep_bool_sem()

int ff_vk_exec_add_dep_bool_sem ( FFVulkanContext s,
FFVkExecContext e,
VkSemaphore *  sem,
int  nb,
VkPipelineStageFlagBits2  stage,
int  wait 
)

Definition at line 647 of file vulkan.c.

◆ ff_vk_exec_add_dep_frame()

int ff_vk_exec_add_dep_frame ( FFVulkanContext s,
FFVkExecContext e,
AVFrame f,
VkPipelineStageFlagBits2  wait_stage,
VkPipelineStageFlagBits2  signal_stage 
)

◆ ff_vk_exec_update_frame()

void ff_vk_exec_update_frame ( FFVulkanContext s,
FFVkExecContext e,
AVFrame f,
VkImageMemoryBarrier2 *  bar,
uint32_t *  nb_img_bar 
)

Definition at line 788 of file vulkan.c.

Referenced by ff_vk_decode_frame(), ff_vk_frame_barrier(), and vulkan_encode_issue().

◆ ff_vk_exec_mirror_sem_value()

int ff_vk_exec_mirror_sem_value ( FFVulkanContext s,
FFVkExecContext e,
VkSemaphore *  dst,
uint64_t *  dst_val,
AVFrame f 
)

Definition at line 807 of file vulkan.c.

Referenced by ff_vk_decode_frame().

◆ ff_vk_exec_submit()

int ff_vk_exec_submit ( FFVulkanContext s,
FFVkExecContext e 
)

◆ ff_vk_alloc_mem()

int ff_vk_alloc_mem ( FFVulkanContext s,
VkMemoryRequirements *  req,
VkMemoryPropertyFlagBits  req_flags,
void *  alloc_extension,
VkMemoryPropertyFlagBits *  mem_flags,
VkDeviceMemory *  mem 
)

Memory/buffer/image allocation helpers.

Definition at line 899 of file vulkan.c.

Referenced by create_mapped_buffer(), ff_vk_create_buf(), and ff_vk_video_common_init().

◆ ff_vk_create_buf()

int ff_vk_create_buf ( FFVulkanContext s,
FFVkBuffer buf,
size_t  size,
void *  pNext,
void *  alloc_pNext,
VkBufferUsageFlags  usage,
VkMemoryPropertyFlagBits  flags 
)

◆ destroy_avvkbuf()

static void destroy_avvkbuf ( void *  opaque,
uint8_t *  data 
)
static

Definition at line 1042 of file vulkan.c.

Referenced by ff_vk_create_avbuf().

◆ ff_vk_create_avbuf()

int ff_vk_create_avbuf ( FFVulkanContext s,
AVBufferRef **  ref,
size_t  size,
void *  pNext,
void *  alloc_pNext,
VkBufferUsageFlags  usage,
VkMemoryPropertyFlagBits  flags 
)

Definition at line 1050 of file vulkan.c.

◆ ff_vk_map_buffers()

int ff_vk_map_buffers ( FFVulkanContext s,
FFVkBuffer **  buf,
uint8_t *  mem[],
int  nb_buffers,
int  invalidate 
)

Buffer management code.

Definition at line 1077 of file vulkan.c.

Referenced by ff_vk_map_buffer().

◆ ff_vk_unmap_buffers()

int ff_vk_unmap_buffers ( FFVulkanContext s,
FFVkBuffer **  buf,
int  nb_buffers,
int  flush 
)

Definition at line 1124 of file vulkan.c.

Referenced by ff_vk_unmap_buffer().

◆ ff_vk_free_buf()

void ff_vk_free_buf ( FFVulkanContext s,
FFVkBuffer buf 
)

◆ free_data_buf()

static void free_data_buf ( void *  opaque,
uint8_t *  data 
)
static

Definition at line 1179 of file vulkan.c.

Referenced by alloc_data_buf().

◆ alloc_data_buf()

static AVBufferRef* alloc_data_buf ( void *  opaque,
size_t  size 
)
static

Definition at line 1187 of file vulkan.c.

Referenced by ff_vk_get_pooled_buffer().

◆ ff_vk_get_pooled_buffer()

int ff_vk_get_pooled_buffer ( FFVulkanContext ctx,
AVBufferPool **  buf_pool,
AVBufferRef **  buf,
VkBufferUsageFlags  usage,
void *  create_pNext,
size_t  size,
VkMemoryPropertyFlagBits  mem_props 
)

Initialize a pool and create AVBufferRefs containing FFVkBuffer.

Threadsafe to use. Buffers are automatically mapped on creation if VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT is set in mem_props. Users should synchronize access themselvesd. Mainly meant for device-local buffers.

Definition at line 1200 of file vulkan.c.

Referenced by ff_vk_decode_add_slice(), get_packet(), get_plane_buf(), vulkan_encode_ffv1_submit_frame(), and vulkan_encode_issue().

◆ ff_vk_shader_add_push_const()

int ff_vk_shader_add_push_const ( FFVulkanShader shd,
int  offset,
int  size,
VkShaderStageFlagBits  stage 
)

Add/update push constants for execution.

Definition at line 1253 of file vulkan.c.

Referenced by add_push_data(), init_filter(), init_rct_shader(), init_reset_shader(), and init_vulkan().

◆ ff_vk_init_sampler()

int ff_vk_init_sampler ( FFVulkanContext s,
VkSampler *  sampler,
int  unnorm_coords,
VkFilter  filt 
)

Create a sampler.

Definition at line 1274 of file vulkan.c.

Referenced by init_filter(), and init_vulkan().

◆ ff_vk_aspect_flag()

VkImageAspectFlags ff_vk_aspect_flag ( AVFrame f,
int  p 
)

Get the aspect flag for a plane from an image.

Definition at line 1306 of file vulkan.c.

Referenced by ff_vk_create_imageviews(), and vulkan_transfer_frame().

◆ ff_vk_mt_is_np_rgb()

int ff_vk_mt_is_np_rgb ( enum AVPixelFormat  pix_fmt)

Returns 1 if pixfmt is a usable RGB format.

Definition at line 1323 of file vulkan.c.

Referenced by ff_vk_aspect_flag(), run_rct(), and scale_vulkan_config_output().

◆ ff_vk_shader_rep_fmt()

const char* ff_vk_shader_rep_fmt ( enum AVPixelFormat  pix_fmt,
enum FFVkShaderRepFormat  rep_fmt 
)

◆ destroy_imageviews()

static void destroy_imageviews ( void *  opaque,
uint8_t *  data 
)
static

Definition at line 1512 of file vulkan.c.

Referenced by ff_vk_create_imageviews().

◆ map_fmt_to_rep()

static VkFormat map_fmt_to_rep ( VkFormat  fmt,
enum FFVkShaderRepFormat  rep_fmt 
)
static

Definition at line 1524 of file vulkan.c.

Referenced by ff_vk_create_imageviews().

◆ ff_vk_create_imageviews()

int ff_vk_create_imageviews ( FFVulkanContext s,
FFVkExecContext e,
VkImageView  views[AV_NUM_DATA_POINTERS],
AVFrame f,
enum FFVkShaderRepFormat  rep_fmt 
)

Create an imageview and add it as a dependency to an execution.

Definition at line 1611 of file vulkan.c.

Referenced by ff_vk_filter_process_2pass(), ff_vk_filter_process_Nin(), ff_vk_filter_process_simple(), run_rct(), and vulkan_encode_ffv1_submit_frame().

◆ ff_vk_frame_barrier()

void ff_vk_frame_barrier ( FFVulkanContext s,
FFVkExecContext e,
AVFrame pic,
VkImageMemoryBarrier2 *  bar,
int *  nb_bar,
VkPipelineStageFlags  src_stage,
VkPipelineStageFlags  dst_stage,
VkAccessFlagBits  new_access,
VkImageLayout  new_layout,
uint32_t  new_qf 
)

◆ ff_vk_shader_init()

int ff_vk_shader_init ( FFVulkanContext s,
FFVulkanShader shd,
const char *  name,
VkPipelineStageFlags  stage,
const char *  extensions[],
int  nb_extensions,
int  lg_x,
int  lg_y,
int  lg_z,
uint32_t  required_subgroup_size 
)

Initialize a shader object, with a specific set of extensions, type+bind, local group size, and subgroup requirements.

Definition at line 1737 of file vulkan.c.

Referenced by init_encode_shader(), init_filter(), init_rct_shader(), init_reset_shader(), init_setup_shader(), and init_vulkan().

◆ ff_vk_shader_print()

void ff_vk_shader_print ( void *  ctx,
FFVulkanShader shd,
int  prio 
)

Output the shader code as logging data, with a specific priority.

Definition at line 1812 of file vulkan.c.

Referenced by glslc_shader_compile(), and shdc_shader_compile().

◆ init_pipeline_layout()

static int init_pipeline_layout ( FFVulkanContext s,
FFVulkanShader shd 
)
static

Definition at line 1834 of file vulkan.c.

Referenced by ff_vk_shader_link().

◆ create_shader_module()

static int create_shader_module ( FFVulkanContext s,
FFVulkanShader shd,
VkShaderModule *  mod,
uint8_t *  spirv,
size_t  spirv_len 
)
static

Definition at line 1860 of file vulkan.c.

Referenced by ff_vk_shader_link().

◆ init_compute_pipeline()

static int init_compute_pipeline ( FFVulkanContext s,
FFVulkanShader shd,
VkShaderModule  mod,
const char *  entrypoint 
)
static

Definition at line 1886 of file vulkan.c.

Referenced by ff_vk_shader_link().

◆ create_shader_object()

static int create_shader_object ( FFVulkanContext s,
FFVulkanShader shd,
uint8_t *  spirv,
size_t  spirv_len,
const char *  entrypoint 
)
static

Definition at line 1921 of file vulkan.c.

Referenced by ff_vk_shader_link().

◆ init_descriptors()

static int init_descriptors ( FFVulkanContext s,
FFVulkanShader shd 
)
static

Definition at line 1962 of file vulkan.c.

Referenced by ff_vk_shader_link().

◆ ff_vk_shader_link()

int ff_vk_shader_link ( FFVulkanContext s,
FFVulkanShader shd,
uint8_t *  spirv,
size_t  spirv_len,
const char *  entrypoint 
)

Link a shader into an executable.

Definition at line 2026 of file vulkan.c.

Referenced by init_encode_shader(), init_filter(), init_gblur_pipeline(), init_rct_shader(), init_reset_shader(), init_setup_shader(), and init_vulkan().

◆ ff_vk_shader_add_descriptor_set()

int ff_vk_shader_add_descriptor_set ( FFVulkanContext s,
FFVulkanShader shd,
FFVulkanDescriptorSetBinding desc,
int  nb,
int  singular,
int  print_to_shader_only 
)

Add descriptor to a shader.

Must be called before shader init.

Definition at line 2101 of file vulkan.c.

Referenced by init_encode_shader(), init_filter(), init_gblur_pipeline(), init_rct_shader(), init_reset_shader(), init_setup_shader(), and init_vulkan().

◆ ff_vk_shader_register_exec()

int ff_vk_shader_register_exec ( FFVulkanContext s,
FFVkExecPool pool,
FFVulkanShader shd 
)

Register a shader with an exec pool.

Pool may be NULL if all descriptor sets are read-only.

Definition at line 2226 of file vulkan.c.

Referenced by init_encode_shader(), init_filter(), init_gblur_pipeline(), init_rct_shader(), init_reset_shader(), init_setup_shader(), and init_vulkan().

◆ get_shd_data()

static FFVulkanShaderData* get_shd_data ( FFVkExecContext e,
FFVulkanShader shd 
)
inlinestatic

Definition at line 2343 of file vulkan.c.

Referenced by ff_vk_exec_bind_shader(), update_set_descriptor(), and update_set_pool_write().

◆ update_set_descriptor()

static void update_set_descriptor ( FFVulkanContext s,
FFVkExecContext e,
FFVulkanShader shd,
int  set,
int  bind_idx,
int  array_idx,
VkDescriptorGetInfoEXT *  desc_get_info,
size_t  desc_size 
)
inlinestatic

Definition at line 2352 of file vulkan.c.

Referenced by ff_vk_shader_update_desc_buffer(), and vk_set_descriptor_image().

◆ update_set_pool_write()

static void update_set_pool_write ( FFVulkanContext s,
FFVkExecContext e,
FFVulkanShader shd,
int  set,
VkWriteDescriptorSet *  write_info 
)
inlinestatic

Definition at line 2371 of file vulkan.c.

Referenced by ff_vk_shader_update_desc_buffer(), and vk_set_descriptor_image().

◆ vk_set_descriptor_image()

static int vk_set_descriptor_image ( FFVulkanContext s,
FFVulkanShader shd,
FFVkExecContext e,
int  set,
int  bind,
int  offs,
VkImageView  view,
VkImageLayout  layout,
VkSampler  sampler 
)
static

Definition at line 2398 of file vulkan.c.

Referenced by ff_vk_shader_update_img_array().

◆ ff_vk_shader_update_desc_buffer()

int ff_vk_shader_update_desc_buffer ( FFVulkanContext s,
FFVkExecContext e,
FFVulkanShader shd,
int  set,
int  bind,
int  elem,
FFVkBuffer buf,
VkDeviceSize  offset,
VkDeviceSize  len,
VkFormat  fmt 
)

Update a descriptor in a buffer with a buffer.

Must be called before binding the shader.

Definition at line 2463 of file vulkan.c.

Referenced by init_crc_table_data(), init_gblur_pipeline(), init_quant_table_data(), init_state_transition_data(), run_rct(), and vulkan_encode_ffv1_submit_frame().

◆ ff_vk_shader_update_img_array()

void ff_vk_shader_update_img_array ( FFVulkanContext s,
FFVkExecContext e,
FFVulkanShader shd,
AVFrame f,
VkImageView *  views,
int  set,
int  binding,
VkImageLayout  layout,
VkSampler  sampler 
)

Update a descriptor in a buffer with an image array.

Must be called before binding the shader.

Definition at line 2529 of file vulkan.c.

Referenced by ff_vk_filter_process_2pass(), ff_vk_filter_process_Nin(), ff_vk_filter_process_simple(), run_rct(), and vulkan_encode_ffv1_submit_frame().

◆ ff_vk_shader_update_push_const()

void ff_vk_shader_update_push_const ( FFVulkanContext s,
FFVkExecContext e,
FFVulkanShader shd,
VkShaderStageFlagBits  stage,
int  offset,
size_t  size,
void *  src 
)

Update push constant in a shader.

Must be called before binding the shader.

Definition at line 2542 of file vulkan.c.

Referenced by ff_vk_filter_process_2pass(), ff_vk_filter_process_Nin(), ff_vk_filter_process_simple(), run_rct(), and vulkan_encode_ffv1_submit_frame().

◆ ff_vk_exec_bind_shader()

void ff_vk_exec_bind_shader ( FFVulkanContext s,
FFVkExecContext e,
FFVulkanShader shd 
)

◆ ff_vk_shader_free()

void ff_vk_shader_free ( FFVulkanContext s,
FFVulkanShader shd 
)

◆ ff_vk_uninit()

void ff_vk_uninit ( FFVulkanContext s)

◆ ff_vk_init()

int ff_vk_init ( FFVulkanContext s,
void *  log_parent,
AVBufferRef device_ref,
AVBufferRef frames_ref 
)

Initializes the AVClass, in case this context is not used as the main user's context.

May use either a frames context reference, or a device context reference.

Definition at line 2636 of file vulkan.c.

Referenced by ff_vk_decode_init(), and vulkan_encode_ffv1_init().

Variable Documentation

◆ ff_comp_identity_map

const VkComponentMapping ff_comp_identity_map
Initial value:
= {
.r = VK_COMPONENT_SWIZZLE_IDENTITY,
.g = VK_COMPONENT_SWIZZLE_IDENTITY,
.b = VK_COMPONENT_SWIZZLE_IDENTITY,
.a = VK_COMPONENT_SWIZZLE_IDENTITY,
}

Definition at line 27 of file vulkan.c.

Referenced by ff_vk_create_imageviews(), and ff_vk_video_common_init().

◆ descriptor_props

const struct descriptor_props descriptor_props[]
static
Initial value:
= {
[VK_DESCRIPTOR_TYPE_SAMPLER] = { sizeof(VkDescriptorImageInfo), "sampler", 1, 0, 0, 0, },
[VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE] = { sizeof(VkDescriptorImageInfo), "texture", 1, 0, 1, 0, },
[VK_DESCRIPTOR_TYPE_STORAGE_IMAGE] = { sizeof(VkDescriptorImageInfo), "image", 1, 1, 1, 0, },
[VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT] = { sizeof(VkDescriptorImageInfo), "subpassInput", 1, 0, 0, 0, },
[VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER] = { sizeof(VkDescriptorImageInfo), "sampler", 1, 0, 1, 0, },
[VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER] = { sizeof(VkDescriptorBufferInfo), NULL, 1, 0, 0, 1, },
[VK_DESCRIPTOR_TYPE_STORAGE_BUFFER] = { sizeof(VkDescriptorBufferInfo), "buffer", 0, 1, 0, 1, },
[VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC] = { sizeof(VkDescriptorBufferInfo), NULL, 1, 0, 0, 1, },
[VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC] = { sizeof(VkDescriptorBufferInfo), "buffer", 0, 1, 0, 1, },
[VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER] = { sizeof(VkBufferView), "samplerBuffer", 1, 0, 0, 0, },
[VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER] = { sizeof(VkBufferView), "imageBuffer", 1, 0, 0, 0, },
}
AVERROR
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
FF_VK_REP_NATIVE
@ FF_VK_REP_NATIVE
Definition: vulkan.h:379
FF_VK_REP_INT
@ FF_VK_REP_INT
Definition: vulkan.h:383
av_fast_realloc
void * av_fast_realloc(void *ptr, unsigned int *size, size_t min_size)
Reallocate the given buffer if it is not large enough, otherwise do nothing.
Definition: mem.c:497
s
#define s(width, name)
Definition: cbs_vp9.c:198
FF_VK_REP_FLOAT
@ FF_VK_REP_FLOAT
Definition: vulkan.h:381
NULL
#define NULL
Definition: coverity.c:32
FF_VK_REP_UINT
@ FF_VK_REP_UINT
Definition: vulkan.h:385