এখানে ভ্যালকান এবং ডাইরেক্টএক্স ১২-এর একটি অ-বহনযোগ্য তালিকা রয়েছে যা নাথনের অনুরূপ মানদণ্ড ব্যবহার করে একত্রে আবদ্ধ।
সামগ্রিকভাবে উভয় এপিআই আশ্চর্যজনকভাবে একই রকম। শেডার পর্যায়ের মতো জিনিসগুলি ডিএক্স 11 এবং ওপেনজিএল থেকে অপরিবর্তিত রয়েছে। এবং স্পষ্টতই, ডাইরেক্টএক্স শেডারগুলিকে দৃশ্যমান করতে ভিউগুলি ব্যবহার করে। ভুলকানও ভিউ ব্যবহার করে তবে সেগুলি ঘন ঘন হয়।
শেডার দৃশ্যমানতার আচরণ দুজনের মধ্যে কিছুটা আলাদা fers ভ্যালকান একটি মাস্ক ব্যবহার করে নির্ধারণ করে যে কোনও বর্ণনাকারী বিভিন্ন শেডার পর্যায়ে দৃশ্যমান রয়েছে কিনা। ডিএক্স 12 এটিকে কিছুটা ভিন্নভাবে পরিচালনা করে, সংস্থানগুলির দৃশ্যমানতা হয় একক স্টেজ বা সমস্ত পর্যায়ে করা হয়।
আমি ডেস্ক্রিপ্টর সেট / রুট প্যারামিটার স্টাফগুলি ভাল করে ফেললাম। দুটি এপিআই-এর মধ্যে যে ক্ষেত্রগুলি বিস্তরভাবে পরিবর্তিত হয় সেগুলির মধ্যে বর্ণনাকারী হ্যান্ডলিং অন্যতম is যাইহোক, শেষ ফলাফল মোটামুটি অনুরূপ।
এপিআই বুনিয়াদি
Vulkan DirectX 12
--------------- ---------------
n/a IDXGIFactory4
VkInstance n/a
VkPhysicalDevice IDXGIAdapter1
VkDevice ID3D12Device
VkQueue ID3D12CommandQueue
VkSwapchain IDXGISwapChain3
VkFormat DXGI_FORMAT
SPIR-V D3D12_SHADER_BYTECODE
VkFence fences
VkSemaphore n/a
VkEvent n/a
ভলকানের ডাব্লুএসআই স্তরটি সোয়াপচেইনের জন্য চিত্র সরবরাহ করে। ছবিটি উপস্থাপনের জন্য ডিএক্স 12 এর তৈরি সংস্থানগুলির প্রয়োজন।
সাধারণ কাতারের আচরণ উভয়ের মধ্যে বেশ সমান similar একাধিক থ্রেড থেকে জমা দেওয়ার সময় কিছুটা আইডিসিঙ্ক্রেসি রয়েছে।
আরও জিনিস মনে পড়ার সাথে সাথে আপডেট করার চেষ্টা করব ...
কমান্ড বাফার এবং পুল
Vulkan DirectX 12
--------------- ---------------
VkCommandPool ID3D12CommandAllocator
VkCommandBuffer ID3D12CommandList/ID3D12GraphicsCommandList
ভুলকান / ডিএক্স 12 ডক্স থেকে কমান্ড পুল / বরাদ্দকারী সম্পর্কে ভার্চিয়েশন আচরণটি একেবারেই ভিন্ন কথায় বলে দেয় - তবে আসল আচরণটি বেশ অনুরূপ। ব্যবহারকারীরা পুল থেকে অনেক কমান্ড বাফার / তালিকা বরাদ্দ করতে মুক্ত। তবে পুল থেকে কেবল একটি কমান্ড বাফার / তালিকা রেকর্ডিং করা যায়। পুলগুলি থ্রেডগুলির মধ্যে ভাগ করা যায় না। সুতরাং একাধিক থ্রেডের একাধিক পুলের প্রয়োজন। আপনি উভয়ই কমান্ড বাফার / তালিকা জমা দেওয়ার সাথে সাথে রেকর্ডিং শুরু করতে পারেন।
DX12 কমান্ড তালিকা একটি খোলা অবস্থায় তৈরি করা হয়। আমি ভুলকানের অভ্যস্ত থেকে এটিকে কিছুটা বিরক্তিকর মনে হচ্ছে। DX12 এছাড়াও কমান্ড বরাদ্দকারী এবং কমান্ড তালিকার স্পষ্ট পুনরায় সেট করা প্রয়োজন। এটি ভুলকানের একটি optionচ্ছিক আচরণ।
বর্ণনাকারী
Vulkan DirectX 12
--------------- ---------------
VkDescriptorPool n/a
VkDescriptorSet n/a
VkDescriptorSetLayout n/a
VkDescriptorSetLayoutBinding RootParameter**
n/a ID3D12DescriptorHeap
** RootParameter - না একটি সঠিক সমতুল্য VkDescriptorSetLayoutBinding কিন্তু বড় ছবি অনুরূপ চিন্তা।
ভিকিডিস্কিটারপুল এবং আইডি 3 ডি 12 ডিজিটরহ্যাপগুলি হ'ল ধরণের অনুরূপ (ধন্যবাদ নিকোলাস) যাতে তারা উভয়ই বর্ণনাকারীদের বরাদ্দ নিজেরাই পরিচালনা করে।
এটি লক্ষ করা উচিত যে ডিএক্স 12 কেবলমাত্র একটি নির্দিষ্ট সময়ে কমান্ড তালিকার সাথে সীমাবদ্ধ সর্বাধিক দুটি বিবরণকারী হিপগুলিকে সমর্থন করে। একটি সিবিভিএসআরভিউএভি এবং একটি নমুনা। আপনি এই স্তূপগুলির উল্লেখ করতে যতগুলি বিবরণী টেবিল রাখতে পারেন।
ভুলকান পক্ষে, আপনি বিবরণকারী পুলকে সর্বাধিক সংখ্যক বর্ণনাকারী সেটের সীমাবদ্ধতা রয়েছে। উভয়ই আপনাকে পুল / হিপ অনুসারে টাইপ অনুযায়ী বর্ণনাকারীর সংখ্যার জন্য কিছুটা ম্যানুয়াল অ্যাকাউন্টিং করতে হবে। ভ্যালকান বর্ণনাকারীদের ধরণের সাথে আরও স্পষ্ট। অন্যদিকে DX12 বর্ণনাকারী হয় সিবিভিএসআরভিউএভি বা নমুনা।
ডিএক্স 12 এর একটি বৈশিষ্ট্যও রয়েছে যেখানে আপনি সেটগ্রাফিক্স রুটকনস্ট্যান্টবাফারভিউ ব্যবহার করে ফ্লাইতে একটি সিবিভি বাছাই করতে পারেন। তবে এটির এসআরভি সংস্করণ সেটগ্রাফিকস রুটশাদারআরসোর্সভিউ টেক্সচারে কাজ করে না। এটি ডক্সে রয়েছে - তবে আপনি যদি যত্নবান পাঠক না হন তবে এটি নির্ধারণ করতে কয়েক ঘন্টা সময় নিতে পারে।
পাইপলাইন
Vulkan DirectX 12
--------------- ---------------
VkPipelineLayout RootSignature***
VkPipeline ID3D12PipelineState
VkVertexInputAttributeDescription D3D12_INPUT_ELEMENT_DESC
VkVertexInputBindingDescription "
* ** RootSignature - না একটি সঠিক সমতুল্য VkPipelineLayout ।
DX12 ভার্টেক্স অ্যাট্রিবিউট এবং একক বর্ণনায় বাঁধাই একত্রিত করে।
চিত্র এবং বাফার
Vulkan DirectX 12
--------------- ---------------
VkImage ID3D12Resource
VkBuffer ID3D12Resource
uniform buffer constant buffer
index buffer index buffer
vertex buffer vertex buffer
VkSampler sampler
barriers/transitions barriers/transitions
উভয় এপিআই-তে বাধা কিছুটা আলাদা হয়ে যায় তবে এর একইরকম নেট ফলাফল হয়।
রেন্ডারপ্যাসেস / রেন্ডার টার্গেটস
Vulkan DirectX 12
--------------- ---------------
VkRenderPass render pass
VkFramebuffer collection of ID3D12Resource
subpass n/a
n/a render target
ভলকান রেন্ডার পাসগুলির একটি দুর্দান্ত অটো-রেজোলিউশন বৈশিষ্ট্য রয়েছে। ডিএক্স 12 এর এই আফিক নেই। উভয় এপিআই ম্যানুয়াল সমাধানের জন্য ফাংশন সরবরাহ করে।
ভি কেফ্রেমবুফার এবং ডিএক্স 12-এ থাকা কোনও বস্তুর মধ্যে সরাসরি সমতা নেই। আরটিভিতে মানচিত্রের ID3D12 রিসোর্সের একটি সংগ্রহ একটি আলগা মিল।
VkFramebuffer একটি সংযুক্তি পুলের মতো কমবেশি কাজ করে যা ভিকেরেন্ডারপাস একটি সূচক ব্যবহার করে উল্লেখ করে। কোনও ভেকরেন্ডারপাসের মধ্যে থাকা সাবপাসগুলি ভেকেফ্রেমবুফারের যে কোনও সংযুক্তিকে রেফারেন্স দিতে পারে ধরে নিলে একই সংযুক্তিটি সাবপাস প্রতি একাধিকবার রেফারেন্স হয় না। একবারে ব্যবহৃত সর্বাধিক সংখ্যক রঙ সংযুক্তি ভিকেফিজিকাল ডিভাইসলিমিটস ma
ডিএক্স 12 এর রেন্ডার টার্গেটগুলি কেবল আরটিভিগুলি যা কোনও আইডি 3 ডি 12 রিসোর্স অবজেক্ট দ্বারা সমর্থনযুক্ত। একবারে ব্যবহৃত রঙ সংযুক্তির সর্বাধিক সংখ্যা D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT (8) এর মধ্যে সীমাবদ্ধ।
উভয় এপিআই-র আপনাকে পাইপলাইন অবজেক্ট তৈরির সময় রেন্ডার লক্ষ্য / পাস নির্দিষ্ট করতে হবে। যাইহোক, ভলকান আপনাকে সামঞ্জস্যপূর্ণ রেন্ডার পাসগুলি ব্যবহার করতে দেয়, তাই আপনি পাইপলাইন তৈরির সময় নির্দিষ্ট করেছেন এমনগুলিতে লক করা হয়নি। আমি এটি ডিএক্স 12 এ পরীক্ষা করে দেখিনি, তবে আমি অনুমান করব যেহেতু এটি কেবল একটি আরটিভি, এটি ডেক্স 12-এও সত্য।