Disponohet Vcc, kompilatori C/C++ për Vulkan

Pas tri vitesh zhvillimi, projekti kërkimor Vcc (Vulkan Clang Compiler) është paraqitur, i orientuar për të krijuar një kompilator që mund të translyojë kodin në gjuhën C++ në një përfaqësim që ekzekutohet në GPU-të që mbështesin API-në grafike Vulkan. Ndryshe nga modelet e programimit GPU të bazuar në gjuhët e shaderëve GLSL dhe HLSL, Vcc zhvillon idenë e heqjes totale të përdorimit të gjuhëve të veçanta të shaderëve dhe ofron mundësinë e kompilimit të drejtpërdrejtë të kodit C/C++ për Vulkan. Rezultatet e projektit shpërndahen nën licencën MIT.

Për kompilimin e kodit, përfshihen komponentët e projektit LLVM dhe Clang si frontend. Për ekzekutimin në GPU zhvillohet një përfaqësim të ndërmjetshëm të shaderëve të quajtur Shady dhe një kompilator për të transformuar kodin në këtë përfaqësim. Në masën e mundshme, mbështetet kompilimi i kodit standard C/C++, dhe për mbështetje të funksionaliteteve specifike të GPU ofrohen disa funksione të integruara shtesë.

Në Vcc përdoren mundësitë standarde të C/C++ për të menaxhuar rrjedhën e ekzekutimit të programit, duke përfshirë mundësinë e përdorimit të operatorit "goto". Lejohet thirrja e funksioneve, ekzekutimi rekurziv i funksioneve, përdorimi i treguesve fizikë, treguesve të etiketuar dhe treguesve në funksione, kryerja e operacioneve aritmetike mbi treguesit, si dhe përcaktimi i ndarjes së tipave në kujtesë.

Për të arritur mbështetje për mundësitë e C/C++, si funksionet dhe treguesit, përfaqësimi i ndërmjetëm Shady është zgjeruar me mbështetje për konstruksione speciale. Në formën e përgjithshme, Shady bazohet në përfaqësimin ndërmjetës SPIR-V 3 dhe përdor emulim për të implementuar mundësi të zgjeruara që nuk mund të realizohen drejtpërdrejt mbi SPIR-V. Për t'u përdorur në programet me specifikë për shaderë, ofrohen funksione të integruara dhe annotation. #include descriptor_set(0) descriptor_binding(1) uniform sampler2D texSampler; location(0) input vec3 vertexColor; location(1) input vec2 texCoord; location(0) output vec4 outColor; fragment_shader void main() { vec4 fragColor; fragColor.xyz = vertexColor; fragColor.w = 1.0f; outColor = texture2D(texSampler, texCoord) * fragColor; }

Për funksionimin e tij kërkohet një GPU që mbështet Vulkan 1.1, zgjerimin VK_KHR_buffer_device_address dhe tipet Int8, Int16 dhe Int64. Vcc është i pajtueshëm me drejtuesit Vulkan radv (AMD Mesa), amdvlk (AMD), nvk (NVIDIA), anv (Intel Mesa) dhe drejtuesit pronësorë AMD, Intel Arc dhe NVIDIA. Nga kufizimet e realizimit përmenden mungesa e mbështetjes për përjashtime C++, mosDisponibiliteti i funksioneve malloc/free dhe papërballueshmëria e funksioneve dhe treguesve midis sistemit host dhe GPU.

Burimi: opennet.ru

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster