FFmpeg  4.3
Data Structures | Macros | Functions | Variables
vulkan.h File Reference
#include "avfilter.h"
#include "libavutil/pixdesc.h"
#include "libavutil/bprint.h"
#include "libavutil/hwcontext.h"
#include "libavutil/hwcontext_vulkan.h"

Go to the source code of this file.

Data Structures

struct  SPIRVShader
 
struct  VulkanDescriptorSetBinding
 
struct  FFVkBuffer
 
struct  VulkanPipeline
 
struct  FFVkQueueCtx
 
struct  FFVkExecContext
 
struct  VulkanFilterContext
 

Macros

#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)   av_bprintf(&shd->src, C(N, S))
 
#define GLSLA(...)   av_bprintf(&shd->src, __VA_ARGS__)
 
#define GLSLF(N, S, ...)   av_bprintf(&shd->src, C(N, S), __VA_ARGS__)
 
#define GLSLD(D)
 
#define RET(x)
 
#define GET_QUEUE_COUNT(hwctx, graph, comp, tx)
 
#define DUP_SAMPLER_ARRAY4(x)   (VkSampler []){ x, x, x, x, }
 

Functions

int ff_vk_filter_query_formats (AVFilterContext *avctx)
 General lavfi IO functions. More...
 
int ff_vk_filter_init (AVFilterContext *avctx)
 
int ff_vk_filter_config_input (AVFilterLink *inlink)
 
int ff_vk_filter_config_output (AVFilterLink *outlink)
 
int ff_vk_filter_config_output_inplace (AVFilterLink *outlink)
 
void ff_vk_filter_uninit (AVFilterContext *avctx)
 
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 the image is any sort of supported RGB. More...
 
const char * ff_vk_shader_rep_fmt (enum AVPixelFormat pixfmt)
 Gets the glsl format string for a pixel format. More...
 
VkSampler * ff_vk_init_sampler (AVFilterContext *avctx, int unnorm_coords, VkFilter filt)
 Create a Vulkan sampler, will be auto-freed in ff_vk_filter_uninit() More...
 
int ff_vk_create_imageview (AVFilterContext *avctx, FFVkExecContext *e, VkImageView *v, VkImage img, VkFormat fmt, const VkComponentMapping map)
 Create an imageview. More...
 
int ff_vk_add_push_constant (AVFilterContext *avctx, VulkanPipeline *pl, int offset, int size, VkShaderStageFlagBits stage)
 Define a push constant for a given stage into a pipeline. More...
 
VulkanPipelineff_vk_create_pipeline (AVFilterContext *avctx)
 Inits a pipeline. More...
 
SPIRVShaderff_vk_init_shader (AVFilterContext *avctx, VulkanPipeline *pl, const char *name, VkShaderStageFlags stage)
 Inits a shader for a specific pipeline. More...
 
void ff_vk_set_compute_shader_sizes (AVFilterContext *avctx, SPIRVShader *shd, int local_size[3])
 Writes the workgroup size for a shader. More...
 
int ff_vk_add_descriptor_set (AVFilterContext *avctx, VulkanPipeline *pl, SPIRVShader *shd, VulkanDescriptorSetBinding *desc, int num, int only_print_to_shader)
 Adds a descriptor set to the shader and registers them in the pipeline. More...
 
int ff_vk_compile_shader (AVFilterContext *avctx, SPIRVShader *shd, const char *entrypoint)
 Compiles the shader, entrypoint must be set to "main". More...
 
int ff_vk_init_pipeline_layout (AVFilterContext *avctx, VulkanPipeline *pl)
 Initializes the pipeline layout after all shaders and descriptor sets have been finished. More...
 
int ff_vk_init_compute_pipeline (AVFilterContext *avctx, VulkanPipeline *pl)
 Initializes a compute pipeline. More...
 
void ff_vk_update_descriptor_set (AVFilterContext *avctx, VulkanPipeline *pl, int set_id)
 Updates a descriptor set via the updaters defined. More...
 
int ff_vk_create_exec_ctx (AVFilterContext *avctx, FFVkExecContext **ctx)
 Init an execution context for command recording and queue submission. More...
 
int ff_vk_start_exec_recording (AVFilterContext *avctx, FFVkExecContext *e)
 Begin recording to the command buffer. More...
 
void ff_vk_bind_pipeline_exec (AVFilterContext *avctx, FFVkExecContext *e, VulkanPipeline *pl)
 Add a command to bind the completed pipeline and its descriptor sets. More...
 
