Mar 18, 2024, 06:57 by haihao.xiang-at-intel....@ffmpeg.org: > On Vr, 2024-03-08 at 15:13 +0800, Xiang, Haihao wrote: > >> From: Haihao Xiang <haihao.xi...@intel.com> >> >> Otherwise the derived device and the source device might have different >> PCI ID or vendor ID in a multiple-device system. >> >> Signed-off-by: Haihao Xiang <haihao.xi...@intel.com> >> --- >> libavutil/hwcontext_vulkan.c | 31 +++++++++++++++++++++++++++++-- >> 1 file changed, 29 insertions(+), 2 deletions(-) >> >> diff --git a/libavutil/hwcontext_vulkan.c b/libavutil/hwcontext_vulkan.c >> index 855f099e26..9d94f74d78 100644 >> --- a/libavutil/hwcontext_vulkan.c >> +++ b/libavutil/hwcontext_vulkan.c >> @@ -975,6 +975,20 @@ static int find_device(AVHWDeviceContext *ctx, >> VulkanDeviceSelection *select) >> select->name); >> err = AVERROR(ENODEV); >> goto end; >> + } else if (select->vendor_id && select->pci_device) { >> + av_log(ctx, AV_LOG_VERBOSE, "Requested vendor:device %04x:%04x\n", >> + select->vendor_id, select->pci_device); >> + for (int i = 0; i < num; i++) { >> + if (select->vendor_id == prop[i].properties.vendorID && >> + select->pci_device == prop[i].properties.deviceID) { >> + choice = i; >> + goto end; >> + } >> + } >> + av_log(ctx, AV_LOG_ERROR, "Unable to find device with vendor ID 0x%x >> " >> + "and PCI ID 0x%x!\n", select->vendor_id, select->pci_device); >> + err = AVERROR(EINVAL); >> + goto end; >> } else if (select->pci_device) { >> av_log(ctx, AV_LOG_VERBOSE, "Requested device: 0x%x\n", select- >> >pci_device); >> for (int i = 0; i < num; i++) { >> @@ -1597,8 +1611,14 @@ static int vulkan_device_derive(AVHWDeviceContext >> *ctx, >> #if CONFIG_VAAPI >> case AV_HWDEVICE_TYPE_VAAPI: { >> AVVAAPIDeviceContext *src_hwctx = src_ctx->hwctx; >> - >> - const char *vendor = vaQueryVendorString(src_hwctx->display); >> + VADisplay dpy = src_hwctx->display; >> +#if VA_CHECK_VERSION(1, 15, 0) >> + VAStatus vas; >> + VADisplayAttribute attr = { >> + .type = VADisplayPCIID, >> + }; >> +#endif >> + const char *vendor = vaQueryVendorString(dpy); >> if (!vendor) { >> av_log(ctx, AV_LOG_ERROR, "Unable to get device info from >> VAAPI!\n"); >> return AVERROR_EXTERNAL; >> @@ -1607,6 +1627,13 @@ static int vulkan_device_derive(AVHWDeviceContext >> *ctx, >> if (strstr(vendor, "AMD")) >> dev_select.vendor_id = 0x1002; >> >> +#if VA_CHECK_VERSION(1, 15, 0) >> + vas = vaGetDisplayAttributes(dpy, &attr, 1); >> + if (vas == VA_STATUS_SUCCESS && attr.flags != >> VA_DISPLAY_ATTRIB_NOT_SUPPORTED) { >> + dev_select.vendor_id = ((attr.value >> 16) & 0xFFFF); >> + dev_select.pci_device = (attr.value & 0xFFFF); >> + } >> +#endif >> return vulkan_device_create_internal(ctx, &dev_select, 0, opts, >> flags); >> } >> #endif >> > > Hi, > > Any comment for this patch ? >
Is this possible? For two devices from different vendors to have the same PCI ID? _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".