FFmpeg
Data Structures | Macros | Enumerations | Functions | Variables
vulkan.h File Reference
#include <stdatomic.h>
#include "thread.h"
#include "pixdesc.h"
#include "bprint.h"
#include "hwcontext.h"
#include "vulkan_functions.h"
#include "hwcontext_vulkan.h"

Go to the source code of this file.

Data Structures

struct  FFVulkanDescriptorSetBinding
 
struct  FFVkBuffer
 
struct  FFVkQueueFamilyCtx
 
struct  FFVkExecContext
 
struct  FFVulkanDescriptorSet
 
struct  FFVulkanShader
 
struct  FFVulkanDescriptorSetData
 
struct  FFVulkanShaderData
 
struct  FFVkExecPool
 
struct  FFVulkanContext
 

Macros

#define VK_NO_PROTOTYPES
 
#define INDENT(N)   INDENT_##N
 
#define INDENT_0
 
#define INDENT_1   INDENT_0 " "
 
#define INDENT_2   INDENT_1 INDENT_1
 
#define INDENT_3   INDENT_2 INDENT_1
 
#define INDENT_4   INDENT_3 INDENT_1
 
#define INDENT_5   INDENT_4 INDENT_1
 
#define INDENT_6   INDENT_5 INDENT_1
 
#define C(N, S)   INDENT(N) #S "\n"
 
#define GLSLC(N, S)
 
#define GLSLA(...)
 
#define GLSLF(N, S, ...)
 
#define GLSLD(D)
 
#define RET(x)
 
#define DUP_SAMPLER(x)   { x, x, x, x }
 

Enumerations

enum  FFVkShaderRepFormat { FF_VK_REP_NATIVE = 0, FF_VK_REP_FLOAT, FF_VK_REP_INT, FF_VK_REP_UINT }
 Returns the format to use for images in shaders. More...
 

Functions

static int ff_vk_count_images (AVVkFrame *f)
 
static const void * ff_vk_find_struct (const void *chain, VkStructureType stype)
 
static void ff_vk_link_struct (void *chain, const void *in)
 
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...
 
const char * ff_vk_ret2str (VkResult res)
 Converts Vulkan return values to strings. More...
 
int ff_vk_mt_is_np_rgb (enum AVPixelFormat pix_fmt)
 Returns 1 if pixfmt is a usable RGB format. More...
 
VkImageAspectFlags ff_vk_aspect_flag (AVFrame *f, int p)
 Get the aspect flag for a plane from an image. More...
 
const char * ff_vk_shader_rep_fmt (enum AVPixelFormat pix_fmt, enum FFVkShaderRepFormat rep_fmt)
 
int ff_vk_load_props (FFVulkanContext *s)
 Loads props/mprops/driver_props. More...
 
int ff_vk_qf_init (FFVulkanContext *s, FFVkQueueFamilyCtx *qf, VkQueueFlagBits dev_family)
 Chooses a QF and loads it into a context. More...
 
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...
 
void ff_vk_exec_pool_free (FFVulkanContext *s, FFVkExecPool *pool)
 
FFVkExecContextff_vk_exec_get (FFVulkanContext *s, FFVkExecPool *pool)
 Retrieve 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...
 
int ff_vk_exec_start (FFVulkanContext *s, FFVkExecContext *e)
 Start/submit/wait an execution. More...
 
int ff_vk_exec_submit (FFVulkanContext *s, FFVkExecContext *e)
 
void ff_vk_exec_wait (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_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)
 
int ff_vk_exec_add_dep_sw_frame (FFVulkanContext *s, FFVkExecContext *e, AVFrame *f)
 
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)
 
void ff_vk_exec_discard_deps (FFVulkanContext *s, FFVkExecContext *e)
 
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_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)
 
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)
 
static int ff_vk_map_buffer (FFVulkanContext *s, FFVkBuffer *buf, uint8_t **mem, int invalidate)
 
static int ff_vk_unmap_buffer (FFVulkanContext *s, FFVkBuffer *buf, int flush)
 
void ff_vk_free_buf (FFVulkanContext *s, FFVkBuffer *buf)
 
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_init_sampler (FFVulkanContext *s, VkSampler *sampler, int unnorm_coords, VkFilter filt)
 Create a sampler. More...
 
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...
 
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_push_const (FFVulkanShader *shd, int offset, int size, VkShaderStageFlagBits stage)
 Add/update push constants for execution. 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...
 
void ff_vk_exec_bind_shader (FFVulkanContext *s, FFVkExecContext *e, FFVulkanShader *shd)
 Bind a shader. 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...
 
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_free (FFVulkanContext *s, FFVulkanShader *shd)
 Free a shader. More...
 
void ff_vk_uninit (FFVulkanContext *s)
 Frees main context. More...
 

Variables

const VkComponentMapping ff_comp_identity_map
 

Macro Definition Documentation

◆ VK_NO_PROTOTYPES

#define VK_NO_PROTOTYPES

Definition at line 22 of file vulkan.h.

◆ INDENT

#define INDENT (   N)    INDENT_##N

Definition at line 34 of file vulkan.h.

◆ INDENT_0

#define INDENT_0