void ff_vk_update_push_exec (AVFilterContext *avctx, FFVkExecContext *e, VkShaderStageFlagBits stage, int offset, size_t size, void *src)
 Updates push constants. More...
 
VkCommandBuffer ff_vk_get_exec_buf (AVFilterContext *avctx, FFVkExecContext *e)
 Gets the command buffer to use for this submission from the exe context. More...
 
int ff_vk_add_dep_exec_ctx (AVFilterContext *avctx, FFVkExecContext *e, AVBufferRef **deps, int nb_deps)
 Adds a generic AVBufferRef as a queue depenency. More...
 
void ff_vk_discard_exec_deps (AVFilterContext *avctx, FFVkExecContext *e)
 Discards all queue dependencies. More...
 
int ff_vk_add_exec_dep (AVFilterContext *avctx, FFVkExecContext *e, AVFrame *frame, VkPipelineStageFlagBits in_wait_dst_flag)
 Adds a frame as a queue dependency. More...
 
int ff_vk_submit_exec_queue (AVFilterContext *avctx, FFVkExecContext *e)
 Submits a command buffer to the queue for execution. More...
 
int ff_vk_create_buf (AVFilterContext *avctx, FFVkBuffer *buf, size_t size, VkBufferUsageFlags usage, VkMemoryPropertyFlagBits flags)
 Create a VkBuffer with the specified parameters. More...
 
int ff_vk_map_buffers (AVFilterContext *avctx, FFVkBuffer *buf, uint8_t *mem[], int nb_buffers, int invalidate)
 Maps the buffer to userspace. More...
 
int ff_vk_unmap_buffers (AVFilterContext *avctx, FFVkBuffer *buf, int nb_buffers, int flush)
 Unmaps the buffer from userspace. More...
 
void ff_vk_free_buf (AVFilterContext *avctx, FFVkBuffer *buf)
 Frees a buffer. More...
 

Variables

const VkComponentMapping ff_comp_identity_map
 

Macro Definition Documentation

◆ INDENT

#define INDENT (   N)    INDENT_##N

Definition at line 29 of file vulkan.h.

◆ INDENT_0

#define INDENT_0

Definition at line 30 of file vulkan.h.

◆ INDENT_1

#define INDENT_1   INDENT_0 " "

Definition at line 31 of file vulkan.h.

◆ INDENT_2

#define INDENT_2   INDENT_1 INDENT_1

Definition at line 32 of file vulkan.h.

◆ INDENT_3

#define INDENT_3   INDENT_2 INDENT_1

Definition at line 33 of file vulkan.h.

◆ INDENT_4

#define INDENT_4   INDENT_3 INDENT_1

Definition at line 34 of file vulkan.h.

◆ INDENT_5

#define INDENT_5   INDENT_4 INDENT_1

Definition at line 35 of file vulkan.h.

◆ INDENT_6

#define INDENT_6   INDENT_5 INDENT_1

Definition at line 36 of file vulkan.h.

◆ C

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

Definition at line 37 of file vulkan.h.

◆ GLSLC

#define GLSLC (   N,
  S 
)    av_bprintf(&shd->src, C(N, S))

Definition at line 38 of file vulkan.h.

◆ GLSLA

#define GLSLA (   ...)    av_bprintf(&shd->src, __VA_ARGS__)

Definition at line 39 of file vulkan.h.

◆ GLSLF

#define GLSLF (   N,
  S,
  ... 
)    av_bprintf(&shd->src, C(N, S), __VA_ARGS__)

Definition at line 40 of file vulkan.h.

◆ GLSLD

#define GLSLD (   D)
Value:
GLSLC(0, ); \
av_bprint_append_data(&shd->src, D, strlen(D)); \
GLSLC(0, )

Definition at line 41 of file vulkan.h.

◆ RET

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

Definition at line 46 of file vulkan.h.

◆ GET_QUEUE_COUNT

#define GET_QUEUE_COUNT (   hwctx,
  graph,
  comp,
  tx 
)
Value:
( \
graph ? hwctx->nb_graphics_queues : \
comp ? (hwctx->nb_comp_queues ? \
hwctx->nb_comp_queues : hwctx->nb_graphics_queues) : \
tx ? (hwctx->nb_tx_queues ? hwctx->nb_tx_queues : \
(hwctx->nb_comp_queues ? \
hwctx->nb_comp_queues : hwctx->nb_graphics_queues)) : \
0 \
)

