ডাইরেক্টএক্স / ওপেনজিএল (ভলকান) ম্যাপিং চার্টের ধারণা


32

প্রায়শই একই জাতীয় হার্ডওয়্যার বৈশিষ্ট্য ডাইরেক্টএক্স এবং ওপেনজিএল এর মাধ্যমে বিভিন্ন পরিভাষা ব্যবহার করে প্রকাশ করা হয়।

উদাহরণস্বরূপ:
কনস্ট্যান্ট বাফার / ইউনিফর্ম বাফার অবজেক্ট
আরডাব্লুবফার / এসএসবিও

আমি একটি বহনকারী চার্ট সন্ধান করছি যা বর্ণনা করে যে কোন ডাইরেক্টএক্স পরিভাষা কোন ওপেনজিএল ধারণাটি ব্যবহার করতে ব্যবহৃত হয় এবং এর বিপরীতে।
কোথায় আমি এই ধরনের একটি উত্স খুঁজে পেতে পারেন?


মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
ট্রাইকোপ্লাক্স

উত্তর:


55

ওয়েবে আমি এই জাতীয় চার্টটি খুঁজে পাইনি, তাই আমি এখানে একটি তৈরি করেছি। (প্রত্যেকে, যে কোনও ভুল যোগ করতে, বিস্তৃত করতে বা সংশোধন করতে দ্বিধা বোধ করবেন। এগুলির কয়েকটি কেবলমাত্র API এবং হার্ডওয়্যার ইন্টার্নালগুলির আংশিক বোঝার উপর ভিত্তি করে সেরা অনুমান))

এপিআই বুনিয়াদি

D3D11                          OpenGL 4.x
-----                          ----------
device                         context
immediate context              (implicit; no specific name)
deferred context               (no cross-vendor equivalent, but see
                                GL_NV_command_list)
swap chain                     (implicit; no specific name)
(no cross-vendor equivalent)   extensions
debug layer; info queue        GL_KHR_debug extension

shaders

D3D11              OpenGL 4.x
-----              ----------
pixel shader       fragment shader
hull shader        tessellation control shader
domain shader      tessellation evaluation shader
(vertex shader, geometry shader, and compute shader
 are called the same in both)

registers          binding points
semantics          interface layouts
SV_Foo semantics   gl_Foo builtin variables

class linkage      subroutines

(no equivalent)    program objects; program linking

(D3D11's normal
 behavior; no      separate shader objects
 specific name)

জ্যামিতি এবং অঙ্কন

D3D11              OpenGL 4.x
-----              ----------
vertex buffer      vertex attribute array buffer; vertex buffer object
index buffer       element array buffer
input layout       vertex array object (sort of)

Draw               glDrawArrays
DrawIndexed        glDrawElements
(instancing and indirect draw are called similarly in both)
(no equivalent)    multi-draw, e.g. glMultiDrawElements​

stream-out         transform feedback
DrawAuto           glDrawTransformFeedback​

predication        conditional rendering
(no equivalent)    sync objects

বাফারস এবং টেক্সচার

D3D11                    OpenGL 4.x
-----                    ----------
constant buffer          uniform buffer object
typed buffer             texture buffer
structured buffer        (no specific name; subset of SSBO features)
UAV buffer; RWBuffer     SSBO (shader storage buffer object)
UAV texture; RWTexture   image load/store

shader resource view     texture view
sampler state            sampler object

interlocked operations   atomic operations
append/consume buffer    SSBO + atomic counter

discard buffer/texture   invalidate buffer/texture
(no equivalent)          persistent mapping
(D3D11's normal
 behavior; no            immutable storage
 specific name)
(implicitly inserted     glMemoryBarrier; glTextureBarrier
 by the API)

লক্ষ্যগুলি রেন্ডার করুন

D3D11                     OpenGL 4.x
-----                     ----------
(no equivalent)           framebuffer object
render target view        framebuffer color attachment
depth-stencil view        framebuffer depth-stencil attachment
multisample resolve       blit multisampled buffer to non-multisampled one

multiple render targets   multiple color attachments
render target array       layered image

(no equivalent)           renderbuffer

ক্যোয়ারী

D3D11                       OpenGL 4.x
-----                       ----------
timestamp query             timer query
timestamp-disjoint query    (no equivalent)
(no equivalent)             time-elapsed query
occlusion query             samples-passed query
occlusion predicate query   any-samples-passed query
pipeline statistics query   (no equivalent in core, but see
                             GL_ARB_pipeline_statistics_query)
SO statistics query         primitives-generated/-written queries 
(no equivalent)             query buffer object

গণনা শেডার

