تعداد ویژگیهای WebGPU ممکن است این بار کمی کم به نظر برسد، اما برخی از پیشرفتهای مهم در گوشه و کنار هستند! نسخههای آینده شامل ویژگیهایی مانند بهبود سرعت کامپایل سایهزن و تغییرات در مدل همگام پیادهسازی با استفاده از WGPUFuture خواهد بود.
زیر گروه ها (ویژگی در حال توسعه)
ویژگی زیرگروهها موازیسازی سطح SIMD را فعال میکند و به رشتههای درون یک گروه اجازه میدهد تا با هم ارتباط برقرار کنند و عملیات ریاضی جمعی را انجام دهند (مثلاً محاسبه مجموع 16 عدد). این یک شکل بسیار کارآمد از اشتراک گذاری داده های بین رشته ای را فراهم می کند.
عملیات زیرگروه توسط APIهای GPU مدرن پشتیبانی می شود، اما جزئیات نامگذاری و پیاده سازی متفاوت است. تیم کروم نقاط مشترک را شناسایی کرده و اکنون در حال کار برای استانداردسازی این ویژگی است. پیشنهاد را بررسی کنید و اگر سوالی دارید نظر دهید .
در chrome://flags/#enable-experimental-web-platform-features
یک پیادهسازی حداقل و غیر استاندارد از زیر گروهها در پشت پرچم «ویژگیهای پلتفرم وب آزمایشی» وجود دارد تا توسعهدهندگان بتوانند آن را امتحان کنند و بازخورد خود را به عنوان مزایای دنیای واقعی به اشتراک بگذارند. هنوز در زمینه WebGPU اثبات نشده است.
وقتی ویژگی "chromium-experimental-subgroups"
در یک GPUAdapter
در دسترس است، یک GPUDevice
با این ویژگی درخواست کنید تا از زیرگروههای آزمایشی در WGSL پشتیبانی کند و محدودیتهای minSubgroupSize
و maxSubgroupSize
آن را بررسی کنید.
همچنین باید با enable chromium_experimental_subgroups
این برنامه افزودنی را در کد WGSL خود به صراحت فعال کنید. وقتی فعال باشد، به موارد اضافه شده زیر دسترسی خواهید داشت:
-
subgroup_invocation_id
: یک مقدار داخلی برای نمایه رشته در زیر گروه. -
subgroup_size
: یک مقدار داخلی برای دسترسی به اندازه زیرگروه. -
subgroupBallot(value):
مجموعهای از فیلدهای بیت را برمیگرداند که در آن بیت مربوط بهsubgroup_invocation_id
1 است، اگرvalue
برای آن فراخوان فعال درست باشد و در غیر این صورت 0 است. -
subgroupBroadcast(value, id)
:value
را از فراخوانی باid
تطبیقsubgroup_invocation_id
به همه فراخوانیهای داخل زیرگروه پخش میکند. توجه:id
باید یک ثابت زمان کامپایل باشد.
قطعه کد زیر پایه ای برای سرهم بندی کردن و کشف پتانسیل زیرگروه ها فراهم می کند.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("chromium-experimental-subgroups")) {
throw new Error("Experimental subgroups support is not available");
}
// Explicitly request experimental subgroups support.
const device = await adapter.requestDevice({
requiredFeatures: ["chromium-experimental-subgroups"],
});
const shaderModule = device.createShaderModule({ code: `
enable chromium_experimental_subgroups;
@compute @workgroup_size(64) fn main(
@builtin(global_invocation_id) global_id : vec3u,
@builtin(subgroup_size) sg_size : u32,
@builtin(subgroup_invocation_id) sg_id : u32) {
// TODO: Use subgroupBallot() and subgroupBroadcast().
}`,
});
رندر به تکه ای از بافت سه بعدی
اکنون میتوانید با عضو جدید depthSlice
در GPURenderPassColorAttachment
، مستقیماً به برش(های) از بافتهای سهبعدی در پاسهای رندر رندر دهید، و قابلیتهای آن را فراتر از رندر بافت دوبعدی رایج گسترش دهید. این افزونه به شما اجازه میدهد برای مثال صحنهها و افکتهای مبتنی بر وکسل را با رندر کردن مستقیم در حجمهای بافت سهبعدی ایجاد کنید. به شماره سپیده دم: 1020 مراجعه کنید.
به روز رسانی سحر
فهرست جامع تعهدات را بررسی کنید.
چه چیزی در WebGPU جدید است
فهرستی از همه چیزهایی که در سری What's New in WebGPU پوشش داده شده است.
کروم 131
- فاصله های کلیپ در WGSL
- GPUCanvasContext getConfiguration()
- نقطه و خط اولیه نباید بایاس عمق داشته باشند
- توابع داخلی اسکن جامع برای زیرگروه ها
- پشتیبانی آزمایشی برای چند قرعه کشی غیر مستقیم
- گزینه کامپایل ماژول Shader ریاضی سخت
- حذف GPUAdapter requestAdapterInfo()
- به روز رسانی سحر
کروم 130
- ترکیب منبع دوگانه
- بهبود زمان کامپایل شیدر در فلز
- منسوخ شدن GPUAdapter requestAdapterInfo()
- به روز رسانی سحر
کروم 129
کروم 128
- آزمایش با زیر گروه ها
- بایاس عمق تنظیم را برای خطوط و نقاط منسوخ کنید
- در صورت جلوگیری از Default، هشدار DevTools خطای ضبط نشده را مخفی کنید
- WGSL ابتدا نمونهگیری را درونیابی میکند و هر کدام را
- به روز رسانی سحر
کروم 127
- پشتیبانی آزمایشی از OpenGL ES در اندروید
- ویژگی اطلاعات GPUAdapter
- بهبودهای WebAssembly interop
- خطاهای رمزگذار فرمان بهبود یافته است
- به روز رسانی سحر
کروم 126
- حد maxTextureArrayLayers را افزایش دهید
- بهینه سازی بارگذاری بافر برای باطن Vulkan
- بهبود زمان کامپایل شیدر
- بافرهای فرمان ارسالی باید منحصر به فرد باشند
- به روز رسانی سحر
کروم 125
کروم 124
- بافت های ذخیره سازی فقط خواندنی و خواندنی و نوشتنی
- پشتیبانی کارگران خدماتی و کارگران مشترک
- ویژگی های اطلاعات آداپتور جدید
- رفع اشکال
- به روز رسانی سحر
کروم 123
- توابع داخلی DP4a در WGSL پشتیبانی می کند
- پارامترهای اشاره گر نامحدود در WGSL
- قند نحوی برای عدم ارجاع کامپوزیت ها در WGSL
- حالت فقط خواندنی را برای جنبه های استنسیل و عمق جدا کنید
- به روز رسانی سحر
کروم 122
- گسترش دسترسی با حالت سازگاری (ویژگی در حال توسعه)
- حد maxVertexAttributes را افزایش دهید
- به روز رسانی سحر
کروم 121
- پشتیبانی از WebGPU در اندروید
- برای کامپایل شیدر در ویندوز به جای FXC از DXC استفاده کنید
- پرس و جوهای مهر زمانی در گذرنامه های محاسبه و ارائه
- نقاط ورودی پیش فرض به ماژول های سایه زن
- پشتیبانی از display-p3 به عنوان فضای رنگی GPUExternalTexture
- اطلاعات انبوه حافظه
- به روز رسانی سحر
کروم 120
- پشتیبانی از مقادیر ممیز شناور 16 بیتی در WGSL
- محدودیت ها را فشار دهید
- تغییرات در حالت عمقی-استنسیل
- به روز رسانی اطلاعات آداپتور
- کوانتیزاسیون پرس و جوهای مهر زمانی
- ویژگی های تمیز کردن فنری
کروم 119
کروم 118
- پشتیبانی از HTMLImageElement و ImageData در
copyExternalImageToTexture()
- پشتیبانی آزمایشی از بافت ذخیرهسازی خواندنی-نوشتنی و فقط خواندنی
- به روز رسانی سحر
کروم 117
- بافر راس را تنظیم نکنید
- گروه bind را تنظیم نکنید
- هنگام گم شدن دستگاه، خطاهای ایجاد خط لوله ناهمگام را خاموش کنید
- به روز رسانی های ایجاد ماژول سایه زن SPIR-V
- بهبود تجربه توسعه دهندگان
- ذخیره سازی خطوط لوله با طرح تولید خودکار
- به روز رسانی سحر
کروم 116
- یکپارچه سازی WebCodecs
- دستگاه گمشده توسط GPUAdapter
requestDevice()
برگردانده شد - در صورت فراخوانی
importExternalTexture()
پخش ویدیو را روان نگه دارید - مطابقت با مشخصات
- بهبود تجربه توسعه دهندگان
- به روز رسانی سحر
کروم 115
- پشتیبانی از پسوندهای زبان WGSL
- پشتیبانی آزمایشی از Direct3D 11
- GPU گسسته را به طور پیشفرض با برق AC دریافت کنید
- بهبود تجربه توسعه دهندگان
- به روز رسانی سحر
کروم 114
- بهینه سازی جاوا اسکریپت
- getCurrentTexture() روی بوم پیکربندی نشده خطای InvalidState را ایجاد می کند
- به روز رسانی WGSL
- به روز رسانی سحر
کروم 113
،تعداد ویژگیهای WebGPU ممکن است این بار کمی کم به نظر برسد، اما برخی از پیشرفتهای مهم در گوشه و کنار هستند! نسخههای آینده شامل ویژگیهایی مانند بهبود سرعت کامپایل سایهزن و تغییرات در مدل همگام پیادهسازی با استفاده از WGPUFuture خواهد بود.
زیر گروه ها (ویژگی در حال توسعه)
ویژگی زیرگروهها موازیسازی سطح SIMD را فعال میکند و به رشتههای درون یک گروه اجازه میدهد تا با هم ارتباط برقرار کنند و عملیات ریاضی جمعی را انجام دهند (مثلاً محاسبه مجموع 16 عدد). این یک شکل بسیار کارآمد از اشتراک گذاری داده های بین رشته ای را فراهم می کند.
عملیات زیرگروه توسط APIهای GPU مدرن پشتیبانی می شود، اما جزئیات نامگذاری و پیاده سازی متفاوت است. تیم کروم نقاط مشترک را شناسایی کرده و اکنون در حال کار برای استانداردسازی این ویژگی است. پیشنهاد را بررسی کنید و اگر سوالی دارید نظر دهید .
در chrome://flags/#enable-experimental-web-platform-features
یک پیادهسازی حداقل و غیر استاندارد از زیر گروهها در پشت پرچم «ویژگیهای پلتفرم وب آزمایشی» وجود دارد تا توسعهدهندگان بتوانند آن را امتحان کنند و بازخورد خود را به عنوان مزایای دنیای واقعی به اشتراک بگذارند. هنوز در زمینه WebGPU اثبات نشده است.
وقتی ویژگی "chromium-experimental-subgroups"
در یک GPUAdapter
در دسترس است، یک GPUDevice
با این ویژگی درخواست کنید تا از زیرگروههای آزمایشی در WGSL پشتیبانی کند و محدودیتهای minSubgroupSize
و maxSubgroupSize
آن را بررسی کنید.
همچنین باید با enable chromium_experimental_subgroups
این برنامه افزودنی را در کد WGSL خود به صراحت فعال کنید. وقتی فعال باشد، به موارد اضافه شده زیر دسترسی خواهید داشت:
-
subgroup_invocation_id
: یک مقدار داخلی برای نمایه رشته در زیر گروه. -
subgroup_size
: یک مقدار داخلی برای دسترسی به اندازه زیرگروه. -
subgroupBallot(value):
مجموعهای از فیلدهای بیت را برمیگرداند که در آن بیت مربوط بهsubgroup_invocation_id
1 است، اگرvalue
برای آن فراخوان فعال درست باشد و در غیر این صورت 0 است. -
subgroupBroadcast(value, id)
:value
را از فراخوانی باid
تطبیقsubgroup_invocation_id
به همه فراخوانیهای داخل زیرگروه پخش میکند. توجه:id
باید یک ثابت زمان کامپایل باشد.
قطعه کد زیر پایه ای برای سرهم بندی کردن و کشف پتانسیل زیرگروه ها فراهم می کند.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("chromium-experimental-subgroups")) {
throw new Error("Experimental subgroups support is not available");
}
// Explicitly request experimental subgroups support.
const device = await adapter.requestDevice({
requiredFeatures: ["chromium-experimental-subgroups"],
});
const shaderModule = device.createShaderModule({ code: `
enable chromium_experimental_subgroups;
@compute @workgroup_size(64) fn main(
@builtin(global_invocation_id) global_id : vec3u,
@builtin(subgroup_size) sg_size : u32,
@builtin(subgroup_invocation_id) sg_id : u32) {
// TODO: Use subgroupBallot() and subgroupBroadcast().
}`,
});
رندر به تکه ای از بافت سه بعدی
اکنون میتوانید با عضو جدید depthSlice
در GPURenderPassColorAttachment
، مستقیماً به برش(های) از بافتهای سهبعدی در پاسهای رندر رندر دهید، و قابلیتهای آن را فراتر از رندر بافت دوبعدی رایج گسترش دهید. این افزونه به شما اجازه میدهد برای مثال صحنهها و افکتهای مبتنی بر وکسل را با رندر کردن مستقیم در حجمهای بافت سهبعدی ایجاد کنید. به شماره سپیده دم: 1020 مراجعه کنید.
به روز رسانی سحر
فهرست جامع تعهدات را بررسی کنید.
چه چیزی در WebGPU جدید است
فهرستی از همه چیزهایی که در سری What's New in WebGPU پوشش داده شده است.
کروم 131
- فاصله های کلیپ در WGSL
- GPUCanvasContext getConfiguration()
- نقطه و خط اولیه نباید بایاس عمق داشته باشند
- توابع داخلی اسکن جامع برای زیرگروه ها
- پشتیبانی آزمایشی برای چند قرعه کشی غیر مستقیم
- گزینه کامپایل ماژول Shader ریاضی سخت
- حذف GPUAdapter requestAdapterInfo()
- به روز رسانی سحر
کروم 130
- ترکیب منبع دوگانه
- بهبود زمان کامپایل شیدر در فلز
- منسوخ شدن GPUAdapter requestAdapterInfo()
- به روز رسانی سحر
کروم 129
کروم 128
- آزمایش با زیر گروه ها
- بایاس عمق تنظیم را برای خطوط و نقاط منسوخ کنید
- در صورت جلوگیری از Default، هشدار DevTools خطای ضبط نشده را مخفی کنید
- WGSL ابتدا نمونهگیری را درونیابی میکند و هر کدام را
- به روز رسانی سحر
کروم 127
- پشتیبانی آزمایشی از OpenGL ES در اندروید
- ویژگی اطلاعات GPUAdapter
- بهبودهای WebAssembly interop
- خطاهای رمزگذار فرمان بهبود یافته است
- به روز رسانی سحر
کروم 126
- حد maxTextureArrayLayers را افزایش دهید
- بهینه سازی بارگذاری بافر برای باطن Vulkan
- بهبود زمان کامپایل شیدر
- بافرهای فرمان ارسالی باید منحصر به فرد باشند
- به روز رسانی سحر
کروم 125
کروم 124
- بافت های ذخیره سازی فقط خواندنی و خواندنی و نوشتنی
- پشتیبانی کارگران خدماتی و کارگران مشترک
- ویژگی های اطلاعات آداپتور جدید
- رفع اشکال
- به روز رسانی سحر
کروم 123
- توابع داخلی DP4a در WGSL پشتیبانی می کند
- پارامترهای اشاره گر نامحدود در WGSL
- قند نحوی برای عدم ارجاع کامپوزیت ها در WGSL
- حالت فقط خواندنی را برای جنبه های استنسیل و عمق جدا کنید
- به روز رسانی سحر
کروم 122
- گسترش دسترسی با حالت سازگاری (ویژگی در حال توسعه)
- حد maxVertexAttributes را افزایش دهید
- به روز رسانی سحر
کروم 121
- پشتیبانی از WebGPU در اندروید
- برای کامپایل شیدر در ویندوز به جای FXC از DXC استفاده کنید
- پرس و جوهای مهر زمانی در گذرنامه های محاسبه و ارائه
- نقاط ورودی پیش فرض به ماژول های سایه زن
- پشتیبانی از display-p3 به عنوان فضای رنگی GPUExternalTexture
- اطلاعات انبوه حافظه
- به روز رسانی سحر
کروم 120
- پشتیبانی از مقادیر ممیز شناور 16 بیتی در WGSL
- محدودیت ها را فشار دهید
- تغییرات در حالت عمقی-استنسیل
- به روز رسانی اطلاعات آداپتور
- کوانتیزاسیون پرس و جوهای مهر زمانی
- ویژگی های تمیز کردن فنری
کروم 119
کروم 118
- پشتیبانی از HTMLImageElement و ImageData در
copyExternalImageToTexture()
- پشتیبانی آزمایشی از بافت ذخیرهسازی خواندنی-نوشتنی و فقط خواندنی
- به روز رسانی سحر
کروم 117
- بافر راس را تنظیم نکنید
- گروه bind را تنظیم نکنید
- هنگام گم شدن دستگاه، خطاهای ایجاد خط لوله ناهمگام را خاموش کنید
- به روز رسانی های ایجاد ماژول سایه زن SPIR-V
- بهبود تجربه توسعه دهندگان
- ذخیره سازی خطوط لوله با طرح تولید خودکار
- به روز رسانی سحر
کروم 116
- یکپارچه سازی WebCodecs
- دستگاه گمشده توسط GPUAdapter
requestDevice()
برگردانده شد - در صورت فراخوانی
importExternalTexture()
پخش ویدیو را روان نگه دارید - مطابقت با مشخصات
- بهبود تجربه توسعه دهندگان
- به روز رسانی سحر
کروم 115
- پشتیبانی از پسوندهای زبان WGSL
- پشتیبانی آزمایشی از Direct3D 11
- GPU گسسته را به طور پیشفرض با برق AC دریافت کنید
- بهبود تجربه توسعه دهندگان
- به روز رسانی سحر
کروم 114
- بهینه سازی جاوا اسکریپت
- getCurrentTexture() روی بوم پیکربندی نشده خطای InvalidState را ایجاد می کند
- به روز رسانی WGSL
- به روز رسانی سحر