برای بارهای کاری که محاسبات GPU ایده آل است، انتقال اسکریپت های RenderScript به محاسبات Vulkan به برنامه شما کنترل مستقیم بیشتری بر سخت افزار GPU می دهد و به طور بالقوه عملکرد بیشتری را در مقایسه با سایر API ها باز می کند.
یک نمای کلی در سطح بالا در ادامه میآید تا به شما کمک کند از سایهزنهای محاسباتی Vulkan برای جایگزینی اسکریپتهای RenderScript استفاده کنید.
مقداردهی اولیه Vulkan
به جای ایجاد یک شی زمینه RenderScript در Kotlin یا Java، مراحل زیر را برای ایجاد یک زمینه Vulkan با استفاده از NDK انجام دهید.
یک نمونه Vulkan ایجاد کنید.
یک دستگاه فیزیکی Vulkan را انتخاب کنید که از صف محاسباتی پشتیبانی می کند.
یک دستگاه منطقی Vulkan ایجاد کنید و صف محاسبه را دریافت کنید.
به صورت اختیاری، میتوانید لایههای اعتبارسنجی Vulkan را در اندروید راهاندازی کنید تا سرعت توسعه برنامه Vulkan خود را افزایش دهید.
برنامه نمونه نحوه راه اندازی زمینه Vulkan را در VulkanContext.h
نشان می دهد. برای کسب اطلاعات بیشتر، بخش Initialization و Devices and Queues مشخصات Vulkan را ببینید.
تخصیص ولکان
یک تخصیص RenderScript را می توان به یک تصویر ذخیره سازی Vulkan یا یک بافر ذخیره سازی Vulkan منتقل کرد. برای عملکرد بهتر با تصاویر فقط خواندنی، از یک تصویر نمونه با عملیات واکشی، یا به عنوان نمونهبردار تصویر ترکیبی ، یا با نمونهبردار متمایز و پیوندهای تصویر نمونهبرداری شده استفاده کنید.
منابع ولکان در داخل ولکان تخصیص داده شده است. برای جلوگیری از کپی برداری از حافظه در هنگام تعامل با سایر اجزای Android، از افزونه VK_ANDROID_external_memory_android_hardware_buffer
برای وارد کردن AHardwareBuffer
Android به Vulkan استفاده کنید. این افزونه در تمام دستگاه های اندرویدی که از Vulkan 1.1 پشتیبانی می کنند در دسترس است. برای اطلاعات بیشتر، به FEATURE_VULKAN_HARDWARE_VERSION
مراجعه کنید.
برنامه نمونه نحوه ایجاد منابع Vulkan را در VulkanResources.h
نشان می دهد. برای کسب اطلاعات بیشتر، بخش های ایجاد منبع و توصیفگرهای منابع در مشخصات Vulkan را ببینید.
تبدیل به شیدرهای محاسباتی Vulkan
اسکریپت های RenderScript شما باید به سایه زن های محاسباتی Vulkan تبدیل شوند. همچنین ممکن است نیاز داشته باشید که کد خود را بسته به استفاده از RenderScript globals تطبیق دهید.
یک شیدر محاسباتی Vulkan بنویسید
سایهزن محاسباتی Vulkan معمولاً به زبان OpenGL Shading Language (GLSL) نوشته میشود و سپس به فرمت استاندارد قابلحمل متوسط Representation-V (SPIR-V) کامپایل میشود.
برای اطلاعات دقیق و دستورالعملهای ادغام سایهزنها در برنامهتان، به کامپایلرهای سایهبان Vulkan در Android مراجعه کنید.
انطباق جهانی های اسکریپت
بر اساس ویژگیهای جهانیهای اسکریپت، توصیه میکنیم از ثابتهای تخصصی، ثابتهای فشار یا اشیاء بافر یکنواخت برای جهانیهایی که در سایهزن اصلاح نشدهاند، استفاده کنید:
- ثابتهای تخصصی : برای جهانیهای اسکریپت که عمدتاً در فراخوانیهای هسته سازگار هستند، توصیه میشود. تغییر مقدار ثابت های تخصصی نیاز به ایجاد مجدد خط لوله محاسباتی دارد.
- ثابتهای فشار : برای اسکریپتهای جهانی با اندازههای کوچکتر از
maxPushConstantsSize
که اغلب تغییر میکنند (حداقل تضمین شده: 128 بایت) توصیه میشود. - بافر یکنواخت : برای اسکریپت های جهانی با اندازه های بزرگتر از حد ثابت فشاری که اغلب تغییر می کنند، توصیه می شود.
برای جهانیهایی که در سایهزن تغییر میکنند، میتوانید از تصویر ذخیرهسازی Vulkan یا بافر ذخیرهسازی Vulkan استفاده کنید.
محاسبات
شما باید یک خط لوله محاسباتی Vulkan ایجاد کنید تا GPU شیدر محاسباتی شما را اجرا کند.
یک خط لوله محاسباتی Vulkan ایجاد کنید
فایل ComputePipeline.h
در برنامه نمونه نحوه ایجاد خط لوله محاسباتی Vulkan را نشان می دهد.
برای استفاده از یک سایه زن کامپایل شده SPIR-V در Vulkan، یک خط لوله محاسباتی Vulkan به صورت زیر بسازید:
- یک ماژول سایه زن با سایه زن کامپایل شده SPIR-V ایجاد کنید.
- یک طرح مجموعه توصیفگر ایجاد کنید که پیوندهای منابع را مشخص می کند (برای جزئیات بیشتر به تخصیص ها مراجعه کنید).
- یک مجموعه توصیفگر از طرح مجموعه توصیفگر ایجاد کنید.
- یک طرح خط لوله از طرح مجموعه توصیفگر ایجاد کنید.
- یک خط لوله محاسباتی با ماژول سایه زن و طرح خط لوله ایجاد کنید.
برای اطلاعات بیشتر به بخش Compute Pipelines در مشخصات Vulkan مراجعه کنید.
یک محاسبات را شروع کنید
برای شروع محاسبات با خط لوله محاسباتی:
- مجموعه توصیفگر را با منابع Vulkan به روز کنید.
- یک بافر دستور Vulkan ایجاد کنید و دستورات زیر را ضبط کنید:
- خط لوله و مجموعه توصیفگر را متصل کنید.
- اعزام گروه های کاری محاسباتی
- بافر فرمان را به صف محاسبه ارسال کنید.
- در صف منتظر بمانید یا به صورت اختیاری یک حصار همگامسازی را برگردانید.
برای زنجیرهای کردن چندین هسته با هم (مثلاً برای انتقال کدها با استفاده از ScriptGroup
)، آنها را در یک بافر دستوری ثبت کرده و با موانع حافظه همگامسازی کنید.
برنامه نمونه دو کار محاسباتی را نشان می دهد:
- چرخش HUE: یک کار محاسباتی ساده با یک شیدر محاسباتی. برای نمونه کد به
ImageProcessor::rotateHue
مراجعه کنید. - Blur: یک کار محاسباتی پیچیده تر که به طور متوالی دو سایه زن محاسباتی را اجرا می کند. برای نمونه کد،
ImageProcessor::blur
ببینید.
برای کسب اطلاعات بیشتر در مورد بافرهای فرمان یا موانع حافظه، به بخش هایی در مشخصات Vulkan به نام های Command Buffer و Memory Barriers مراجعه کنید.
،برای بارهای کاری که محاسبات GPU ایده آل است، انتقال اسکریپت های RenderScript به محاسبات Vulkan به برنامه شما کنترل مستقیم بیشتری بر سخت افزار GPU می دهد و به طور بالقوه عملکرد بیشتری را در مقایسه با سایر API ها باز می کند.
یک نمای کلی در سطح بالا در ادامه میآید تا به شما کمک کند از سایهزنهای محاسباتی Vulkan برای جایگزینی اسکریپتهای RenderScript استفاده کنید.
مقداردهی اولیه Vulkan
به جای ایجاد یک شی زمینه RenderScript در Kotlin یا Java، مراحل زیر را برای ایجاد یک زمینه Vulkan با استفاده از NDK انجام دهید.
یک نمونه Vulkan ایجاد کنید.
یک دستگاه فیزیکی Vulkan را انتخاب کنید که از صف محاسباتی پشتیبانی می کند.
یک دستگاه منطقی Vulkan ایجاد کنید و صف محاسبه را دریافت کنید.
به صورت اختیاری، میتوانید لایههای اعتبارسنجی Vulkan را در اندروید راهاندازی کنید تا سرعت توسعه برنامه Vulkan خود را افزایش دهید.
برنامه نمونه نحوه راه اندازی زمینه Vulkan را در VulkanContext.h
نشان می دهد. برای کسب اطلاعات بیشتر، بخش Initialization و Devices and Queues مشخصات Vulkan را ببینید.
تخصیص ولکان
یک تخصیص RenderScript را می توان به یک تصویر ذخیره سازی Vulkan یا یک بافر ذخیره سازی Vulkan منتقل کرد. برای عملکرد بهتر با تصاویر فقط خواندنی، از یک تصویر نمونه با عملیات واکشی، یا به عنوان نمونهبردار تصویر ترکیبی ، یا با نمونهبردار متمایز و پیوندهای تصویر نمونهبرداری شده استفاده کنید.
منابع ولکان در داخل ولکان تخصیص داده شده است. برای جلوگیری از کپی برداری از حافظه در هنگام تعامل با سایر اجزای Android، از افزونه VK_ANDROID_external_memory_android_hardware_buffer
برای وارد کردن AHardwareBuffer
Android به Vulkan استفاده کنید. این افزونه در تمام دستگاه های اندرویدی که از Vulkan 1.1 پشتیبانی می کنند در دسترس است. برای اطلاعات بیشتر، به FEATURE_VULKAN_HARDWARE_VERSION
مراجعه کنید.
برنامه نمونه نحوه ایجاد منابع Vulkan را در VulkanResources.h
نشان می دهد. برای کسب اطلاعات بیشتر، بخش های ایجاد منبع و توصیفگرهای منابع در مشخصات Vulkan را ببینید.
تبدیل به شیدرهای محاسباتی Vulkan
اسکریپت های RenderScript شما باید به سایه زن های محاسباتی Vulkan تبدیل شوند. همچنین ممکن است نیاز داشته باشید که کد خود را بسته به استفاده از RenderScript globals تطبیق دهید.
یک شیدر محاسباتی Vulkan بنویسید
سایهزن محاسباتی Vulkan معمولاً به زبان OpenGL Shading Language (GLSL) نوشته میشود و سپس به فرمت استاندارد قابلحمل متوسط Representation-V (SPIR-V) کامپایل میشود.
برای اطلاعات دقیق و دستورالعملهای ادغام سایهزنها در برنامهتان، به کامپایلرهای سایهبان Vulkan در Android مراجعه کنید.
انطباق جهانی های اسکریپت
بر اساس ویژگیهای جهانیهای اسکریپت، توصیه میکنیم از ثابتهای تخصصی، ثابتهای فشار یا اشیاء بافر یکنواخت برای جهانیهایی که در سایهزن اصلاح نشدهاند، استفاده کنید:
- ثابتهای تخصصی : برای جهانیهای اسکریپت که عمدتاً در فراخوانیهای هسته سازگار هستند، توصیه میشود. تغییر مقدار ثابت های تخصصی نیاز به ایجاد مجدد خط لوله محاسباتی دارد.
- ثابتهای فشار : برای اسکریپتهای جهانی با اندازههای کوچکتر از
maxPushConstantsSize
که اغلب تغییر میکنند (حداقل تضمین شده: 128 بایت) توصیه میشود. - بافر یکنواخت : برای اسکریپت های جهانی با اندازه های بزرگتر از حد ثابت فشاری که اغلب تغییر می کنند، توصیه می شود.
برای جهانیهایی که در سایهزن تغییر میکنند، میتوانید از تصویر ذخیرهسازی Vulkan یا بافر ذخیرهسازی Vulkan استفاده کنید.
محاسبات
شما باید یک خط لوله محاسباتی Vulkan ایجاد کنید تا GPU شیدر محاسباتی شما را اجرا کند.
یک خط لوله محاسباتی Vulkan ایجاد کنید
فایل ComputePipeline.h
در برنامه نمونه نحوه ایجاد خط لوله محاسباتی Vulkan را نشان می دهد.
برای استفاده از یک سایه زن کامپایل شده SPIR-V در Vulkan، یک خط لوله محاسباتی Vulkan به صورت زیر بسازید:
- یک ماژول سایه زن با سایه زن کامپایل شده SPIR-V ایجاد کنید.
- یک طرح مجموعه توصیفگر ایجاد کنید که پیوندهای منابع را مشخص می کند (برای جزئیات بیشتر به تخصیص ها مراجعه کنید).
- یک مجموعه توصیفگر از طرح مجموعه توصیفگر ایجاد کنید.
- یک طرح خط لوله از طرح مجموعه توصیفگر ایجاد کنید.
- یک خط لوله محاسباتی با ماژول سایه زن و طرح خط لوله ایجاد کنید.
برای اطلاعات بیشتر به بخش Compute Pipelines در مشخصات Vulkan مراجعه کنید.
یک محاسبات را شروع کنید
برای شروع محاسبات با خط لوله محاسباتی:
- مجموعه توصیفگر را با منابع Vulkan به روز کنید.
- یک بافر دستور Vulkan ایجاد کنید و دستورات زیر را ضبط کنید:
- خط لوله و مجموعه توصیفگر را متصل کنید.
- اعزام گروه های کاری محاسباتی
- بافر فرمان را به صف محاسبه ارسال کنید.
- در صف منتظر بمانید یا به صورت اختیاری یک حصار همگامسازی را برگردانید.
برای زنجیرهای کردن چندین هسته با هم (مثلاً برای انتقال کدها با استفاده از ScriptGroup
)، آنها را در یک بافر دستوری ثبت کرده و با موانع حافظه همگامسازی کنید.
برنامه نمونه دو کار محاسباتی را نشان می دهد:
- چرخش HUE: یک کار محاسباتی ساده با یک شیدر محاسباتی. برای نمونه کد به
ImageProcessor::rotateHue
مراجعه کنید. - Blur: یک کار محاسباتی پیچیده تر که به طور متوالی دو سایه زن محاسباتی را اجرا می کند. برای نمونه کد،
ImageProcessor::blur
ببینید.
برای کسب اطلاعات بیشتر در مورد بافرهای فرمان یا موانع حافظه، به بخش هایی در مشخصات Vulkan به نام های Command Buffer و Memory Barriers مراجعه کنید.
،برای بارهای کاری که محاسبات GPU ایده آل است، انتقال اسکریپت های RenderScript به محاسبات Vulkan به برنامه شما کنترل مستقیم بیشتری بر سخت افزار GPU می دهد و به طور بالقوه عملکرد بیشتری را در مقایسه با سایر API ها باز می کند.
یک نمای کلی در سطح بالا در ادامه میآید تا به شما کمک کند از سایهزنهای محاسباتی Vulkan برای جایگزینی اسکریپتهای RenderScript استفاده کنید.
مقداردهی اولیه Vulkan
به جای ایجاد یک شی زمینه RenderScript در Kotlin یا Java، مراحل زیر را برای ایجاد یک زمینه Vulkan با استفاده از NDK انجام دهید.
یک نمونه Vulkan ایجاد کنید.
یک دستگاه فیزیکی Vulkan را انتخاب کنید که از صف محاسباتی پشتیبانی می کند.
یک دستگاه منطقی Vulkan ایجاد کنید و صف محاسبه را دریافت کنید.
به صورت اختیاری، میتوانید لایههای اعتبارسنجی Vulkan را در اندروید راهاندازی کنید تا سرعت توسعه برنامه Vulkan خود را افزایش دهید.
برنامه نمونه نحوه راه اندازی زمینه Vulkan را در VulkanContext.h
نشان می دهد. برای کسب اطلاعات بیشتر، بخش Initialization و Devices and Queues مشخصات Vulkan را ببینید.
تخصیص ولکان
یک تخصیص RenderScript را می توان به یک تصویر ذخیره سازی Vulkan یا یک بافر ذخیره سازی Vulkan منتقل کرد. برای عملکرد بهتر با تصاویر فقط خواندنی، از یک تصویر نمونه با عملیات واکشی، یا به عنوان نمونهبردار تصویر ترکیبی ، یا با نمونهبردار متمایز و پیوندهای تصویر نمونهبرداری شده استفاده کنید.
منابع ولکان در داخل ولکان تخصیص داده شده است. برای جلوگیری از کپی برداری از حافظه در هنگام تعامل با سایر اجزای Android، از افزونه VK_ANDROID_external_memory_android_hardware_buffer
برای وارد کردن AHardwareBuffer
Android به Vulkan استفاده کنید. این افزونه در تمام دستگاه های اندرویدی که از Vulkan 1.1 پشتیبانی می کنند در دسترس است. برای اطلاعات بیشتر، به FEATURE_VULKAN_HARDWARE_VERSION
مراجعه کنید.
برنامه نمونه نحوه ایجاد منابع Vulkan را در VulkanResources.h
نشان می دهد. برای کسب اطلاعات بیشتر، بخش های ایجاد منبع و توصیفگرهای منابع در مشخصات Vulkan را ببینید.
تبدیل به شیدرهای محاسباتی Vulkan
اسکریپت های RenderScript شما باید به سایه زن های محاسباتی Vulkan تبدیل شوند. همچنین ممکن است نیاز داشته باشید که کد خود را بسته به استفاده از RenderScript globals تطبیق دهید.
یک شیدر محاسباتی Vulkan بنویسید
سایهزن محاسباتی Vulkan معمولاً به زبان OpenGL Shading Language (GLSL) نوشته میشود و سپس به فرمت استاندارد قابلحمل متوسط Representation-V (SPIR-V) کامپایل میشود.
برای اطلاعات دقیق و دستورالعملهای ادغام سایهزنها در برنامهتان، به کامپایلرهای سایهبان Vulkan در Android مراجعه کنید.
انطباق جهانی های اسکریپت
بر اساس ویژگیهای جهانیهای اسکریپت، توصیه میکنیم از ثابتهای تخصصی، ثابتهای فشار یا اشیاء بافر یکنواخت برای جهانیهایی که در سایهزن اصلاح نشدهاند، استفاده کنید:
- ثابتهای تخصصی : برای جهانیهای اسکریپت که عمدتاً در فراخوانیهای هسته سازگار هستند، توصیه میشود. تغییر مقدار ثابت های تخصصی نیاز به ایجاد مجدد خط لوله محاسباتی دارد.
- ثابتهای فشار : برای اسکریپتهای جهانی با اندازههای کوچکتر از
maxPushConstantsSize
که اغلب تغییر میکنند (حداقل تضمین شده: 128 بایت) توصیه میشود. - بافر یکنواخت : برای اسکریپت های جهانی با اندازه های بزرگتر از حد ثابت فشاری که اغلب تغییر می کنند، توصیه می شود.
برای جهانیهایی که در سایهزن تغییر میکنند، میتوانید از تصویر ذخیرهسازی Vulkan یا بافر ذخیرهسازی Vulkan استفاده کنید.
محاسبات
شما باید یک خط لوله محاسباتی Vulkan ایجاد کنید تا GPU شیدر محاسباتی شما را اجرا کند.
یک خط لوله محاسباتی Vulkan ایجاد کنید
فایل ComputePipeline.h
در برنامه نمونه نحوه ایجاد خط لوله محاسباتی Vulkan را نشان می دهد.
برای استفاده از یک سایه زن کامپایل شده SPIR-V در Vulkan، یک خط لوله محاسباتی Vulkan به صورت زیر بسازید:
- یک ماژول سایه زن با سایه زن کامپایل شده SPIR-V ایجاد کنید.
- یک طرح مجموعه توصیفگر ایجاد کنید که پیوندهای منابع را مشخص می کند (برای جزئیات بیشتر به تخصیص ها مراجعه کنید).
- یک مجموعه توصیفگر از طرح مجموعه توصیفگر ایجاد کنید.
- یک طرح خط لوله از طرح مجموعه توصیفگر ایجاد کنید.
- یک خط لوله محاسباتی با ماژول سایه زن و طرح خط لوله ایجاد کنید.
برای اطلاعات بیشتر به بخش Compute Pipelines در مشخصات Vulkan مراجعه کنید.
یک محاسبات را شروع کنید
برای شروع محاسبات با خط لوله محاسباتی:
- مجموعه توصیفگر را با منابع Vulkan به روز کنید.
- یک بافر دستور Vulkan ایجاد کنید و دستورات زیر را ضبط کنید:
- خط لوله و مجموعه توصیفگر را متصل کنید.
- اعزام گروه های کاری محاسباتی
- بافر فرمان را به صف محاسبه ارسال کنید.
- در صف منتظر بمانید یا به صورت اختیاری یک حصار همگامسازی را برگردانید.
برای زنجیرهای کردن چندین هسته با هم (مثلاً برای انتقال کدها با استفاده از ScriptGroup
)، آنها را در یک بافر دستوری ثبت کرده و با موانع حافظه همگامسازی کنید.
برنامه نمونه دو کار محاسباتی را نشان می دهد:
- چرخش HUE: یک کار محاسباتی ساده با یک شیدر محاسباتی. برای نمونه کد به
ImageProcessor::rotateHue
مراجعه کنید. - Blur: یک کار محاسباتی پیچیده تر که به طور متوالی دو سایه زن محاسباتی را اجرا می کند. برای نمونه کد،
ImageProcessor::blur
ببینید.
برای کسب اطلاعات بیشتر در مورد بافرهای فرمان یا موانع حافظه، به بخش هایی در مشخصات Vulkan به نام های Command Buffer و Memory Barriers مراجعه کنید.