1
mirror of https://github.com/mpv-player/mpv synced 2024-10-30 04:46:41 +01:00

vo_gpu: vulkan: Add arbitrary user data for an ra_vk_buf

This is arguably a little contrived, but in the case of CUDA interop,
we have to track additional state on the cuda side for each exported
buffer. If we want to be able to manage buffers with an ra_buf_pool,
we need some way to keep that CUDA state associated with each created
buffer. The easiest way to do that is to attach it directly to the
buffers.
This commit is contained in:
Philip Langdale 2018-10-14 17:37:05 -07:00 committed by sfan5
parent 93f800a00f
commit a782197d21
2 changed files with 18 additions and 0 deletions

View File

@ -693,8 +693,20 @@ struct ra_buf_vk {
// "current" metadata, can change during course of execution
VkPipelineStageFlags current_stage;
VkAccessFlags current_access;
// Arbitrary user data for the creator of a buffer
void *user_data;
};
void ra_vk_buf_set_user_data(struct ra_buf *buf, void *user_data) {
struct ra_buf_vk *vk_priv = buf->priv;
vk_priv->user_data = user_data;
}
void *ra_vk_buf_get_user_data(struct ra_buf *buf) {
struct ra_buf_vk *vk_priv = buf->priv;
return vk_priv->user_data;
}
static void vk_buf_deref(struct ra *ra, struct ra_buf *buf)
{
if (!buf)

View File

@ -43,3 +43,9 @@ struct vk_external_mem {
// Export an ra_buf for importing by another api.
bool ra_vk_buf_get_external_info(struct ra *ra, struct ra_buf *buf, struct vk_external_mem *ret);
// Set the buffer user data
void ra_vk_buf_set_user_data(struct ra_buf *buf, void *priv);
// Get the buffer user data
void *ra_vk_buf_get_user_data(struct ra_buf *buf);