From patchwork Thu Oct 3 05:51:28 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lynne X-Patchwork-Id: 51989 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:b18c:0:b0:48e:c0f8:d0de with SMTP id q12csp145675vqn; Wed, 2 Oct 2024 22:51:55 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWMWkx9HhExlCGZIHoIPr3mJBfHEzkZZAB/MK2cjj+XkELnWhTQ4rHJZ7UdfkREj8dO21rHhnhyt675Xkfzz79X@gmail.com X-Google-Smtp-Source: AGHT+IE1CFR91oXNXSNWwGh9cc7d6IDumsSaxtt/ZfHWKNSLQGbbA3vwtSy+w9Di1dS/O/u/Lj8R X-Received: by 2002:a2e:be0d:0:b0:2fa:c396:1c36 with SMTP id 38308e7fff4ca-2fae1026b30mr34491441fa.20.1727934715428; Wed, 02 Oct 2024 22:51:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1727934715; cv=none; d=google.com; s=arc-20240605; b=YBjo4Q2zjR1l9Ft2CXYr/HISXB1o6lC9ZLJhH8qG0rVy0gBuc3TGztSOfZ5JSz7tFT olA+2I4E64/bixmcrZjyNuqxUDaVroBBRJI0bdIuWZvSrbrmSnsvncV7rjBJ+MAeZ6Qk /vMMmlGIelrFsMp7HRsKkYOKvc0NmwY04IqfK6oSdxSsARf30ujm19SXsbSuiCPSN5y9 AtNvNOyHSAbzDhMoJWRVSSr+98wE1HJXD7WMfhqm9e64Xv2alLG7vIkgZNm1bt0yZhtM 5YyACwKSPIYiwvvT0IUpAfnkucoFgxXyPUUjW1spfurKtOyzR5tmhQtEsrQHuVs/F4hW 7deA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:content-transfer-encoding:cc:reply-to:from :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:message-id:date:to :delivered-to; bh=jnnSCtMhsxPB8/65eUnsrzzykygw4aTCsZNdKmnvosA=; fh=nenT92/WZoU6unXd3J6UhGUdod4piddKfVtctNBOh6k=; b=GtQZb6e/a2UoUMi586tubJowYBRZhnOu+aHW0dXIQQLWVlzFNoDe455ZB25H+YxqWy BDbPTgDN6EvC716H+OkeXPs6z8SBKwnA/3VwUP+eCqR76mSxlVr9d65QA5eIBVbbtXuE lWGJRDJ4b8UcSybiCxr1c4C/G7jaLsDubvgizqIFsE4TmRJBxzRTtTTRvetRQ8zfsPW3 PQhQEe/FgPmZX1iVtDSgTDyB0trHdh4F05r6ibwAxS2g85ylsmleuJDwSOajqCeo02VG i/1LQlr7ud/IX5MgEcMKiBbo3UWqTKpEH4KQRTuJZRd0TCYfYlrJ6HzqnR195xIvlLp0 qErw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 38308e7fff4ca-2faecc02bd4si2363251fa.156.2024.10.02.22.51.54; Wed, 02 Oct 2024 22:51:55 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 901A568D63C; Thu, 3 Oct 2024 08:51:50 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from vidala.lynne.ee (vidala.pars.ee [116.203.72.101]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 45E5768C1B2 for ; Thu, 3 Oct 2024 08:51:44 +0300 (EEST) To: ffmpeg-devel@ffmpeg.org Date: Thu, 3 Oct 2024 07:51:28 +0200 Message-ID: <20241003055141.415483-1-dev@lynne.ee> X-Mailer: git-send-email 2.45.2.753.g447d99e1c3b MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/8] vulkan: always enable GL_EXT_scalar_block_layout X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Lynne via ffmpeg-devel From: Lynne Reply-To: FFmpeg development discussions and patches Cc: Lynne Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 6G9RZZsT3CuR This makes std430 (which we use everywhere already) fully match C layout. Extension was made mandatory in 1.2. --- libavutil/hwcontext_vulkan.c | 1 + libavutil/vulkan.c | 1 + 2 files changed, 2 insertions(+) diff --git a/libavutil/hwcontext_vulkan.c b/libavutil/hwcontext_vulkan.c index f6d6ff6cb1..d6500de677 100644 --- a/libavutil/hwcontext_vulkan.c +++ b/libavutil/hwcontext_vulkan.c @@ -1501,6 +1501,7 @@ static int vulkan_device_create_internal(AVHWDeviceContext *ctx, p->device_features_1_1.uniformAndStorageBuffer16BitAccess = dev_features_1_1.uniformAndStorageBuffer16BitAccess; p->device_features_1_2.timelineSemaphore = 1; + p->device_features_1_2.scalarBlockLayout = dev_features_1_2.scalarBlockLayout; p->device_features_1_2.bufferDeviceAddress = dev_features_1_2.bufferDeviceAddress; p->device_features_1_2.hostQueryReset = dev_features_1_2.hostQueryReset; p->device_features_1_2.storagePushConstant8 = dev_features_1_2.storagePushConstant8; diff --git a/libavutil/vulkan.c b/libavutil/vulkan.c index 1dc168e645..c6aa6cdd10 100644 --- a/libavutil/vulkan.c +++ b/libavutil/vulkan.c @@ -1478,6 +1478,7 @@ int ff_vk_shader_init(FFVulkanContext *s, FFVulkanShader *shd, const char *name, /* Common utilities */ GLSLC(0, #define IS_WITHIN(v1, v2) ((v1.x < v2.x) && (v1.y < v2.y)) ); GLSLC(0, ); + GLSLC(0, #extension GL_EXT_scalar_block_layout : require ); GLSLC(0, #extension GL_EXT_buffer_reference : require ); GLSLC(0, #extension GL_EXT_buffer_reference2 : require ); From patchwork Thu Oct 3 05:51:29 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lynne X-Patchwork-Id: 51990 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:b18c:0:b0:48e:c0f8:d0de with SMTP id q12csp145718vqn; Wed, 2 Oct 2024 22:52:04 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUk78Tc4mGWz/TCCpkIHeio6/l1r/bT6ImevZoc0ifa94RHEdMgE65zygq52cDUjqNF9cUsdbQEH1pWU7NraGQm@gmail.com X-Google-Smtp-Source: AGHT+IHCqw5AFHpEFT2zZN8CzQdyGS7M9Gls1fV9enU4rihj2Lfe68+lS4cBVkyNMiKBRDXcYnC6 X-Received: by 2002:a05:6512:2213:b0:52f:cc06:c483 with SMTP id 2adb3069b0e04-539a0664d47mr2830937e87.24.1727934724693; Wed, 02 Oct 2024 22:52:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1727934724; cv=none; d=google.com; s=arc-20240605; b=QJ2pzc0V/zvtprFRC02Wflq1x4w6F6v1dkCSClyVZx8boDaemh3jMkNzA4v6QaCj7G /bi+Xv+ItCh+NtDDSDLBceHfDYBVMJoJoV+SLlXloCWBvLahHoZUoEi/uQcHzh+EZfaV 9zNFwe9naZ67vJLzJ95JkeHCzy9kWcGT+egsXlo7OKpv+c5QDqw4KwhOr0DprV78dELk 7X3Thvl1G5fVImjnQOVvEsNqdWQqXFZF9tSD4d05110Rfj+MMGDLJwfKYrHwxEvEhQlN CCoF46Ii+hoTfL649zxrxrw3VcHrvgjMOnx4EWS1f11p9k5PW0F+nsqn4l+0GoJ35o/g cdQA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:content-transfer-encoding:cc:reply-to:from :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:delivered-to; bh=nXSdeJFYa3XK7jZ+4Qm4wJcFXaM909pfCidxfhO11kY=; fh=nenT92/WZoU6unXd3J6UhGUdod4piddKfVtctNBOh6k=; b=jZrkAz6mhaUUQN3Yub81osq904tqiTEmsN8n9GC5ZJmK6348p+bdAcg/HuQ8NT05CP obEU4aBPYYHgzuvwhnl7/a4w6NJs6HP9LZjuV9iYPfikZ72XJlM51K1QVOwPacotgxjT 3yC1gAafUf+gigWCTnOUbRkjkCvM1o8l+XazMFH+yztPM0ihO6KR8g99rW2z+pXmuEvb hJhbhY+ctMsFcASKHSxr4ZnLvTwQAO2v1Lu0psIQ1xc2xOCIP5VVBIimu14u25ajYPya 7h7l3PMhe1zrMnrNgUH8lzVlav1ZfegpjkzbHBlN/82ijw0S6sKZKmLId9wzKYgmD4UU oOKg==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 4fb4d7f45d1cf-5c8ca47d6bfsi393648a12.233.2024.10.02.22.52.04; Wed, 02 Oct 2024 22:52:04 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A5CB668DA3B; Thu, 3 Oct 2024 08:51:51 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from vidala.lynne.ee (vidala.pars.ee [116.203.72.101]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 48E4F68D70B for ; Thu, 3 Oct 2024 08:51:44 +0300 (EEST) To: ffmpeg-devel@ffmpeg.org Date: Thu, 3 Oct 2024 07:51:29 +0200 Message-ID: <20241003055141.415483-2-dev@lynne.ee> X-Mailer: git-send-email 2.45.2.753.g447d99e1c3b In-Reply-To: <20241003055141.415483-1-dev@lynne.ee> References: <20241003055141.415483-1-dev@lynne.ee> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/8] vulkan_functions: change extension type to a typedef uint64_t X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Lynne via ffmpeg-devel From: Lynne Reply-To: FFmpeg development discussions and patches Cc: Lynne Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: vO65ttTB1r5g We were getting a bit too close for comfort to the 32-bit limit on enums. --- libavutil/vulkan_functions.h | 59 +++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 27 deletions(-) diff --git a/libavutil/vulkan_functions.h b/libavutil/vulkan_functions.h index 90e4d0004d..c565d62335 100644 --- a/libavutil/vulkan_functions.h +++ b/libavutil/vulkan_functions.h @@ -26,37 +26,42 @@ #include "hwcontext_vulkan.h" /* An enum of bitflags for every optional extension we need */ -typedef enum FFVulkanExtensions { - FF_VK_EXT_EXTERNAL_DMABUF_MEMORY = 1ULL << 0, /* VK_EXT_external_memory_dma_buf */ - FF_VK_EXT_DRM_MODIFIER_FLAGS = 1ULL << 1, /* VK_EXT_image_drm_format_modifier */ - FF_VK_EXT_EXTERNAL_FD_MEMORY = 1ULL << 2, /* VK_KHR_external_memory_fd */ - FF_VK_EXT_EXTERNAL_FD_SEM = 1ULL << 3, /* VK_KHR_external_semaphore_fd */ - FF_VK_EXT_EXTERNAL_HOST_MEMORY = 1ULL << 4, /* VK_EXT_external_memory_host */ - FF_VK_EXT_DEBUG_UTILS = 1ULL << 5, /* VK_EXT_debug_utils */ +typedef uint64_t FFVulkanExtensions; + +#define FF_VK_EXT_EXTERNAL_DMABUF_MEMORY (1ULL << 0) /* VK_EXT_external_memory_dma_buf */ +#define FF_VK_EXT_DRM_MODIFIER_FLAGS (1ULL << 1) /* VK_EXT_image_drm_format_modifier */ +#define FF_VK_EXT_EXTERNAL_FD_MEMORY (1ULL << 2) /* VK_KHR_external_memory_fd */ +#define FF_VK_EXT_EXTERNAL_FD_SEM (1ULL << 3) /* VK_KHR_external_semaphore_fd */ +#define FF_VK_EXT_EXTERNAL_HOST_MEMORY (1ULL << 4) /* VK_EXT_external_memory_host */ +#define FF_VK_EXT_DEBUG_UTILS (1ULL << 5) /* VK_EXT_debug_utils */ + #ifdef _WIN32 - FF_VK_EXT_EXTERNAL_WIN32_MEMORY = 1ULL << 6, /* VK_KHR_external_memory_win32 */ - FF_VK_EXT_EXTERNAL_WIN32_SEM = 1ULL << 7, /* VK_KHR_external_semaphore_win32 */ +#define FF_VK_EXT_EXTERNAL_WIN32_MEMORY (1ULL << 6) /* VK_KHR_external_memory_win32 */ +#define FF_VK_EXT_EXTERNAL_WIN32_SEM (1ULL << 7) /* VK_KHR_external_semaphore_win32 */ #endif - FF_VK_EXT_DESCRIPTOR_BUFFER = 1ULL << 8, /* VK_EXT_descriptor_buffer */ - FF_VK_EXT_DEVICE_DRM = 1ULL << 9, /* VK_EXT_physical_device_drm */ - FF_VK_EXT_VIDEO_QUEUE = 1ULL << 10, /* VK_KHR_video_queue */ - FF_VK_EXT_VIDEO_DECODE_QUEUE = 1ULL << 11, /* VK_KHR_video_decode_queue */ - FF_VK_EXT_VIDEO_DECODE_H264 = 1ULL << 12, /* VK_EXT_video_decode_h264 */ - FF_VK_EXT_VIDEO_DECODE_H265 = 1ULL << 13, /* VK_EXT_video_decode_h265 */ - FF_VK_EXT_VIDEO_DECODE_AV1 = 1ULL << 14, /* VK_KHR_video_decode_av1 */ - FF_VK_EXT_ATOMIC_FLOAT = 1ULL << 15, /* VK_EXT_shader_atomic_float */ - FF_VK_EXT_COOP_MATRIX = 1ULL << 16, /* VK_KHR_cooperative_matrix */ - FF_VK_EXT_OPTICAL_FLOW = 1ULL << 17, /* VK_NV_optical_flow */ - FF_VK_EXT_SHADER_OBJECT = 1ULL << 18, /* VK_EXT_shader_object */ - FF_VK_EXT_PUSH_DESCRIPTOR = 1ULL << 19, /* VK_KHR_push_descriptor */ - FF_VK_EXT_VIDEO_MAINTENANCE_1 = 1ULL << 27, /* VK_KHR_video_maintenance1 */ - FF_VK_EXT_VIDEO_ENCODE_QUEUE = 1ULL << 28, /* VK_KHR_video_encode_queue */ - FF_VK_EXT_VIDEO_ENCODE_H264 = 1ULL << 29, /* VK_KHR_video_encode_h264 */ - FF_VK_EXT_VIDEO_ENCODE_H265 = 1ULL << 30, /* VK_KHR_video_encode_h265 */ +#define FF_VK_EXT_DESCRIPTOR_BUFFER (1ULL << 8) /* VK_EXT_descriptor_buffer */ +#define FF_VK_EXT_DEVICE_DRM (1ULL << 9) /* VK_EXT_physical_device_drm */ +#define FF_VK_EXT_ATOMIC_FLOAT (1ULL << 10) /* VK_EXT_shader_atomic_float */ +#define FF_VK_EXT_COOP_MATRIX (1ULL << 11) /* VK_KHR_cooperative_matrix */ +#define FF_VK_EXT_OPTICAL_FLOW (1ULL << 12) /* VK_NV_optical_flow */ +#define FF_VK_EXT_SHADER_OBJECT (1ULL << 13) /* VK_EXT_shader_object */ +#define FF_VK_EXT_PUSH_DESCRIPTOR (1ULL << 14) /* VK_KHR_push_descriptor */ + +/* Video extensions */ +#define FF_VK_EXT_VIDEO_QUEUE (1ULL << 36) /* VK_KHR_video_queue */ +#define FF_VK_EXT_VIDEO_MAINTENANCE_1 (1ULL << 37) /* VK_KHR_video_maintenance1 */ + +#define FF_VK_EXT_VIDEO_DECODE_QUEUE (1ULL << 40) /* VK_KHR_video_decode_queue */ +#define FF_VK_EXT_VIDEO_DECODE_H264 (1ULL << 41) /* VK_KHR_video_decode_h264 */ +#define FF_VK_EXT_VIDEO_DECODE_H265 (1ULL << 42) /* VK_KHR_video_decode_h265 */ +#define FF_VK_EXT_VIDEO_DECODE_AV1 (1ULL << 43) /* VK_KHR_video_decode_av1 */ + +#define FF_VK_EXT_VIDEO_ENCODE_QUEUE (1ULL << 50) /* VK_KHR_video_encode_queue */ +#define FF_VK_EXT_VIDEO_ENCODE_H264 (1ULL << 51) /* VK_KHR_video_encode_h264 */ +#define FF_VK_EXT_VIDEO_ENCODE_H265 (1ULL << 52) /* VK_KHR_video_encode_h265 */ - FF_VK_EXT_NO_FLAG = 1ULL << 31, -} FFVulkanExtensions; +#define FF_VK_EXT_NO_FLAG (1ULL << 63) /* Macro containing every function that we utilize in our codebase */ #define FN_LIST(MACRO) \ From patchwork Thu Oct 3 05:51:30 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lynne X-Patchwork-Id: 51991 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:b18c:0:b0:48e:c0f8:d0de with SMTP id q12csp145775vqn; Wed, 2 Oct 2024 22:52:15 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUw5dcu6TGqE2Wptjg40taYL3Bhcj/qxTy/X2KSo3y92/RTfMgRnSY1VEJMbIemX6Ix9V1CQlkT47v2yH0HP+UM@gmail.com X-Google-Smtp-Source: AGHT+IGcn0VvuKHzwDL4CBU1vV4+KQG0bG72CiMB2AzKLWfFyfWOTSC+/vgxLO1O43+o43tzO+82 X-Received: by 2002:a05:6402:27cc:b0:5c3:eb29:50c5 with SMTP id 4fb4d7f45d1cf-5c8b1b9188cmr1620006a12.9.1727934734875; Wed, 02 Oct 2024 22:52:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1727934734; cv=none; d=google.com; s=arc-20240605; b=EbgN828jhiLuu5/JIvMBoaXDRgH64iHzICGPHu4KXUfyvtLjPK6ttZBNyOSNGMGs0w 1Mhyk/UJKFikUv7HBaoxqFT5kGuLNu2vmehOcHMIWnGCg9D8ArymysvkxAfWrR1YWM1g JNzkYTvBr5BZ8oZaqQxIvMc9j0ebJp7bjcuH9G1Lm9aTvAjqwWx6L8UzAGDvASnTEnSS dRTxr2bcaRxe3otHCA5PgxpHo2TKxguV3FH8Hd3gl52BNY19wPxYlKRy7UeXVFCoHks9 P12EJ0xzhzKXKoQ+S8XMZj0ssMyjFAhYfOu3QL1Nqn7Cia9jAAcu0EeAS3QBGcydphyo xKfg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:content-transfer-encoding:cc:reply-to:from :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:delivered-to; bh=kwOxVv2oqdUJUAIEQ5DtSOaVpvw1BZJyIlOzeYbilmU=; fh=nenT92/WZoU6unXd3J6UhGUdod4piddKfVtctNBOh6k=; b=iWkAtcm6E4DY74j4AqRg+0g8728/qxRFTSA7HMTI7meDh3nobg4vbzYcwk44fx/RfE PxTfjhd5HxQsBmN8xWCUd9BvKndT/zvdwcp4nsygf0pj7EvKseYAR8dQHeiobwAdP3V8 GMMP1SUQaWvs9rDRLU9WirF8Qt5dldKZXQNpFyinirnm7YPRqi3DWvlcf6TtcROI5sdM T5lrpdhZEM5vXBJ+ZZIIcOU6In5IzfQo6m8+DDSrZpBb8ChkksapH25qZtVTkHnyuS5v UdlYhEwFcrrCpsvZTvIqjf8Z0CrJI91Rj4T6NvO514V3iqSrendhhQW2FHPCnFlYY2xT bSjA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 4fb4d7f45d1cf-5c8ca47cc8csi362242a12.223.2024.10.02.22.52.14; Wed, 02 Oct 2024 22:52:14 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id BA7F468DA6B; Thu, 3 Oct 2024 08:51:52 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from vidala.lynne.ee (vidala.pars.ee [116.203.72.101]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7391B68D75F for ; Thu, 3 Oct 2024 08:51:44 +0300 (EEST) To: ffmpeg-devel@ffmpeg.org Date: Thu, 3 Oct 2024 07:51:30 +0200 Message-ID: <20241003055141.415483-3-dev@lynne.ee> X-Mailer: git-send-email 2.45.2.753.g447d99e1c3b In-Reply-To: <20241003055141.415483-1-dev@lynne.ee> References: <20241003055141.415483-1-dev@lynne.ee> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/8] hwcontext_vulkan: enable VK_KHR_shader_relaxed_extended_instruction X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Lynne via ffmpeg-devel From: Lynne Reply-To: FFmpeg development discussions and patches Cc: Lynne Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: ATvsJX/9t+1B --- libavutil/hwcontext_vulkan.c | 39 ++++++++++++++++++++++++++++++++++++ libavutil/vulkan_functions.h | 1 + libavutil/vulkan_loader.h | 1 + 3 files changed, 41 insertions(+) diff --git a/libavutil/hwcontext_vulkan.c b/libavutil/hwcontext_vulkan.c index d6500de677..518c3d642b 100644 --- a/libavutil/hwcontext_vulkan.c +++ b/libavutil/hwcontext_vulkan.c @@ -100,6 +100,9 @@ typedef struct VulkanDevicePriv { VkPhysicalDeviceOpticalFlowFeaturesNV optical_flow_features; VkPhysicalDeviceShaderObjectFeaturesEXT shader_object_features; VkPhysicalDeviceVideoMaintenance1FeaturesKHR video_maint_1_features; +#ifdef VK_KHR_shader_relaxed_extended_instruction + VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR relaxed_extended_instr_features; +#endif /* Queues */ pthread_mutex_t **qf_mutex; @@ -622,6 +625,28 @@ static int check_extensions(AVHWDeviceContext *ctx, int dev, AVDictionary *opts, } } +#ifdef VK_KHR_shader_relaxed_extended_instruction + if (debug_mode == FF_VULKAN_DEBUG_PRINTF) { + tstr = VK_KHR_SHADER_RELAXED_EXTENDED_INSTRUCTION_EXTENSION_NAME; + found = 0; + for (int j = 0; j < sup_ext_count; j++) { + if (!strcmp(tstr, sup_ext[j].extensionName)) { + found = 1; + break; + } + } + if (found) { + av_log(ctx, AV_LOG_VERBOSE, "Using %s extension %s\n", mod, tstr); + ADD_VAL_TO_LIST(extension_names, extensions_found, tstr); + } else { + av_log(ctx, AV_LOG_ERROR, "Debug printf enabled, but extension \"%s\" not found!\n", + tstr); + err = AVERROR(EINVAL); + goto fail; + } +#endif + } + if (user_exts_str) { char *save, *token = av_strtok(user_exts_str, "+", &save); while (token) { @@ -1419,9 +1444,19 @@ static int vulkan_device_create_internal(AVHWDeviceContext *ctx, VkPhysicalDeviceTimelineSemaphoreFeatures timeline_features = { .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES, }; +#ifdef VK_KHR_shader_relaxed_extended_instruction + VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR relaxed_extended_instr_features = { + .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_RELAXED_EXTENDED_INSTRUCTION_FEATURES_KHR, + .pNext = &timeline_features, + }; +#endif VkPhysicalDeviceVideoMaintenance1FeaturesKHR video_maint_1_features = { .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_MAINTENANCE_1_FEATURES_KHR, +#ifdef VK_KHR_shader_relaxed_extended_instruction + .pNext = &relaxed_extended_instr_features, +#else .pNext = &timeline_features, +#endif }; VkPhysicalDeviceShaderObjectFeaturesEXT shader_object_features = { .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OBJECT_FEATURES_EXT, @@ -1535,6 +1570,10 @@ static int vulkan_device_create_internal(AVHWDeviceContext *ctx, p->shader_object_features.shaderObject = shader_object_features.shaderObject; +#ifdef VK_KHR_shader_relaxed_extended_instruction + p->relaxed_extended_instr_features.shaderRelaxedExtendedInstruction = relaxed_extended_instr_features.shaderRelaxedExtendedInstruction; +#endif + /* Find and enable extensions */ if ((err = check_extensions(ctx, 1, opts, &dev_info.ppEnabledExtensionNames, &dev_info.enabledExtensionCount, debug_mode))) { diff --git a/libavutil/vulkan_functions.h b/libavutil/vulkan_functions.h index c565d62335..7a5385381b 100644 --- a/libavutil/vulkan_functions.h +++ b/libavutil/vulkan_functions.h @@ -47,6 +47,7 @@ typedef uint64_t FFVulkanExtensions; #define FF_VK_EXT_OPTICAL_FLOW (1ULL << 12) /* VK_NV_optical_flow */ #define FF_VK_EXT_SHADER_OBJECT (1ULL << 13) /* VK_EXT_shader_object */ #define FF_VK_EXT_PUSH_DESCRIPTOR (1ULL << 14) /* VK_KHR_push_descriptor */ +#define FF_VK_EXT_RELAXED_EXTENDED_INSTR (1ULL << 15) /* VK_KHR_shader_relaxed_extended_instruction */ /* Video extensions */ #define FF_VK_EXT_VIDEO_QUEUE (1ULL << 36) /* VK_KHR_video_queue */ diff --git a/libavutil/vulkan_loader.h b/libavutil/vulkan_loader.h index 2022eb320b..3dc27c159e 100644 --- a/libavutil/vulkan_loader.h +++ b/libavutil/vulkan_loader.h @@ -40,6 +40,7 @@ static inline uint64_t ff_vk_extensions_to_mask(const char * const *extensions, const char *name; FFVulkanExtensions flag; } extension_map[] = { + { VK_KHR_SHADER_RELAXED_EXTENDED_INSTRUCTION_EXTENSION_NAME, FF_VK_EXT_RELAXED_EXTENDED_INSTR }, { VK_EXT_EXTERNAL_MEMORY_DMA_BUF_EXTENSION_NAME, FF_VK_EXT_EXTERNAL_DMABUF_MEMORY }, { VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_EXTENSION_NAME, FF_VK_EXT_DRM_MODIFIER_FLAGS }, { VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME, FF_VK_EXT_EXTERNAL_FD_MEMORY }, From patchwork Thu Oct 3 05:51:31 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lynne X-Patchwork-Id: 51992 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:b18c:0:b0:48e:c0f8:d0de with SMTP id q12csp145815vqn; Wed, 2 Oct 2024 22:52:26 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVCbsavULBE/FJzbk9Cc8aZgkI3ZWfEHo6XKwcq675YSEkAqF6b6kkF6ifGGI4J82GOPyq+S+1IOyp6VfjKwaNO@gmail.com X-Google-Smtp-Source: AGHT+IEAKKaql2h3FgrSL18FzxbnFUYXltU2aM7Ycqp/XUxV4QRmw39CcHUlBriEj5fNPXwYrw+U X-Received: by 2002:a05:6402:158d:b0:5c2:5c7f:60cb with SMTP id 4fb4d7f45d1cf-5c8b1b83123mr4014681a12.34.1727934745739; Wed, 02 Oct 2024 22:52:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1727934745; cv=none; d=google.com; s=arc-20240605; b=JcklhHJxDPOYRQ71F1umLYN5gxFk7US4MaJqaq5OTWgl/PJDgyFZKWSU2t8p7E5mdm Z+7LFnd3Gg/2MvGBqNvZCBnTeRzvgGAPVQDh+pH9/eHIy0ueMu6tO7O/0WOg4DqbP8Nq B2l9bUX1K5oScPufik2X/DeS2/rYJq8mm8lgihQQegaEuPnP5zHFvb06g8ipK2izaYu2 LRHqU0+G59GCvY0nlX4BbqSrKsqWGECU5nmM0izS0GBVxpU7TY0uyZRmpuAHgyWtHk6k N2uE+fKm16PXr0SyVeWz6nxixsT0THQeU5OcHetpcGCLv6qKlT1g5BAIjxJxme6S9eYs GBbA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:content-transfer-encoding:cc:reply-to:from :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:delivered-to; bh=qze230drBWXzRDsFnVTQRGxQL5JX0OAHzHGjU/6KYbQ=; fh=nenT92/WZoU6unXd3J6UhGUdod4piddKfVtctNBOh6k=; b=CLyjSHER9PTML+ifVeMstN6OjQafLReSCG9VZ7eLMQ760aLQnrQlAV3vArd73tJGcV 3BDhT7fyfqB01rZmxcqQ8yPXWOy3OH87pZx+4B6t0cZJ+7Ko1sjWF2XL5LtTUKeOOr/q eSSMvbUySdAZni+YwrD4gcGhR7Q1ATYwb1Jhamhz4cVG6vYss5lXX+WEIJ0F9ChkSD11 5BKfIJqrVQTzR6hecpGOTalBIoKvnM2ly9qCXmzzPDc3M/zhJ32d2XXOo8f9Z0cA1XjB xkUVshOHGAnFWW84qwwdyjSe193NrIhoYYPf8C5yqd3uKM5+WP7Im0PW092sVuZBSLSS R23A==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 4fb4d7f45d1cf-5c8ca3e2390si374339a12.147.2024.10.02.22.52.25; Wed, 02 Oct 2024 22:52:25 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1308968DA75; Thu, 3 Oct 2024 08:51:54 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from vidala.lynne.ee (vidala.pars.ee [116.203.72.101]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9B36068D70B for ; Thu, 3 Oct 2024 08:51:44 +0300 (EEST) To: ffmpeg-devel@ffmpeg.org Date: Thu, 3 Oct 2024 07:51:31 +0200 Message-ID: <20241003055141.415483-4-dev@lynne.ee> X-Mailer: git-send-email 2.45.2.753.g447d99e1c3b In-Reply-To: <20241003055141.415483-1-dev@lynne.ee> References: <20241003055141.415483-1-dev@lynne.ee> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/8] hwcontext_vulkan: move device feature struct setup to a new function X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Lynne via ffmpeg-devel From: Lynne Reply-To: FFmpeg development discussions and patches Cc: Lynne Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: vsVsh3vzHNc8 --- libavutil/hwcontext_vulkan.c | 335 ++++++++++++++++------------------- libavutil/vulkan_functions.h | 1 + 2 files changed, 156 insertions(+), 180 deletions(-) diff --git a/libavutil/hwcontext_vulkan.c b/libavutil/hwcontext_vulkan.c index 518c3d642b..9b6a6274e4 100644 --- a/libavutil/hwcontext_vulkan.c +++ b/libavutil/hwcontext_vulkan.c @@ -72,6 +72,28 @@ #define CHECK_CU(x) FF_CUDA_CHECK_DL(cuda_cu, cu, x) #endif +typedef struct VulkanDeviceFeatures { + VkPhysicalDeviceFeatures2 device; + + VkPhysicalDeviceVulkan11Features vulkan_1_1; + VkPhysicalDeviceVulkan12Features vulkan_1_2; + VkPhysicalDeviceVulkan13Features vulkan_1_3; + VkPhysicalDeviceTimelineSemaphoreFeatures timeline_semaphore; + + VkPhysicalDeviceVideoMaintenance1FeaturesKHR video_maintenance_1; + + VkPhysicalDeviceShaderObjectFeaturesEXT shader_object; + VkPhysicalDeviceCooperativeMatrixFeaturesKHR cooperative_matrix; + VkPhysicalDeviceDescriptorBufferFeaturesEXT descriptor_buffer; + VkPhysicalDeviceShaderAtomicFloatFeaturesEXT atomic_float; + + VkPhysicalDeviceOpticalFlowFeaturesNV optical_flow; + +#ifdef VK_KHR_shader_relaxed_extended_instruction + VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR relaxed_extended_instruction; +#endif +} VulkanDeviceFeatures; + typedef struct VulkanDevicePriv { /** * The public AVVulkanDeviceContext. See hwcontext_vulkan.h for it. @@ -90,19 +112,8 @@ typedef struct VulkanDevicePriv { VkPhysicalDeviceMemoryProperties mprops; VkPhysicalDeviceExternalMemoryHostPropertiesEXT hprops; - /* Features */ - VkPhysicalDeviceVulkan11Features device_features_1_1; - VkPhysicalDeviceVulkan12Features device_features_1_2; - VkPhysicalDeviceVulkan13Features device_features_1_3; - VkPhysicalDeviceDescriptorBufferFeaturesEXT desc_buf_features; - VkPhysicalDeviceShaderAtomicFloatFeaturesEXT atomic_float_features; - VkPhysicalDeviceCooperativeMatrixFeaturesKHR coop_matrix_features; - VkPhysicalDeviceOpticalFlowFeaturesNV optical_flow_features; - VkPhysicalDeviceShaderObjectFeaturesEXT shader_object_features; - VkPhysicalDeviceVideoMaintenance1FeaturesKHR video_maint_1_features; -#ifdef VK_KHR_shader_relaxed_extended_instruction - VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR relaxed_extended_instr_features; -#endif + /* Enabled features */ + VulkanDeviceFeatures feats; /* Queues */ pthread_mutex_t **qf_mutex; @@ -164,6 +175,118 @@ typedef struct AVVkFrameInternal { #endif } AVVkFrameInternal; +/* Initialize all structs in VulkanDeviceFeatures */ +static void device_features_init(AVHWDeviceContext *ctx, VulkanDeviceFeatures *feats) +{ + VulkanDevicePriv *p = ctx->hwctx; + +#define OPT_CHAIN(STRUCT_P, EXT_FLAG, TYPE) \ + do { \ + if ((EXT_FLAG == FF_VK_EXT_NO_FLAG) || \ + (p->vkctx.extensions & EXT_FLAG)) { \ + (STRUCT_P)->sType = TYPE; \ + ff_vk_link_struct(&feats->device, STRUCT_P); \ + } \ + } while (0) + + feats->device = (VkPhysicalDeviceFeatures2) { + .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2, + }; + + OPT_CHAIN(&feats->vulkan_1_1, FF_VK_EXT_NO_FLAG, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES); + OPT_CHAIN(&feats->vulkan_1_2, FF_VK_EXT_NO_FLAG, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES); + OPT_CHAIN(&feats->vulkan_1_3, FF_VK_EXT_NO_FLAG, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES); + + OPT_CHAIN(&feats->timeline_semaphore, FF_VK_EXT_PORTABILITY_SUBSET, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES); + + OPT_CHAIN(&feats->video_maintenance_1, FF_VK_EXT_VIDEO_MAINTENANCE_1, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_MAINTENANCE_1_FEATURES_KHR); + + OPT_CHAIN(&feats->shader_object, FF_VK_EXT_SHADER_OBJECT, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OBJECT_FEATURES_EXT); + OPT_CHAIN(&feats->cooperative_matrix, FF_VK_EXT_COOP_MATRIX, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_KHR); + OPT_CHAIN(&feats->descriptor_buffer, FF_VK_EXT_DESCRIPTOR_BUFFER, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_FEATURES_EXT); + OPT_CHAIN(&feats->atomic_float, FF_VK_EXT_ATOMIC_FLOAT, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT); + +#ifdef VK_KHR_shader_relaxed_extended_instruction + OPT_CHAIN(&feats->relaxed_extended_instruction, FF_VK_EXT_RELAXED_EXTENDED_INSTR, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_RELAXED_EXTENDED_INSTRUCTION_FEATURES_KHR); +#endif + + OPT_CHAIN(&feats->optical_flow, FF_VK_EXT_OPTICAL_FLOW, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPTICAL_FLOW_FEATURES_NV); +#undef OPT_CHAIN +} + +/* Copy all needed device features */ +static void device_features_copy_needed(VulkanDeviceFeatures *dst, VulkanDeviceFeatures *src) +{ +#define COPY_VAL(VAL) \ + do { \ + dst->VAL = src->VAL; \ + } while (0) \ + + COPY_VAL(device.features.shaderImageGatherExtended); + COPY_VAL(device.features.shaderStorageImageReadWithoutFormat); + COPY_VAL(device.features.shaderStorageImageWriteWithoutFormat); + COPY_VAL(device.features.fragmentStoresAndAtomics); + COPY_VAL(device.features.vertexPipelineStoresAndAtomics); + COPY_VAL(device.features.shaderInt64); + COPY_VAL(device.features.shaderInt16); + COPY_VAL(device.features.shaderFloat64); + + COPY_VAL(vulkan_1_1.samplerYcbcrConversion); + COPY_VAL(vulkan_1_1.storagePushConstant16); + COPY_VAL(vulkan_1_1.storageBuffer16BitAccess); + COPY_VAL(vulkan_1_1.uniformAndStorageBuffer16BitAccess); + + COPY_VAL(vulkan_1_2.timelineSemaphore); + COPY_VAL(vulkan_1_2.scalarBlockLayout); + COPY_VAL(vulkan_1_2.bufferDeviceAddress); + COPY_VAL(vulkan_1_2.hostQueryReset); + COPY_VAL(vulkan_1_2.storagePushConstant8); + COPY_VAL(vulkan_1_2.shaderInt8); + COPY_VAL(vulkan_1_2.storageBuffer8BitAccess); + COPY_VAL(vulkan_1_2.uniformAndStorageBuffer8BitAccess); + COPY_VAL(vulkan_1_2.shaderFloat16); + COPY_VAL(vulkan_1_2.shaderSharedInt64Atomics); + COPY_VAL(vulkan_1_2.vulkanMemoryModel); + COPY_VAL(vulkan_1_2.vulkanMemoryModelDeviceScope); + COPY_VAL(vulkan_1_2.hostQueryReset); + + COPY_VAL(vulkan_1_3.dynamicRendering); + COPY_VAL(vulkan_1_3.maintenance4); + COPY_VAL(vulkan_1_3.synchronization2); + COPY_VAL(vulkan_1_3.computeFullSubgroups); + COPY_VAL(vulkan_1_3.shaderZeroInitializeWorkgroupMemory); + COPY_VAL(vulkan_1_3.dynamicRendering); + + COPY_VAL(timeline_semaphore.timelineSemaphore); + + COPY_VAL(video_maintenance_1.videoMaintenance1); + + COPY_VAL(shader_object.shaderObject); + + COPY_VAL(cooperative_matrix.cooperativeMatrix); + + COPY_VAL(descriptor_buffer.descriptorBuffer); + COPY_VAL(descriptor_buffer.descriptorBufferPushDescriptors); + + COPY_VAL(atomic_float.shaderBufferFloat32Atomics); + COPY_VAL(atomic_float.shaderBufferFloat32AtomicAdd); + COPY_VAL(relaxed_extended_instruction.shaderRelaxedExtendedInstruction); + + COPY_VAL(optical_flow.opticalFlow); +#undef COPY_VAL +} + #define ASPECT_2PLANE (VK_IMAGE_ASPECT_PLANE_0_BIT | VK_IMAGE_ASPECT_PLANE_1_BIT) #define ASPECT_3PLANE (VK_IMAGE_ASPECT_PLANE_0_BIT | VK_IMAGE_ASPECT_PLANE_1_BIT | VK_IMAGE_ASPECT_PLANE_2_BIT) @@ -424,9 +547,9 @@ static const VulkanOptExtension optional_instance_exts[] = { static const VulkanOptExtension optional_device_exts[] = { /* Misc or required by other extensions */ - { VK_KHR_PORTABILITY_SUBSET_EXTENSION_NAME, FF_VK_EXT_NO_FLAG }, + { VK_KHR_PORTABILITY_SUBSET_EXTENSION_NAME, FF_VK_EXT_PORTABILITY_SUBSET }, { VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME, FF_VK_EXT_PUSH_DESCRIPTOR }, - { VK_EXT_DESCRIPTOR_BUFFER_EXTENSION_NAME, FF_VK_EXT_DESCRIPTOR_BUFFER, }, + { VK_EXT_DESCRIPTOR_BUFFER_EXTENSION_NAME, FF_VK_EXT_DESCRIPTOR_BUFFER }, { VK_EXT_PHYSICAL_DEVICE_DRM_EXTENSION_NAME, FF_VK_EXT_DEVICE_DRM }, { VK_EXT_SHADER_ATOMIC_FLOAT_EXTENSION_NAME, FF_VK_EXT_ATOMIC_FLOAT }, { VK_KHR_COOPERATIVE_MATRIX_EXTENSION_NAME, FF_VK_EXT_COOP_MATRIX }, @@ -1435,146 +1558,20 @@ static int vulkan_device_create_internal(AVHWDeviceContext *ctx, AVVulkanDeviceContext *hwctx = &p->p; FFVulkanFunctions *vk = &p->vkctx.vkfn; enum FFVulkanDebugMode debug_mode = FF_VULKAN_DEBUG_NONE; - - /* - * VkPhysicalDeviceVulkan12Features has a timelineSemaphore field, but - * MoltenVK doesn't implement VkPhysicalDeviceVulkan12Features yet, so we - * use VkPhysicalDeviceTimelineSemaphoreFeatures directly. - */ - VkPhysicalDeviceTimelineSemaphoreFeatures timeline_features = { - .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES, - }; -#ifdef VK_KHR_shader_relaxed_extended_instruction - VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR relaxed_extended_instr_features = { - .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_RELAXED_EXTENDED_INSTRUCTION_FEATURES_KHR, - .pNext = &timeline_features, - }; -#endif - VkPhysicalDeviceVideoMaintenance1FeaturesKHR video_maint_1_features = { - .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_MAINTENANCE_1_FEATURES_KHR, -#ifdef VK_KHR_shader_relaxed_extended_instruction - .pNext = &relaxed_extended_instr_features, -#else - .pNext = &timeline_features, -#endif - }; - VkPhysicalDeviceShaderObjectFeaturesEXT shader_object_features = { - .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OBJECT_FEATURES_EXT, - .pNext = &video_maint_1_features, - }; - VkPhysicalDeviceOpticalFlowFeaturesNV optical_flow_features = { - .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPTICAL_FLOW_FEATURES_NV, - .pNext = &shader_object_features, - }; - VkPhysicalDeviceCooperativeMatrixFeaturesKHR coop_matrix_features = { - .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_KHR, - .pNext = &optical_flow_features, - }; - VkPhysicalDeviceShaderAtomicFloatFeaturesEXT atomic_float_features = { - .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT, - .pNext = &coop_matrix_features, - }; - VkPhysicalDeviceDescriptorBufferFeaturesEXT desc_buf_features = { - .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_FEATURES_EXT, - .pNext = &atomic_float_features, - }; - VkPhysicalDeviceVulkan13Features dev_features_1_3 = { - .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES, - .pNext = &desc_buf_features, - }; - VkPhysicalDeviceVulkan12Features dev_features_1_2 = { - .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES, - .pNext = &dev_features_1_3, - }; - VkPhysicalDeviceVulkan11Features dev_features_1_1 = { - .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES, - .pNext = &dev_features_1_2, - }; - VkPhysicalDeviceFeatures2 dev_features = { - .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2, - .pNext = &dev_features_1_1, - }; - + VulkanDeviceFeatures supported_feats = { 0 }; VkDeviceCreateInfo dev_info = { .sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, }; - ctx->free = vulkan_device_free; - /* Create an instance if not given one */ if ((err = create_instance(ctx, opts, &debug_mode))) goto end; - /* Find a device (if not given one) */ + /* Find a physical device (if not given one) */ if ((err = find_device(ctx, dev_select))) goto end; - vk->GetPhysicalDeviceFeatures2(hwctx->phys_dev, &dev_features); - - /* Try to keep in sync with libplacebo */ -#define COPY_FEATURE(DST, NAME) (DST).features.NAME = dev_features.features.NAME; - COPY_FEATURE(hwctx->device_features, shaderImageGatherExtended) - COPY_FEATURE(hwctx->device_features, shaderStorageImageReadWithoutFormat) - COPY_FEATURE(hwctx->device_features, shaderStorageImageWriteWithoutFormat) - COPY_FEATURE(hwctx->device_features, fragmentStoresAndAtomics) - COPY_FEATURE(hwctx->device_features, vertexPipelineStoresAndAtomics) - COPY_FEATURE(hwctx->device_features, shaderInt64) - COPY_FEATURE(hwctx->device_features, shaderInt16) - COPY_FEATURE(hwctx->device_features, shaderFloat64) -#undef COPY_FEATURE - - /* We require timeline semaphores */ - if (!timeline_features.timelineSemaphore) { - av_log(ctx, AV_LOG_ERROR, "Device does not support timeline semaphores!\n"); - err = AVERROR(ENOSYS); - goto end; - } - - p->device_features_1_1.samplerYcbcrConversion = dev_features_1_1.samplerYcbcrConversion; - p->device_features_1_1.storagePushConstant16 = dev_features_1_1.storagePushConstant16; - p->device_features_1_1.storageBuffer16BitAccess = dev_features_1_1.storageBuffer16BitAccess; - p->device_features_1_1.uniformAndStorageBuffer16BitAccess = dev_features_1_1.uniformAndStorageBuffer16BitAccess; - - p->device_features_1_2.timelineSemaphore = 1; - p->device_features_1_2.scalarBlockLayout = dev_features_1_2.scalarBlockLayout; - p->device_features_1_2.bufferDeviceAddress = dev_features_1_2.bufferDeviceAddress; - p->device_features_1_2.hostQueryReset = dev_features_1_2.hostQueryReset; - p->device_features_1_2.storagePushConstant8 = dev_features_1_2.storagePushConstant8; - p->device_features_1_2.shaderInt8 = dev_features_1_2.shaderInt8; - p->device_features_1_2.storageBuffer8BitAccess = dev_features_1_2.storageBuffer8BitAccess; - p->device_features_1_2.uniformAndStorageBuffer8BitAccess = dev_features_1_2.uniformAndStorageBuffer8BitAccess; - p->device_features_1_2.shaderFloat16 = dev_features_1_2.shaderFloat16; - p->device_features_1_2.shaderSharedInt64Atomics = dev_features_1_2.shaderSharedInt64Atomics; - p->device_features_1_2.vulkanMemoryModel = dev_features_1_2.vulkanMemoryModel; - p->device_features_1_2.vulkanMemoryModelDeviceScope = dev_features_1_2.vulkanMemoryModelDeviceScope; - p->device_features_1_2.hostQueryReset = dev_features_1_2.hostQueryReset; - - p->device_features_1_3.dynamicRendering = dev_features_1_3.dynamicRendering; - p->device_features_1_3.maintenance4 = dev_features_1_3.maintenance4; - p->device_features_1_3.synchronization2 = dev_features_1_3.synchronization2; - p->device_features_1_3.computeFullSubgroups = dev_features_1_3.computeFullSubgroups; - p->device_features_1_3.shaderZeroInitializeWorkgroupMemory = dev_features_1_3.shaderZeroInitializeWorkgroupMemory; - p->device_features_1_3.dynamicRendering = dev_features_1_3.dynamicRendering; - - p->video_maint_1_features.videoMaintenance1 = video_maint_1_features.videoMaintenance1; - - p->desc_buf_features.descriptorBuffer = desc_buf_features.descriptorBuffer; - p->desc_buf_features.descriptorBufferPushDescriptors = desc_buf_features.descriptorBufferPushDescriptors; - - p->atomic_float_features.shaderBufferFloat32Atomics = atomic_float_features.shaderBufferFloat32Atomics; - p->atomic_float_features.shaderBufferFloat32AtomicAdd = atomic_float_features.shaderBufferFloat32AtomicAdd; - - p->coop_matrix_features.cooperativeMatrix = coop_matrix_features.cooperativeMatrix; - - p->optical_flow_features.opticalFlow = optical_flow_features.opticalFlow; - - p->shader_object_features.shaderObject = shader_object_features.shaderObject; - -#ifdef VK_KHR_shader_relaxed_extended_instruction - p->relaxed_extended_instr_features.shaderRelaxedExtendedInstruction = relaxed_extended_instr_features.shaderRelaxedExtendedInstruction; -#endif - - /* Find and enable extensions */ + /* Find and enable extensions for the physical device */ if ((err = check_extensions(ctx, 1, opts, &dev_info.ppEnabledExtensionNames, &dev_info.enabledExtensionCount, debug_mode))) { for (int i = 0; i < dev_info.queueCreateInfoCount; i++) @@ -1583,45 +1580,21 @@ static int vulkan_device_create_internal(AVHWDeviceContext *ctx, goto end; } - /* Setup enabled device features */ - hwctx->device_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; - hwctx->device_features.pNext = &p->device_features_1_1; - p->device_features_1_1.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES; - p->device_features_1_1.pNext = &p->device_features_1_2; - p->device_features_1_2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES; - p->device_features_1_2.pNext = &p->device_features_1_3; - p->device_features_1_3.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES; - p->device_features_1_3.pNext = NULL; - -#define OPT_CHAIN(EXT_FLAG, STRUCT_P, TYPE) \ - do { \ - if (p->vkctx.extensions & EXT_FLAG) { \ - (STRUCT_P)->sType = TYPE; \ - ff_vk_link_struct(hwctx->device_features.pNext, STRUCT_P); \ - } \ - } while (0) - - OPT_CHAIN(FF_VK_EXT_DESCRIPTOR_BUFFER, &p->desc_buf_features, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_FEATURES_EXT); - OPT_CHAIN(FF_VK_EXT_ATOMIC_FLOAT, &p->atomic_float_features, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT); - OPT_CHAIN(FF_VK_EXT_COOP_MATRIX, &p->coop_matrix_features, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_KHR); - OPT_CHAIN(FF_VK_EXT_SHADER_OBJECT, &p->shader_object_features, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OBJECT_FEATURES_EXT); - OPT_CHAIN(FF_VK_EXT_OPTICAL_FLOW, &p->optical_flow_features, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPTICAL_FLOW_FEATURES_NV); - OPT_CHAIN(FF_VK_EXT_VIDEO_MAINTENANCE_1, &p->video_maint_1_features, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_MAINTENANCE_1_FEATURES_KHR); -#undef OPT_CHAIN + /* Get all supported features for the physical device */ + device_features_init(ctx, &supported_feats); + vk->GetPhysicalDeviceFeatures2(hwctx->phys_dev, &supported_feats.device); - /* Add the enabled features into the pnext chain of device creation */ - dev_info.pNext = &hwctx->device_features; + /* Copy all needed features from those supported and activate them */ + device_features_init(ctx, &p->feats); + device_features_copy_needed(&p->feats, &supported_feats); + dev_info.pNext = p->feats.device.pNext; + dev_info.pEnabledFeatures = &p->feats.device.features; /* Setup enabled queue families */ if ((err = setup_queue_families(ctx, &dev_info))) goto end; + /* Finally create the device */ ret = vk->CreateDevice(hwctx->phys_dev, &dev_info, hwctx->alloc, &hwctx->act_dev); @@ -1644,9 +1617,7 @@ static int vulkan_device_create_internal(AVHWDeviceContext *ctx, if (opt_d) p->use_linear_images = strtol(opt_d->value, NULL, 10); - /* - * The disable_multiplane argument takes precedent over the option. - */ + /* The disable_multiplane argument takes precedent over the option */ p->disable_multiplane = disable_multiplane; if (!p->disable_multiplane) { opt_d = av_dict_get(opts, "disable_multiplane", NULL, 0); @@ -1654,9 +1625,13 @@ static int vulkan_device_create_internal(AVHWDeviceContext *ctx, p->disable_multiplane = strtol(opt_d->value, NULL, 10); } + /* Set the list of all active extensions */ hwctx->enabled_dev_extensions = dev_info.ppEnabledExtensionNames; hwctx->nb_enabled_dev_extensions = dev_info.enabledExtensionCount; + /* The extension lists need to be freed */ + ctx->free = vulkan_device_free; + end: return err; } diff --git a/libavutil/vulkan_functions.h b/libavutil/vulkan_functions.h index 7a5385381b..b1ae4d181e 100644 --- a/libavutil/vulkan_functions.h +++ b/libavutil/vulkan_functions.h @@ -62,6 +62,7 @@ typedef uint64_t FFVulkanExtensions; #define FF_VK_EXT_VIDEO_ENCODE_H264 (1ULL << 51) /* VK_KHR_video_encode_h264 */ #define FF_VK_EXT_VIDEO_ENCODE_H265 (1ULL << 52) /* VK_KHR_video_encode_h265 */ +#define FF_VK_EXT_PORTABILITY_SUBSET (1ULL << 62) #define FF_VK_EXT_NO_FLAG (1ULL << 63) /* Macro containing every function that we utilize in our codebase */ From patchwork Thu Oct 3 05:51:32 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lynne X-Patchwork-Id: 51993 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:b18c:0:b0:48e:c0f8:d0de with SMTP id q12csp145864vqn; Wed, 2 Oct 2024 22:52:37 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUPwG0ta4JGb//4CmnmveGVKjuq2Ia+c0zqBb2LzQgSiwsMAAvT9FraESdBdL/b7Y5Hs4AygXXKfafo2j5Paqvk@gmail.com X-Google-Smtp-Source: AGHT+IFGTNwSOwlH/s3Pr+RnufPRi/JkHnqSamHPDK3WN2TmAcZ7Z8w9syatAVCxjI48l8OKecKU X-Received: by 2002:a05:6402:90c:b0:5c8:a023:6b8b with SMTP id 4fb4d7f45d1cf-5c8c0a47642mr1941936a12.15.1727934756648; Wed, 02 Oct 2024 22:52:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1727934756; cv=none; d=google.com; s=arc-20240605; b=OVk48d+ilfrEEq0/t2NK6VfV+iROqEhz6zqofV/gLN9e4V5JUo7ta1Xc8X2oTmPuyL NVDKIOhh4b10c8tZ7ZRuPPHh528wJF0k1diuq0MJWEK5LDQoiw08mtns1d+mxrNblzdj ISvOLOG7BM4LzIGJ+U0iFzpgLAGG70uoUGZmHHhJd6Wi58IzgLyM5mZq61V17ubzWFSu ayHQ04KDEGngtoQeeTuf2QK/6VuD3pcqyWMKMqToh5aD4gE9fMK9tpBbptYHh1lbYv5j LZf1pzSbTX/sAqgvNP19xLgqZTlBct819o273PDp2kmfHI/heEgthSgKCgVttzeokA1c EpqQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:content-transfer-encoding:cc:reply-to:from :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:delivered-to; bh=TjU3IQVtbWAPFeP0U8pNhtt8lrBfOY5nAFegVSFXt8U=; fh=nenT92/WZoU6unXd3J6UhGUdod4piddKfVtctNBOh6k=; b=I2o8N/EaO7uWtQczNEfqpOZSl4JaERSO2RDkJOmdHO6zPatDaX1+YfPTEf4q9Z/Jqt 4mcCry0kZXBH3NkIAUWji7vUGfmuJWsC4W5P7TqXUq9Rx/eeBTn05i8JG2L4aLtP9I30 xZULTzngIoUHu+7slpcaESZ4C6dGe2EZV579/h4zq9UJDXxXAz9JsYqZi8NcNMts5HsP LDUFDGv8gY1EzTwxzlZnD8WNPI/xau4SjLOHR42+Zmnw9ClYuicuPHymQwAPGJ1wBh0j 9SffiFSUNMPFrfOYX3i562vdFIKp1ID7GyUAf1bspnOf2xbN5WnXVnVe9AvasOSBNapL oRLA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 4fb4d7f45d1cf-5c8ca4b24c3si375756a12.534.2024.10.02.22.52.35; Wed, 02 Oct 2024 22:52:36 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 23F1668DAA3; Thu, 3 Oct 2024 08:51:55 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from vidala.lynne.ee (vidala.pars.ee [116.203.72.101]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id BBF5E68DA0A for ; Thu, 3 Oct 2024 08:51:44 +0300 (EEST) To: ffmpeg-devel@ffmpeg.org Date: Thu, 3 Oct 2024 07:51:32 +0200 Message-ID: <20241003055141.415483-5-dev@lynne.ee> X-Mailer: git-send-email 2.45.2.753.g447d99e1c3b In-Reply-To: <20241003055141.415483-1-dev@lynne.ee> References: <20241003055141.415483-1-dev@lynne.ee> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 5/8] lavfi/*vulkan: forward FFVulkanContext to SPIR-V compilers X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Lynne via ffmpeg-devel From: Lynne Reply-To: FFmpeg development discussions and patches Cc: Lynne Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 63t290EjKods We need to know what extensions are supported. --- libavfilter/vf_avgblur_vulkan.c | 2 +- libavfilter/vf_blend_vulkan.c | 2 +- libavfilter/vf_bwdif_vulkan.c | 2 +- libavfilter/vf_chromaber_vulkan.c | 2 +- libavfilter/vf_flip_vulkan.c | 2 +- libavfilter/vf_gblur_vulkan.c | 2 +- libavfilter/vf_nlmeans_vulkan.c | 4 ++-- libavfilter/vf_overlay_vulkan.c | 2 +- libavfilter/vf_scale_vulkan.c | 2 +- libavfilter/vf_transpose_vulkan.c | 2 +- libavfilter/vf_xfade_vulkan.c | 2 +- libavfilter/vsrc_testsrc_vulkan.c | 2 +- libavfilter/vulkan_glslang.c | 20 ++++++++++---------- libavfilter/vulkan_shaderc.c | 8 ++++---- libavfilter/vulkan_spirv.h | 4 ++-- 15 files changed, 29 insertions(+), 29 deletions(-) diff --git a/libavfilter/vf_avgblur_vulkan.c b/libavfilter/vf_avgblur_vulkan.c index 3972ea0cbb..9214ebcc0f 100644 --- a/libavfilter/vf_avgblur_vulkan.c +++ b/libavfilter/vf_avgblur_vulkan.c @@ -137,7 +137,7 @@ static av_cold int init_filter(AVFilterContext *ctx, AVFrame *in) } GLSLC(0, } ); - RET(spv->compile_shader(spv, ctx, &s->shd, &spv_data, &spv_len, "main", + RET(spv->compile_shader(vkctx, spv, &s->shd, &spv_data, &spv_len, "main", &spv_opaque)); RET(ff_vk_shader_link(vkctx, &s->shd, spv_data, spv_len, "main")); diff --git a/libavfilter/vf_blend_vulkan.c b/libavfilter/vf_blend_vulkan.c index ccc025fe6b..406b087503 100644 --- a/libavfilter/vf_blend_vulkan.c +++ b/libavfilter/vf_blend_vulkan.c @@ -208,7 +208,7 @@ static av_cold int init_filter(AVFilterContext *avctx) } GLSLC(0, } ); - RET(spv->compile_shader(spv, avctx, shd, &spv_data, &spv_len, "main", + RET(spv->compile_shader(vkctx, spv, shd, &spv_data, &spv_len, "main", &spv_opaque)); RET(ff_vk_shader_link(vkctx, shd, spv_data, spv_len, "main")); diff --git a/libavfilter/vf_bwdif_vulkan.c b/libavfilter/vf_bwdif_vulkan.c index 3164eb3395..2ea9512fcb 100644 --- a/libavfilter/vf_bwdif_vulkan.c +++ b/libavfilter/vf_bwdif_vulkan.c @@ -244,7 +244,7 @@ static av_cold int init_filter(AVFilterContext *ctx) GLSLC(0, } ); - RET(spv->compile_shader(spv, ctx, &s->shd, &spv_data, &spv_len, "main", + RET(spv->compile_shader(vkctx, spv, &s->shd, &spv_data, &spv_len, "main", &spv_opaque)); RET(ff_vk_shader_link(vkctx, &s->shd, spv_data, spv_len, "main")); diff --git a/libavfilter/vf_chromaber_vulkan.c b/libavfilter/vf_chromaber_vulkan.c index 450715b36c..8a62e514fa 100644 --- a/libavfilter/vf_chromaber_vulkan.c +++ b/libavfilter/vf_chromaber_vulkan.c @@ -148,7 +148,7 @@ static av_cold int init_filter(AVFilterContext *ctx, AVFrame *in) } GLSLC(0, } ); - RET(spv->compile_shader(spv, ctx, shd, &spv_data, &spv_len, "main", + RET(spv->compile_shader(vkctx, spv, shd, &spv_data, &spv_len, "main", &spv_opaque)); RET(ff_vk_shader_link(vkctx, shd, spv_data, spv_len, "main")); diff --git a/libavfilter/vf_flip_vulkan.c b/libavfilter/vf_flip_vulkan.c index 2b89a9a6a3..3e0a7ebc85 100644 --- a/libavfilter/vf_flip_vulkan.c +++ b/libavfilter/vf_flip_vulkan.c @@ -121,7 +121,7 @@ static av_cold int init_filter(AVFilterContext *ctx, AVFrame *in, enum FlipType } GLSLC(0, } ); - RET(spv->compile_shader(spv, ctx, shd, &spv_data, &spv_len, "main", + RET(spv->compile_shader(vkctx, spv, shd, &spv_data, &spv_len, "main", &spv_opaque)); RET(ff_vk_shader_link(vkctx, shd, spv_data, spv_len, "main")); diff --git a/libavfilter/vf_gblur_vulkan.c b/libavfilter/vf_gblur_vulkan.c index a56a6ece00..9632a084e4 100644 --- a/libavfilter/vf_gblur_vulkan.c +++ b/libavfilter/vf_gblur_vulkan.c @@ -169,7 +169,7 @@ static int init_gblur_pipeline(GBlurVulkanContext *s, } GLSLC(0, } ); - RET(spv->compile_shader(spv, s, shd, &spv_data, &spv_len, "main", + RET(spv->compile_shader(&s->vkctx, spv, shd, &spv_data, &spv_len, "main", &spv_opaque)); RET(ff_vk_shader_link(&s->vkctx, shd, spv_data, spv_len, "main")); diff --git a/libavfilter/vf_nlmeans_vulkan.c b/libavfilter/vf_nlmeans_vulkan.c index b413194035..9ad12eb7b6 100644 --- a/libavfilter/vf_nlmeans_vulkan.c +++ b/libavfilter/vf_nlmeans_vulkan.c @@ -402,7 +402,7 @@ static av_cold int init_weights_pipeline(FFVulkanContext *vkctx, FFVkExecPool *e GLSLC(0, } ); - RET(spv->compile_shader(spv, vkctx, shd, &spv_data, &spv_len, "main", &spv_opaque)); + RET(spv->compile_shader(vkctx, spv, shd, &spv_data, &spv_len, "main", &spv_opaque)); RET(ff_vk_shader_link(vkctx, shd, spv_data, spv_len, "main")); RET(ff_vk_shader_register_exec(vkctx, exec, shd)); @@ -553,7 +553,7 @@ static av_cold int init_denoise_pipeline(FFVulkanContext *vkctx, FFVkExecPool *e GLSLC(1, imageStore(output_img[plane], pos, r); ); GLSLC(0, } ); - RET(spv->compile_shader(spv, vkctx, shd, &spv_data, &spv_len, "main", &spv_opaque)); + RET(spv->compile_shader(vkctx, spv, shd, &spv_data, &spv_len, "main", &spv_opaque)); RET(ff_vk_shader_link(vkctx, shd, spv_data, spv_len, "main")); RET(ff_vk_shader_register_exec(vkctx, exec, shd)); diff --git a/libavfilter/vf_overlay_vulkan.c b/libavfilter/vf_overlay_vulkan.c index f1ad27167e..3af2482772 100644 --- a/libavfilter/vf_overlay_vulkan.c +++ b/libavfilter/vf_overlay_vulkan.c @@ -163,7 +163,7 @@ static av_cold int init_filter(AVFilterContext *ctx) GLSLC(1, } ); GLSLC(0, } ); - RET(spv->compile_shader(spv, ctx, shd, &spv_data, &spv_len, "main", + RET(spv->compile_shader(vkctx, spv, shd, &spv_data, &spv_len, "main", &spv_opaque)); RET(ff_vk_shader_link(vkctx, shd, spv_data, spv_len, "main")); diff --git a/libavfilter/vf_scale_vulkan.c b/libavfilter/vf_scale_vulkan.c index e39bc62aa8..95cc25f8d7 100644 --- a/libavfilter/vf_scale_vulkan.c +++ b/libavfilter/vf_scale_vulkan.c @@ -247,7 +247,7 @@ static av_cold int init_filter(AVFilterContext *ctx, AVFrame *in) s->opts.yuv_matrix[3][3] = 1.0; } - RET(spv->compile_shader(spv, ctx, shd, &spv_data, &spv_len, "main", + RET(spv->compile_shader(vkctx, spv, shd, &spv_data, &spv_len, "main", &spv_opaque)); RET(ff_vk_shader_link(vkctx, shd, spv_data, spv_len, "main")); diff --git a/libavfilter/vf_transpose_vulkan.c b/libavfilter/vf_transpose_vulkan.c index c3282339af..8ab782cc79 100644 --- a/libavfilter/vf_transpose_vulkan.c +++ b/libavfilter/vf_transpose_vulkan.c @@ -113,7 +113,7 @@ static av_cold int init_filter(AVFilterContext *ctx, AVFrame *in) } GLSLC(0, } ); - RET(spv->compile_shader(spv, ctx, shd, &spv_data, &spv_len, "main", + RET(spv->compile_shader(vkctx, spv, shd, &spv_data, &spv_len, "main", &spv_opaque)); RET(ff_vk_shader_link(vkctx, shd, spv_data, spv_len, "main")); diff --git a/libavfilter/vf_xfade_vulkan.c b/libavfilter/vf_xfade_vulkan.c index c230f5d833..0b6f1350fb 100644 --- a/libavfilter/vf_xfade_vulkan.c +++ b/libavfilter/vf_xfade_vulkan.c @@ -393,7 +393,7 @@ static av_cold int init_vulkan(AVFilterContext *avctx) GLSLC(1, } ); GLSLC(0, } ); - RET(spv->compile_shader(spv, avctx, shd, &spv_data, &spv_len, "main", + RET(spv->compile_shader(vkctx, spv, shd, &spv_data, &spv_len, "main", &spv_opaque)); RET(ff_vk_shader_link(vkctx, shd, spv_data, spv_len, "main")); diff --git a/libavfilter/vsrc_testsrc_vulkan.c b/libavfilter/vsrc_testsrc_vulkan.c index bfef38ce51..0641beed5b 100644 --- a/libavfilter/vsrc_testsrc_vulkan.c +++ b/libavfilter/vsrc_testsrc_vulkan.c @@ -179,7 +179,7 @@ static av_cold int init_filter(AVFilterContext *ctx, enum TestSrcVulkanMode mode } GLSLC(0, } ); - RET(spv->compile_shader(spv, ctx, shd, &spv_data, &spv_len, "main", + RET(spv->compile_shader(vkctx, spv, shd, &spv_data, &spv_len, "main", &spv_opaque)); RET(ff_vk_shader_link(vkctx, shd, spv_data, spv_len, "main")); diff --git a/libavfilter/vulkan_glslang.c b/libavfilter/vulkan_glslang.c index 3c1b0a8fe6..7ac7d6b2c4 100644 --- a/libavfilter/vulkan_glslang.c +++ b/libavfilter/vulkan_glslang.c @@ -136,7 +136,7 @@ static const glslang_resource_t glslc_resource_limits = { } }; -static int glslc_shader_compile(FFVkSPIRVCompiler *ctx, void *avctx, +static int glslc_shader_compile(FFVulkanContext *s, FFVkSPIRVCompiler *ctx, FFVulkanShader *shd, uint8_t **data, size_t *size, const char *entrypoint, void **opaque) @@ -183,8 +183,8 @@ static int glslc_shader_compile(FFVkSPIRVCompiler *ctx, void *avctx, return AVERROR(ENOMEM); if (!glslang_shader_preprocess(glslc_shader, &glslc_input)) { - ff_vk_shader_print(avctx, shd, AV_LOG_WARNING); - av_log(avctx, AV_LOG_ERROR, "Unable to preprocess shader: %s (%s)!\n", + ff_vk_shader_print(s, shd, AV_LOG_WARNING); + av_log(s, AV_LOG_ERROR, "Unable to preprocess shader: %s (%s)!\n", glslang_shader_get_info_log(glslc_shader), glslang_shader_get_info_debug_log(glslc_shader)); glslang_shader_delete(glslc_shader); @@ -192,8 +192,8 @@ static int glslc_shader_compile(FFVkSPIRVCompiler *ctx, void *avctx, } if (!glslang_shader_parse(glslc_shader, &glslc_input)) { - ff_vk_shader_print(avctx, shd, AV_LOG_WARNING); - av_log(avctx, AV_LOG_ERROR, "Unable to parse shader: %s (%s)!\n", + ff_vk_shader_print(s, shd, AV_LOG_WARNING); + av_log(s, AV_LOG_ERROR, "Unable to parse shader: %s (%s)!\n", glslang_shader_get_info_log(glslc_shader), glslang_shader_get_info_debug_log(glslc_shader)); glslang_shader_delete(glslc_shader); @@ -209,8 +209,8 @@ static int glslc_shader_compile(FFVkSPIRVCompiler *ctx, void *avctx, if (!glslang_program_link(glslc_program, GLSLANG_MSG_SPV_RULES_BIT | GLSLANG_MSG_VULKAN_RULES_BIT)) { - ff_vk_shader_print(avctx, shd, AV_LOG_WARNING); - av_log(avctx, AV_LOG_ERROR, "Unable to link shader: %s (%s)!\n", + ff_vk_shader_print(s, shd, AV_LOG_WARNING); + av_log(s, AV_LOG_ERROR, "Unable to link shader: %s (%s)!\n", glslang_program_get_info_log(glslc_program), glslang_program_get_info_debug_log(glslc_program)); glslang_program_delete(glslc_program); @@ -222,10 +222,10 @@ static int glslc_shader_compile(FFVkSPIRVCompiler *ctx, void *avctx, messages = glslang_program_SPIRV_get_messages(glslc_program); if (messages) { - ff_vk_shader_print(avctx, shd, AV_LOG_WARNING); - av_log(avctx, AV_LOG_WARNING, "%s\n", messages); + ff_vk_shader_print(s, shd, AV_LOG_WARNING); + av_log(s, AV_LOG_WARNING, "%s\n", messages); } else { - ff_vk_shader_print(avctx, shd, AV_LOG_VERBOSE); + ff_vk_shader_print(s, shd, AV_LOG_VERBOSE); } glslang_shader_delete(glslc_shader); diff --git a/libavfilter/vulkan_shaderc.c b/libavfilter/vulkan_shaderc.c index d2bd60e7ef..56a2c0eef5 100644 --- a/libavfilter/vulkan_shaderc.c +++ b/libavfilter/vulkan_shaderc.c @@ -21,7 +21,7 @@ #include "libavutil/mem.h" #include "vulkan_spirv.h" -static int shdc_shader_compile(FFVkSPIRVCompiler *ctx, void *avctx, +static int shdc_shader_compile(FFVulkanContext *s, FFVkSPIRVCompiler *ctx, FFVulkanShader *shd, uint8_t **data, size_t *size, const char *entrypoint, void **opaque) @@ -71,11 +71,11 @@ static int shdc_shader_compile(FFVkSPIRVCompiler *ctx, void *avctx, loglevel = err ? AV_LOG_ERROR : warn ? AV_LOG_WARNING : AV_LOG_VERBOSE; - ff_vk_shader_print(avctx, shd, loglevel); + ff_vk_shader_print(s, shd, loglevel); if (message && (err || warn)) - av_log(avctx, loglevel, "%s\n", message); + av_log(s, loglevel, "%s\n", message); status = ret < FF_ARRAY_ELEMS(shdc_result) ? shdc_result[ret] : "unknown"; - av_log(avctx, loglevel, "shaderc compile status '%s' (%d errors, %d warnings)\n", + av_log(s, loglevel, "shaderc compile status '%s' (%d errors, %d warnings)\n", status, err, warn); if (err > 0) diff --git a/libavfilter/vulkan_spirv.h b/libavfilter/vulkan_spirv.h index c46c9e52da..d008804ab2 100644 --- a/libavfilter/vulkan_spirv.h +++ b/libavfilter/vulkan_spirv.h @@ -26,8 +26,8 @@ typedef struct FFVkSPIRVCompiler { void *priv; - int (*compile_shader)(struct FFVkSPIRVCompiler *ctx, void *avctx, - struct FFVulkanShader *shd, uint8_t **data, + int (*compile_shader)(FFVulkanContext *s, struct FFVkSPIRVCompiler *ctx, + FFVulkanShader *shd, uint8_t **data, size_t *size, const char *entrypoint, void **opaque); void (*free_shader)(struct FFVkSPIRVCompiler *ctx, void **opaque); void (*uninit)(struct FFVkSPIRVCompiler **ctx); From patchwork Thu Oct 3 05:51:33 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lynne X-Patchwork-Id: 51996 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:b18c:0:b0:48e:c0f8:d0de with SMTP id q12csp151502vqn; Wed, 2 Oct 2024 23:09:05 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCV6vdvlckTGt6L1Jg8cBVkjGRJemmtJcPSgZoz7TnfaBngw1PTIWbXi0c6tLfZGtyHD/Vbe7kKhpelXeerCLxf+@gmail.com X-Google-Smtp-Source: AGHT+IEd3Clqd8uzgCV6MzsFBMeXgAgBbmk9CzT2oFnAPDzFVJGJ/pQVETfW3acxghqR5iXgHMC8 X-Received: by 2002:a05:6402:2552:b0:5c8:ae42:88b with SMTP id 4fb4d7f45d1cf-5c8b1b72c85mr4778562a12.27.1727935744829; Wed, 02 Oct 2024 23:09:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1727935744; cv=none; d=google.com; s=arc-20240605; b=YYMsW9yJmGBM6C8/tNKVoZmGAHWHUFXKIppKMOYm40yrGo89TjuW1LYiVAhWpYfpZ6 loQ/WgX0NBOZ+3UiNRoYL70xJeYkQtlONmq7EB6Zv5TB8Lt2PE+B52bitzKDT53uKVXh u+CyUWAtYxA2UYRPt42cUFWniLu4Z6eyz10LhUzO8hOZ9iT20OhYowLN877KzlTX+1v7 lfF9ZivFXFZetjdthvEfD5tGuPA8Xh/Ng5JaaFFrtDtQFSDbg0qUE9VAKClAmBqQjiXs ziOnDRns+hhFVncFHiM7JDBFu2USCSxrFSG+mk5Ux1l+YH6+fFQ/FRG5+DwNCVttlUWd +tDQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:content-transfer-encoding:cc:reply-to:from :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:delivered-to; bh=M4x14WGCNf1eg5jbDiel5PZSx6hyOL5CFc5/SOoXPrA=; fh=nenT92/WZoU6unXd3J6UhGUdod4piddKfVtctNBOh6k=; b=X2o+tVtlSfRNnkwUU4nTFKdPwrRFkCFpE0NS0WjL4yHjjC340wxJ1ydOb9A4z4JLfk FQPo6705be7DO0dyzwys7Qtsv4/cvkCtSOunQuDN/rrKbJGTx9oaXFeaU/kpIhXIw4n0 IAx0dnfFuEfPnQyiTigh0Qm6LX+ZIZyY/lNsue/MeFOVVW8kMiv6YcO6f8Dv4Vn8T556 pr9+Om6qMhMmvNnQRMqVE7OyJk1Syxb+nGUFAN5BVnGLct3/Woq+BULhnzNMiiSROC3j cmxKCQOoABv+m+eifXltt2H0aXpBDXyv4dIRrNP1oFLB4FCYKvjmiHPXsRVp8w9AcRBV KGgQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 4fb4d7f45d1cf-5c8ca3c2681si418358a12.8.2024.10.02.23.09.04; Wed, 02 Oct 2024 23:09:04 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 850E368DAB1; Thu, 3 Oct 2024 08:51:56 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from vidala.lynne.ee (vidala.pars.ee [116.203.72.101]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5DE3C68DA3C for ; Thu, 3 Oct 2024 08:51:51 +0300 (EEST) To: ffmpeg-devel@ffmpeg.org Date: Thu, 3 Oct 2024 07:51:33 +0200 Message-ID: <20241003055141.415483-6-dev@lynne.ee> X-Mailer: git-send-email 2.45.2.753.g447d99e1c3b In-Reply-To: <20241003055141.415483-1-dev@lynne.ee> References: <20241003055141.415483-1-dev@lynne.ee> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 6/8] vulkan_glslang: add more stages, target Vulkan 1.3 and output debug info X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Lynne via ffmpeg-devel From: Lynne Reply-To: FFmpeg development discussions and patches Cc: Lynne Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: dTeAyioV3gAp --- libavfilter/vulkan_glslang.c | 39 +++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/libavfilter/vulkan_glslang.c b/libavfilter/vulkan_glslang.c index 7ac7d6b2c4..20a00354e0 100644 --- a/libavfilter/vulkan_glslang.c +++ b/libavfilter/vulkan_glslang.c @@ -149,21 +149,28 @@ static int glslc_shader_compile(FFVulkanContext *s, FFVkSPIRVCompiler *ctx, [VK_SHADER_STAGE_VERTEX_BIT] = GLSLANG_STAGE_VERTEX, [VK_SHADER_STAGE_FRAGMENT_BIT] = GLSLANG_STAGE_FRAGMENT, [VK_SHADER_STAGE_COMPUTE_BIT] = GLSLANG_STAGE_COMPUTE, +#if ((GLSLANG_VERSION_MAJOR) > 12) + [VK_SHADER_STAGE_TASK_BIT_EXT] = GLSLANG_STAGE_TASK, + [VK_SHADER_STAGE_MESH_BIT_EXT] = GLSLANG_STAGE_MESH, + [VK_SHADER_STAGE_RAYGEN_BIT_KHR] = GLSLANG_STAGE_RAYGEN, + [VK_SHADER_STAGE_INTERSECTION_BIT_KHR] = GLSLANG_STAGE_INTERSECT, + [VK_SHADER_STAGE_ANY_HIT_BIT_KHR] = GLSLANG_STAGE_ANYHIT, + [VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR] = GLSLANG_STAGE_CLOSESTHIT, + [VK_SHADER_STAGE_MISS_BIT_KHR] = GLSLANG_STAGE_MISS, + [VK_SHADER_STAGE_CALLABLE_BIT_KHR] = GLSLANG_STAGE_CALLABLE, +#endif }; const glslang_input_t glslc_input = { .language = GLSLANG_SOURCE_GLSL, .stage = glslc_stage[shd->stage], .client = GLSLANG_CLIENT_VULKAN, - /* GLSLANG_TARGET_VULKAN_1_2 before 11.6 resulted in targeting 1.0 */ -#if (((GLSLANG_VERSION_MAJOR) > 11) || ((GLSLANG_VERSION_MAJOR) == 11 && \ - (((GLSLANG_VERSION_MINOR) > 6) || ((GLSLANG_VERSION_MINOR) == 6 && \ - ((GLSLANG_VERSION_PATCH) > 0))))) +#if ((GLSLANG_VERSION_MAJOR) >= 12) + .client_version = GLSLANG_TARGET_VULKAN_1_3, + .target_language_version = GLSLANG_TARGET_SPV_1_6, +#else .client_version = GLSLANG_TARGET_VULKAN_1_2, .target_language_version = GLSLANG_TARGET_SPV_1_5, -#else - .client_version = GLSLANG_TARGET_VULKAN_1_1, - .target_language_version = GLSLANG_TARGET_SPV_1_3, #endif .target_language = GLSLANG_TARGET_SPV, .code = shd->src.str, @@ -175,6 +182,20 @@ static int glslc_shader_compile(FFVulkanContext *s, FFVkSPIRVCompiler *ctx, .resource = &glslc_resource_limits, }; +#if ((GLSLANG_VERSION_MAJOR) >= 12) + glslang_spv_options_t glslc_opts = { + .generate_debug_info = (s->extensions & FF_VK_EXT_DEBUG_UTILS), + .emit_nonsemantic_shader_debug_info = (s->extensions & FF_VK_EXT_RELAXED_EXTENDED_INSTR), + .emit_nonsemantic_shader_debug_source = (s->extensions & FF_VK_EXT_RELAXED_EXTENDED_INSTR), + .disable_optimizer = (s->extensions & FF_VK_EXT_DEBUG_UTILS), + .strip_debug_info = !(s->extensions & FF_VK_EXT_DEBUG_UTILS), + .optimize_size = 0, + .disassemble = 0, + .validate = 1, + .compile_only = 0, + }; +#endif + av_assert0(glslc_refcount); *opaque = NULL; @@ -218,7 +239,11 @@ static int glslc_shader_compile(FFVulkanContext *s, FFVkSPIRVCompiler *ctx, return AVERROR(EINVAL); } +#if ((GLSLANG_VERSION_MAJOR) >= 12) + glslang_program_SPIRV_generate_with_options(glslc_program, glslc_input.stage, &glslc_opts); +#else glslang_program_SPIRV_generate(glslc_program, glslc_input.stage); +#endif messages = glslang_program_SPIRV_get_messages(glslc_program); if (messages) { From patchwork Thu Oct 3 05:51:34 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lynne X-Patchwork-Id: 51995 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:b18c:0:b0:48e:c0f8:d0de with SMTP id q12csp147502vqn; Wed, 2 Oct 2024 22:59:04 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXYaieHpvADMA1TXPPZ6zOgQf3Yx0Cg1+pwNfO/kWz5UHoUr2CJlJExJqLEfwYMPPwkh9TliTU7yCXdg/EPK2XR@gmail.com X-Google-Smtp-Source: AGHT+IGfmzmfhPBYbYskDR7oDb9sIVMKh5nLTb207nWwOzK24l0ci6NnjvIJGrHO+f/4rsjMewOA X-Received: by 2002:a05:6402:1d4e:b0:5c8:a01f:bf8b with SMTP id 4fb4d7f45d1cf-5c8b1924451mr4163650a12.11.1727935144340; Wed, 02 Oct 2024 22:59:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1727935144; cv=none; d=google.com; s=arc-20240605; b=M79+kXPRiC9Y/81JPDD6iTqNcFxX58xD+yiL7ieouR9dUDpGHzQxh3jNFNyLAV45T8 jDve2kFNX0rmIKaJE2u8sGoto0ZwgtszwRNQ8WxwNcIpwNTL6OwZeM8+7z7CNvSpL/zn xxPcTJl0wrU3TbCr3sVJc8MQa9GMWycty8M54bf/yZEMamjOuPmnLXz+fu3JFNM1eUvs cavWxNxrqcaymVqqUqWAYCGa8t8Jz7xj7hTGc5e4DUObqNMJzhBqCQLmGgZ0lUNnmLm9 H/4+WL/XlCr+MVp5+Fw//KOVGndomNQYFpG8GRBYmojepKl31Ipnm97MYCmUAhwmOuLI OWVg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:content-transfer-encoding:cc:reply-to:from :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:delivered-to; bh=vrY+1dWluYhbvxLYUnKaZhu1yRpXq4nYGCh+hORWKQk=; fh=nenT92/WZoU6unXd3J6UhGUdod4piddKfVtctNBOh6k=; b=Gc6BUFsNRaiL1ULrjOSr+jNE0qvi3YhblObOjFUiZJD730c/9TkLE8fYYqSJDD3JzE jAmPNelcK4/WnZDBh1K1VoFuBdsHZas87qNEnfRjs44xHUjNpaz0gpYOiv6ACvlLBDds o6kxDXS2sIm8FKKRTF8hxh8Z5+ZOnpSDl76b/e3fupoK7KccElkeGjwmcCT60V0Jz3G3 KDMPi03gAYNfvB5Y10rBZfzqRObTIUJCND6qHjgTKdGJPsDfw1KhQ11EJhUpQIgjfn6r nprjJ3Vd8cnG1HbiXiceSHfg/y+ni/saYSq5yhL5Bn8s2y6tCb55cB7lU+Z7+J2tE7HQ LrYQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 4fb4d7f45d1cf-5c8ca481114si392855a12.327.2024.10.02.22.59.03; Wed, 02 Oct 2024 22:59:04 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 58A9D68DAE2; Thu, 3 Oct 2024 08:51:59 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from vidala.lynne.ee (vidala.pars.ee [116.203.72.101]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5BCBC68DA3B for ; Thu, 3 Oct 2024 08:51:51 +0300 (EEST) To: ffmpeg-devel@ffmpeg.org Date: Thu, 3 Oct 2024 07:51:34 +0200 Message-ID: <20241003055141.415483-7-dev@lynne.ee> X-Mailer: git-send-email 2.45.2.753.g447d99e1c3b In-Reply-To: <20241003055141.415483-1-dev@lynne.ee> References: <20241003055141.415483-1-dev@lynne.ee> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 7/8] vulkan_shaderc: add more stages, target Vulkan 1.3 and only output debug if needed X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Lynne via ffmpeg-devel From: Lynne Reply-To: FFmpeg development discussions and patches Cc: Lynne Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: LSL30YWSc7KS --- libavfilter/vulkan_shaderc.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/libavfilter/vulkan_shaderc.c b/libavfilter/vulkan_shaderc.c index 56a2c0eef5..7144f04f21 100644 --- a/libavfilter/vulkan_shaderc.c +++ b/libavfilter/vulkan_shaderc.c @@ -41,6 +41,14 @@ static int shdc_shader_compile(FFVulkanContext *s, FFVkSPIRVCompiler *ctx, [VK_SHADER_STAGE_VERTEX_BIT] = shaderc_glsl_vertex_shader, [VK_SHADER_STAGE_FRAGMENT_BIT] = shaderc_glsl_fragment_shader, [VK_SHADER_STAGE_COMPUTE_BIT] = shaderc_glsl_compute_shader, + [VK_SHADER_STAGE_MESH_BIT_EXT] = shaderc_mesh_shader, + [VK_SHADER_STAGE_TASK_BIT_EXT] = shaderc_task_shader, + [VK_SHADER_STAGE_RAYGEN_BIT_KHR] = shaderc_raygen_shader, + [VK_SHADER_STAGE_ANY_HIT_BIT_KHR] = shaderc_anyhit_shader, + [VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR] = shaderc_closesthit_shader, + [VK_SHADER_STAGE_MISS_BIT_KHR] = shaderc_miss_shader, + [VK_SHADER_STAGE_INTERSECTION_BIT_KHR] = shaderc_intersection_shader, + [VK_SHADER_STAGE_CALLABLE_BIT_KHR] = shaderc_callable_shader, }; shaderc_compile_options_t opts = shaderc_compile_options_initialize(); @@ -49,11 +57,17 @@ static int shdc_shader_compile(FFVulkanContext *s, FFVkSPIRVCompiler *ctx, return AVERROR(ENOMEM); shaderc_compile_options_set_target_env(opts, shaderc_target_env_vulkan, - shaderc_env_version_vulkan_1_2); - shaderc_compile_options_set_target_spirv(opts, shaderc_spirv_version_1_5); - shaderc_compile_options_set_generate_debug_info(opts); - shaderc_compile_options_set_optimization_level(opts, - shaderc_optimization_level_performance); + shaderc_env_version_vulkan_1_3); + shaderc_compile_options_set_target_spirv(opts, shaderc_spirv_version_1_6); + + if (s->extensions & FF_VK_EXT_DEBUG_UTILS) { + shaderc_compile_options_set_generate_debug_info(opts); + shaderc_compile_options_set_optimization_level(opts, + shaderc_optimization_level_zero); + } else { + shaderc_compile_options_set_optimization_level(opts, + shaderc_optimization_level_performance); + } res = shaderc_compile_into_spv((shaderc_compiler_t)ctx->priv, shd->src.str, strlen(shd->src.str), From patchwork Thu Oct 3 05:51:35 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lynne X-Patchwork-Id: 51994 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:b18c:0:b0:48e:c0f8:d0de with SMTP id q12csp145956vqn; Wed, 2 Oct 2024 22:52:58 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXQKVfwREgvgBuHjlJqAgD8h2RKa9W6tTusSaKXUeZPXN0oAzELKXju+3Nzz/ziSwbA8g1D0fmHmMlXYs1xkV29@gmail.com X-Google-Smtp-Source: AGHT+IGUwzpxYGdZIMYbgPnP8YeMWNaoD62b6FRFuYH0xOM9wYHkgOuOArrg+s4b7iNFFeXQMcsY X-Received: by 2002:a05:6402:3494:b0:5c8:8381:c17b with SMTP id 4fb4d7f45d1cf-5c8b18ceb32mr1770398a12.2.1727934777859; Wed, 02 Oct 2024 22:52:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1727934777; cv=none; d=google.com; s=arc-20240605; b=b5SWAU5Sci+taAaeAQB/awY67rI5ROfH6H416czKTp2cJm31mIjTOYwgn/uoKW+ReM B0NBUmcwrpfj74FyKnWNgFeu/DU1iwujxQ8djrortfFTDKqr7zZacgMwqFrAADgqB2b+ QRRS/wlbCAjoo4OFA6mMzvaRU5xkH9rJd9Ri/GDOlzx4eYKR5u/Wv114X7rcZLfuhpm2 otQEltciatoN5sgEmSnDkwR6kt9oKei6Hdo0AHuAcN28GP403V0Hfy3h2ykM1FhIJ7eP r84S45hXmJ2qNu/AwJi7pCJeItfgstxPWaNgMrCzxSuZxWK3muhyJ9dpnZTTSBAoE38U 0LVw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:content-transfer-encoding:cc:reply-to:from :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:delivered-to; bh=S2Av7j+C/97ZD/oc0rnIVSdFBp7urkuGVuc0rnDwgJg=; fh=nenT92/WZoU6unXd3J6UhGUdod4piddKfVtctNBOh6k=; b=iZHPc875pZGWrZKM5ikdv8WzU3ATwkinpP98dORTLproSjuhypPPbWz1MdAiA0mhii /nlJNhkFZu/Jpc6xLf58LwjYfsFiRWX2qdTttgihQqKjOrmbFtMAHN1oi8FoB27p05o4 z6PoFGvHHuXwYk+ZR5nUXFG537g/wjEddIDAM7Qa8VyXOu37Z6moEFGWnQhugPhflw50 V26Tb06oe+RoCPb6nDsivqUY4LBJhdyhwgDwO9/pmMdOAYa6lz2KOPdIgD+cZlKiyyIe DeaTzUJtjHo0qiEGtqv8PibXMbpEZQoBhesfv6SxhGM9/lfBowVe7I20gU0Mu3oSKjtD u69A==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 4fb4d7f45d1cf-5c8ca49b1f7si382252a12.436.2024.10.02.22.52.57; Wed, 02 Oct 2024 22:52:57 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id CD17468DACD; Thu, 3 Oct 2024 08:51:57 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from vidala.lynne.ee (vidala.pars.ee [116.203.72.101]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5F52F68DA40 for ; Thu, 3 Oct 2024 08:51:51 +0300 (EEST) To: ffmpeg-devel@ffmpeg.org Date: Thu, 3 Oct 2024 07:51:35 +0200 Message-ID: <20241003055141.415483-8-dev@lynne.ee> X-Mailer: git-send-email 2.45.2.753.g447d99e1c3b In-Reply-To: <20241003055141.415483-1-dev@lynne.ee> References: <20241003055141.415483-1-dev@lynne.ee> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 8/8] vulkan: don't enable GL_EXT_buffer_reference by default X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Lynne via ffmpeg-devel From: Lynne Reply-To: FFmpeg development discussions and patches Cc: Lynne Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: tSbdnfdr0hz8 Only nlmeans_vulkan uses it. --- libavfilter/vf_nlmeans_vulkan.c | 6 ++++-- libavutil/vulkan.c | 2 -- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libavfilter/vf_nlmeans_vulkan.c b/libavfilter/vf_nlmeans_vulkan.c index 9ad12eb7b6..39460dc194 100644 --- a/libavfilter/vf_nlmeans_vulkan.c +++ b/libavfilter/vf_nlmeans_vulkan.c @@ -240,7 +240,8 @@ static av_cold int init_weights_pipeline(FFVulkanContext *vkctx, FFVkExecPool *e RET(ff_vk_shader_init(vkctx, shd, "nlmeans_weights", VK_SHADER_STAGE_COMPUTE_BIT, - NULL, 0, + (const char *[]) { "GL_EXT_buffer_reference", + "GL_EXT_buffer_reference2" }, 2, wg_size, 1, 1, 0)); @@ -431,7 +432,8 @@ static av_cold int init_denoise_pipeline(FFVulkanContext *vkctx, FFVkExecPool *e RET(ff_vk_shader_init(vkctx, shd, "nlmeans_denoise", VK_SHADER_STAGE_COMPUTE_BIT, - NULL, 0, + (const char *[]) { "GL_EXT_buffer_reference", + "GL_EXT_buffer_reference2" }, 2, 32, 32, 1, 0)); diff --git a/libavutil/vulkan.c b/libavutil/vulkan.c index c6aa6cdd10..46e5cad872 100644 --- a/libavutil/vulkan.c +++ b/libavutil/vulkan.c @@ -1479,8 +1479,6 @@ int ff_vk_shader_init(FFVulkanContext *s, FFVulkanShader *shd, const char *name, GLSLC(0, #define IS_WITHIN(v1, v2) ((v1.x < v2.x) && (v1.y < v2.y)) ); GLSLC(0, ); GLSLC(0, #extension GL_EXT_scalar_block_layout : require ); - GLSLC(0, #extension GL_EXT_buffer_reference : require ); - GLSLC(0, #extension GL_EXT_buffer_reference2 : require ); if (stage == VK_SHADER_STAGE_TASK_BIT_EXT || stage == VK_SHADER_STAGE_MESH_BIT_EXT)