Definition at line 53 of file vulkan.h.

◆ DUP_SAMPLER_ARRAY4

#define DUP_SAMPLER_ARRAY4 (   x)    (VkSampler []){ x, x, x, x, }

Definition at line 64 of file vulkan.h.

Function Documentation

◆ ff_vk_filter_query_formats()

int ff_vk_filter_query_formats ( AVFilterContext avctx)

General lavfi IO functions.

Definition at line 592 of file vulkan.c.

◆ ff_vk_filter_init()

int ff_vk_filter_init ( AVFilterContext avctx)

Definition at line 756 of file vulkan.c.

Referenced by overlay_vulkan_init().

◆ ff_vk_filter_config_input()

int ff_vk_filter_config_input ( AVFilterLink inlink)

Definition at line 635 of file vulkan.c.

◆ ff_vk_filter_config_output()

int ff_vk_filter_config_output ( AVFilterLink outlink)

Definition at line 705 of file vulkan.c.

Referenced by overlay_vulkan_config_output(), and scale_vulkan_config_output().

◆ ff_vk_filter_config_output_inplace()

int ff_vk_filter_config_output_inplace ( AVFilterLink outlink)

Definition at line 675 of file vulkan.c.

◆ ff_vk_filter_uninit()

void ff_vk_filter_uninit ( AVFilterContext avctx)

◆ 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 the image is any sort of supported RGB.

Definition at line 805 of file vulkan.c.

Referenced by scale_vulkan_config_output().

◆ ff_vk_shader_rep_fmt()

const char* ff_vk_shader_rep_fmt ( enum AVPixelFormat  pixfmt)

Gets the glsl format string for a pixel format.

Definition at line 817 of file vulkan.c.

Referenced by init_filter().

◆ ff_vk_init_sampler()

VkSampler* ff_vk_init_sampler ( AVFilterContext avctx,
int  unnorm_coords,
VkFilter  filt 
)

Create a Vulkan sampler, will be auto-freed in ff_vk_filter_uninit()

Definition at line 769 of file vulkan.c.

Referenced by init_filter().

◆ ff_vk_create_imageview()

int ff_vk_create_imageview ( AVFilterContext avctx,
FFVkExecContext e,
VkImageView *  v,
VkImage  img,
VkFormat  fmt,
const VkComponentMapping  map 
)

Create an imageview.

Guaranteed to remain alive until the queue submission has finished executing, and will be destroyed after that.

Definition at line 836 of file vulkan.c.

Referenced by process_frames().

◆ ff_vk_add_push_constant()

int ff_vk_add_push_constant ( AVFilterContext avctx,
VulkanPipeline pl,
int  offset,
int  size,
VkShaderStageFlagBits  stage 
)

Define a push constant for a given stage into a pipeline.

Must be called before the pipeline layout has been initialized.

Definition at line 318 of file vulkan.c.

Referenced by init_filter().

◆ ff_vk_create_pipeline()

VulkanPipeline* ff_vk_create_pipeline ( AVFilterContext avctx)

Inits a pipeline.

Everything in it will be auto-freed when calling ff_vk_filter_uninit().

Definition at line 1276 of file vulkan.c.

Referenced by init_filter().

◆ ff_vk_init_shader()

SPIRVShader* ff_vk_init_shader ( AVFilterContext avctx,
VulkanPipeline pl,
const char *  name,
VkShaderStageFlags  stage 
)

Inits a shader for a specific pipeline.

Will be auto-freed on uninit.

Definition at line 888 of file vulkan.c.

Referenced by init_filter().

◆ ff_vk_set_compute_shader_sizes()

void ff_vk_set_compute_shader_sizes ( AVFilterContext avctx,
SPIRVShader shd,
int  local_size[3] 
)

Writes the workgroup size for a shader.

Definition at line 909 of file vulkan.c.

Referenced by init_filter().

◆ ff_vk_add_descriptor_set()

int ff_vk_add_descriptor_set ( AVFilterContext avctx,
VulkanPipeline pl,
SPIRVShader shd,
VulkanDescriptorSetBinding desc,
int  num,
int  only_print_to_shader 
)

Adds a descriptor set to the shader and registers them in the pipeline.

Definition at line 1020 of file vulkan.c.

Referenced by init_filter().

◆ ff_vk_compile_shader()

int ff_vk_compile_shader ( AVFilterContext avctx,
SPIRVShader shd,
const char *  entrypoint 
)

Compiles the shader, entrypoint must be set to "main".

Definition at line 942 of file vulkan.c.

Referenced by init_filter().

◆ ff_vk_init_pipeline_layout()

int ff_vk_init_pipeline_layout ( AVFilterContext avctx,
VulkanPipeline pl 
)

Initializes the pipeline layout after all shaders and descriptor sets have been finished.

Definition at line 1180 of file vulkan.c.

Referenced by init_filter().

◆ ff_vk_init_compute_pipeline()

int ff_vk_init_compute_pipeline ( AVFilterContext avctx,
VulkanPipeline pl 
)

Initializes a compute pipeline.

Will pick the first shader with the COMPUTE flag set.

Definition at line 1281 of file vulkan.c.

Referenced by init_filter().

◆ ff_vk_update_descriptor_set()

void ff_vk_update_descriptor_set ( AVFilterContext avctx,
VulkanPipeline pl,
int  set_id 
)

Updates a descriptor set via the updaters defined.

Can be called immediately after pipeline creation, but must be called at least once before queue submission.

Definition at line 1160 of file vulkan.c.

Referenced by init_filter(), and process_frames().

◆ ff_vk_create_exec_ctx()

int ff_vk_create_exec_ctx ( AVFilterContext avctx,
FFVkExecContext **  ctx 
)

Init an execution context for command recording and queue submission.

WIll be auto-freed on uninit.

Definition at line 339 of file vulkan.c.

Referenced by init_filter().

◆ ff_vk_start_exec_recording()

int ff_vk_start_exec_recording ( AVFilterContext avctx,
FFVkExecContext e 
)

Begin recording to the command buffer.

Previous execution must have been completed, which ff_vk_submit_exec_queue() will ensure.

Definition at line 417 of file vulkan.c.

Referenced by process_frames().

◆ ff_vk_bind_pipeline_exec()

void ff_vk_bind_pipeline_exec ( AVFilterContext avctx,
FFVkExecContext e,
VulkanPipeline pl 
)

Add a command to bind the completed pipeline and its descriptor sets.

Must be called after ff_vk_start_exec_recording() and before submission.

Definition at line 1316 of file vulkan.c.

Referenced by process_frames().

◆ ff_vk_update_push_exec()

void ff_vk_update_push_exec ( AVFilterContext avctx,
FFVkExecContext e,
VkShaderStageFlagBits  stage,
int  offset,
size_t  size,
void src 
)

Updates push constants.

Must be called after binding a pipeline if any push constants were defined.

Definition at line 1171 of file vulkan.c.

Referenced by process_frames().

◆ ff_vk_get_exec_buf()

VkCommandBuffer ff_vk_get_exec_buf ( AVFilterContext avctx,
FFVkExecContext e 
)

Gets the command buffer to use for this submission from the exe context.

Definition at line 458 of file vulkan.c.

Referenced by process_frames().

◆ ff_vk_add_dep_exec_ctx()

int ff_vk_add_dep_exec_ctx ( AVFilterContext avctx,
FFVkExecContext e,
AVBufferRef **  deps,
int  nb_deps 
)

Adds a generic AVBufferRef as a queue depenency.

Definition at line 561 of file vulkan.c.

Referenced by ff_vk_create_imageview().

◆ ff_vk_discard_exec_deps()

void ff_vk_discard_exec_deps ( AVFilterContext avctx,
FFVkExecContext e 
)

Discards all queue dependencies.

Definition at line 400 of file vulkan.c.

Referenced by ff_vk_add_dep_exec_ctx(), ff_vk_add_exec_dep(), ff_vk_start_exec_recording(), and process_frames().

◆ ff_vk_add_exec_dep()

int ff_vk_add_exec_dep ( AVFilterContext avctx,
FFVkExecContext e,
AVFrame frame,
VkPipelineStageFlagBits  in_wait_dst_flag 
)

Adds a frame as a queue dependency.

This also manages semaphore signalling. Must be called before submission.

Definition at line 464 of file vulkan.c.

Referenced by process_frames().

◆ ff_vk_submit_exec_queue()

int ff_vk_submit_exec_queue ( AVFilterContext avctx,
FFVkExecContext e 
)

Submits a command buffer to the queue for execution.

Will block until execution has finished in order to simplify resource management.

Definition at line 522 of file vulkan.c.

Referenced by process_frames().

◆ ff_vk_create_buf()