Definition at line 35 of file vulkan.h.

◆ INDENT_1

#define INDENT_1   INDENT_0 " "

Definition at line 36 of file vulkan.h.

◆ INDENT_2

#define INDENT_2   INDENT_1 INDENT_1

Definition at line 37 of file vulkan.h.

◆ INDENT_3

#define INDENT_3   INDENT_2 INDENT_1

Definition at line 38 of file vulkan.h.

◆ INDENT_4

#define INDENT_4   INDENT_3 INDENT_1

Definition at line 39 of file vulkan.h.

◆ INDENT_5

#define INDENT_5   INDENT_4 INDENT_1

Definition at line 40 of file vulkan.h.

◆ INDENT_6

#define INDENT_6   INDENT_5 INDENT_1

Definition at line 41 of file vulkan.h.

◆ C

#define C (   N,
  S 
)    INDENT(N) #S "\n"

Definition at line 42 of file vulkan.h.

◆ GLSLC

#define GLSLC (   N,
  S 
)
Value:
do { \
av_bprintf(&shd->src, C(N, S)); \
} while (0)

Definition at line 44 of file vulkan.h.

◆ GLSLA

#define GLSLA (   ...)
Value:
do { \
av_bprintf(&shd->src, __VA_ARGS__); \
} while (0)

Definition at line 49 of file vulkan.h.

◆ GLSLF

#define GLSLF (   N,
  S,
  ... 
)
Value:
do { \
av_bprintf(&shd->src, C(N, S), __VA_ARGS__); \
} while (0)

Definition at line 54 of file vulkan.h.

◆ GLSLD

#define GLSLD (   D)
Value:
do { \
av_bprintf(&shd->src, "\n"); \
av_bprint_append_data(&shd->src, D, strlen(D)); \
av_bprintf(&shd->src, "\n"); \
} while (0)

Definition at line 59 of file vulkan.h.

◆ RET

#define RET (   x)
Value:
do { \
if ((err = (x)) < 0) \
goto fail; \
} while (0)

Definition at line 67 of file vulkan.h.

◆ DUP_SAMPLER

#define DUP_SAMPLER (   x)    { x, x, x, x }

Definition at line 73 of file vulkan.h.

Enumeration Type Documentation

◆ FFVkShaderRepFormat

Returns the format to use for images in shaders.

Enumerator
FF_VK_REP_NATIVE 
FF_VK_REP_FLOAT 
FF_VK_REP_INT 
FF_VK_REP_UINT 

Definition at line 377 of file vulkan.h.

Function Documentation

◆ ff_vk_count_images()

static int ff_vk_count_images ( AVVkFrame f)
inlinestatic

◆ ff_vk_find_struct()

static const void* ff_vk_find_struct ( const void *  chain,
VkStructureType  stype 
)
inlinestatic

◆ ff_vk_link_struct()

static void ff_vk_link_struct ( void *  chain,
const void *  in 
)
inlinestatic

Definition at line 339 of file vulkan.h.

◆ 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().

◆ ff_vk_ret2str()

const char* ff_vk_ret2str ( VkResult  res)

◆ 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_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_shader_rep_fmt()

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

◆ 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().

◆ 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_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_pool_free()

void ff_vk_exec_pool_free ( FFVulkanContext s,
FFVkExecPool pool 
)

◆ ff_vk_exec_get()

FFVkExecContext* ff_vk_exec_get ( FFVulkanContext s,
FFVkExecPool pool 
)

◆ 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_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_submit()

int ff_vk_exec_submit ( FFVulkanContext s,
FFVkExecContext e 
)

◆ 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_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_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_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().

◆ 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_discard_deps()

void ff_vk_exec_discard_deps ( FFVulkanContext s,
FFVkExecContext e 
)

◆ 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_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 
)

◆ 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_map_buffer()

static int ff_vk_map_buffer ( FFVulkanContext s,
FFVkBuffer buf,
uint8_t **  mem,
int  invalidate 
)
inlinestatic

◆ ff_vk_unmap_buffer()

static int ff_vk_unmap_buffer ( FFVulkanContext s,
FFVkBuffer buf,
int  flush 
)
inlinestatic

◆ ff_vk_free_buf()

void ff_vk_free_buf ( FFVulkanContext s,
FFVkBuffer buf 
)

◆ 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_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_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().

◆ 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_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_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().

◆ ff_vk_exec_bind_shader()

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

◆ 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_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_free()

void ff_vk_shader_free ( FFVulkanContext s,
FFVulkanShader shd 
)

◆ ff_vk_uninit()

void ff_vk_uninit ( FFVulkanContext s)

Variable Documentation

◆ ff_comp_identity_map

const VkComponentMapping ff_comp_identity_map

Definition at line 27 of file vulkan.c.

Referenced by ff_vk_create_imageviews(), and ff_vk_video_common_init().

D
D(D(float, sse)
Definition: rematrix_init.c:30
S
#define S(s, c, i)
Definition: flacdsp_template.c:46
fail
#define fail()
Definition: checkasm.h:193
N
#define N
Definition: af_mcompand.c:54
C
#define C(N, S)
Definition: vulkan.h:42