D3D11                     OpenGL 4.x
-----                     ----------
thread                    invocation
thread group              work group
thread group size         local size
threadgroup variable      shared variable

group sync                "plain" barrier
group memory barrier      shared memory barrier
device memory barrier     atomic+buffer+image memory barriers
all memory barrier        group memory barrier

অন্যান্য উৎস


3
কি দারুন. তারা সম্ভবত একই জিনিসগুলির জন্য সবচেয়ে স্বতন্ত্র নামগুলি তৈরি করার জন্য বিশ্বের কঠোরতম মন নিয়োগ করে।
narthex

এই চার্টটি দুর্দান্ত, এটি লেখার জন্য সময় দেওয়ার জন্য ধন্যবাদ!
মুছুন

3
" টেক্সচার অ্যারে - স্তরযুক্ত চিত্র " ওপেনজিএল এগুলি অ্যারে টেক্সচারও বলে; "স্তরযুক্ত চিত্র" শব্দটি এফবিওগুলিতে তাদের সংযুক্তিগুলির আশেপাশে ব্যবহৃত হয়। এছাড়াও, আপনার সম্ভবত ওপেনএল-এর নমুনা বিষয়গুলি এবং তাদের ডি 3 ডি সমতুল্য, নমুনা পরিস্থিতি উল্লেখ করা উচিত।
নিকল বোলাস

2
@ সিপিসিডি 0 হ্যাঁ, তারা এগুলি কথোপকথনে বলা হয়, তবে আমার উদ্দেশ্য এখানে ছিল যে এই জিনিসগুলিকে কী বলা হয় / কীভাবে এপিআই-এজে প্রতিনিধিত্ব করা হয় তা বলতে হবে।
নাথান রিড

1
@ নাথানরিড: এমআরটি ওপেনএল স্পেসিফিকেশনে ব্যবহৃত হয় না, তবে "অবসেশন কোয়েরি" খুব বেশি। "নমুনা পাস" শব্দটি নিছক এক প্রকারের অনুসন্ধানের কোয়েরি; এছাড়াও "কোনও নমুনা উত্তীর্ণ হয়েছে" এবং "রক্ষণশীল কোনও নমুনা পাস হয়েছে"।
নিকল বোলাস

28

এখানে ভ্যালকান এবং ডাইরেক্টএক্স ১২-এর একটি অ-বহনযোগ্য তালিকা রয়েছে যা নাথনের অনুরূপ মানদণ্ড ব্যবহার করে একত্রে আবদ্ধ।

সামগ্রিকভাবে উভয় এপিআই আশ্চর্যজনকভাবে একই রকম। শেডার পর্যায়ের মতো জিনিসগুলি ডিএক্স 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-এও সত্য।


খুব ভাল, এটি দুর্দান্ত কাজ!
11:56 এ মুছুন

আমার মনে হয় এটা ন্যায্য অর্থাৎ হবে VkDescriptorPoolএবং ID3D12DescriptorHeapফাংশনে অনুরূপ (তারা যে কিভাবে আপনি বর্ণনাকারী বরাদ্দ), কিন্তু আকারে পুরোপুরি ভিন্ন সামগ্রিক ভাবে বর্ণনাকারী পার্থক্য API গুলি মধ্যে পরিচালনা করা হয় কারণে। এছাড়াও, আমি কল্পনা করেছিলাম যে D3D12 এর সমতুল্য টাইফ VkBufferViewকরা বাফার যেমন D3D11 এর মতো।
নিকল বোলাস

আপনি ঠিক ডেস্ক্রিপ্টারের স্তূপে রয়েছেন। আপডেট করা হয়েছে। বাফার দর্শনগুলি সম্পর্কে, উভয় এপিআই-এর ভিউ-র ধারণা রয়েছে। আমি বলতে পারলাম না যে DX12 টাইপযুক্ত বাফারগুলির DX1 কনভেনশন থেকে বিরতি পেয়েছে বা না, যেহেতু আমার DX11 এর সাথে খুব বেশি অভিজ্ঞতা নেই।
কোডিংফ্লোভ

আপনি কি বলতে পারবেন যে ডি 3 ডি 12 রেন্ডার টার্গেটগুলি ভিকেফ্রেমবুফারের সমতুল্য?
জর্জি রড্রিগেজ

2
এই বিষয়টি দ্বারা অনুপ্রাণিত হয়ে, আমি ভলকান এবং ডিএক্স 12 উভয় রেন্ডারারের একক শিরোলে প্রয়োগ করেছি: রেন্ডারার্স: github.com/chaoticbob/tinyrenderers
কোডিংফ্লোভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.