int ff_vk_create_buf ( AVFilterContext avctx,
FFVkBuffer buf,
size_t  size,
VkBufferUsageFlags  usage,
VkMemoryPropertyFlagBits  flags 
)

Create a VkBuffer with the specified parameters.

Definition at line 150 of file vulkan.c.

Referenced by init_filter().

◆ ff_vk_map_buffers()

int ff_vk_map_buffers ( AVFilterContext avctx,
FFVkBuffer buf,
uint8_t mem[],
int  nb_buffers,
int  invalidate 
)

Maps the buffer to userspace.

Set invalidate to 1 if reading the contents is necessary.

Definition at line 215 of file vulkan.c.

Referenced by init_filter().

◆ ff_vk_unmap_buffers()

int ff_vk_unmap_buffers ( AVFilterContext avctx,
FFVkBuffer buf,
int  nb_buffers,
int  flush 
)

Unmaps the buffer from userspace.

Set flush to 1 to write and sync.

Definition at line 264 of file vulkan.c.

Referenced by init_filter().

◆ ff_vk_free_buf()

void ff_vk_free_buf ( AVFilterContext avctx,
FFVkBuffer buf 
)

Frees a buffer.

Definition at line 306 of file vulkan.c.

Referenced by overlay_vulkan_uninit(), and scale_vulkan_uninit().

Variable Documentation

◆ ff_comp_identity_map

const VkComponentMapping ff_comp_identity_map

Definition at line 44 of file vulkan.c.

Referenced by process_frames().

D
D(D(float, sse)
Definition: rematrix_init.c:28
fail
#define fail()
Definition: checkasm.h:123
x
FFmpeg Automated Testing Environment ************************************Introduction Using FATE from your FFmpeg source directory Submitting the results to the FFmpeg result aggregation server Uploading new samples to the fate suite FATE makefile targets and variables Makefile targets Makefile variables Examples Introduction **************FATE is an extended regression suite on the client side and a means for results aggregation and presentation on the server side The first part of this document explains how you can use FATE from your FFmpeg source directory to test your ffmpeg binary The second part describes how you can run FATE to submit the results to FFmpeg’s FATE server In any way you can have a look at the publicly viewable FATE results by visiting this as it can be seen if some test on some platform broke with their recent contribution This usually happens on the platforms the developers could not test on The second part of this document describes how you can run FATE to submit your results to FFmpeg’s FATE server If you want to submit your results be sure to check that your combination of OS and compiler is not already listed on the above mentioned website In the third part you can find a comprehensive listing of FATE makefile targets and variables Using FATE from your FFmpeg source directory **********************************************If you want to run FATE on your machine you need to have the samples in place You can get the samples via the build target fate rsync Use this command from the top level source this will cause FATE to fail NOTE To use a custom wrapper to run the pass ‘ target exec’ to ‘configure’ or set the TARGET_EXEC Make variable Submitting the results to the FFmpeg result aggregation server ****************************************************************To submit your results to the server you should run fate through the shell script ‘tests fate sh’ from the FFmpeg sources This script needs to be invoked with a configuration file as its first argument tests fate sh path to fate_config A configuration file template with comments describing the individual configuration variables can be found at ‘doc fate_config sh template’ Create a configuration that suits your based on the configuration template The ‘slot’ configuration variable can be any string that is not yet but it is suggested that you name it adhering to the following pattern ‘ARCH OS COMPILER COMPILER VERSION’ The configuration file itself will be sourced in a shell therefore all shell features may be used This enables you to setup the environment as you need it for your build For your first test runs the ‘fate_recv’ variable should be empty or commented out This will run everything as normal except that it will omit the submission of the results to the server The following files should be present in $workdir as specified in the configuration it may help to try out the ‘ssh’ command with one or more ‘ v’ options You should get detailed output concerning your SSH configuration and the authentication process The only thing left is to automate the execution of the fate sh script and the synchronisation of the samples directory Uploading new samples to the fate suite *****************************************If you need a sample uploaded send a mail to samples request This is for developers who have an account on the fate suite server If you upload new please make sure they are as small as space on each network bandwidth and so on benefit from smaller test cases Also keep in mind older checkouts use existing sample that means in practice generally do not remove or overwrite files as it likely would break older checkouts or releases Also all needed samples for a commit should be ideally before the push If you need an account for frequently uploading samples or you wish to help others by doing that send a mail to ffmpeg devel rsync vauL Duo x
Definition: fate.txt:150
GLSLC
#define GLSLC(N, S)
Definition: vulkan.h:38