Porting-from-OpenGL.md

May 11, 2019 ยท View on GitHub

Copy from host to device memory

OpenGLFrameGraph
glBufferData, glBufferSubDataUpdateBuffer task
glTexImage*, glTexSubImage*, glCompressedTexImage*. glCompressedTexSubImage*UpdateImage task

Copy to host visible buffer

OpenGLFrameGraph
glMapBuffer, glMapBufferRangeFrameGraph::UpdateHostBuffer or FrameGraph::MapBufferRange

Copy from device to host memory

OpenGLFrameGraph
glGetBufferSubDataReadBuffer task
glGetTextureSubImageReadImage task
glGetCompressedTextureSubImageReadImage task

Copy from buffer/image to image/buffer, clear buffer/image

OpenGLFrameGraph
glCopyBufferSubDataCopyBuffer task
glCopyImageSubDataCopyImage task
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, ...) + glTexSubImage*CopyBufferToImage task
glBindBuffer(GL_PIXEL_PACK_BUFFER, ...) + glGetTextureSubImageCopyImageToBuffer task
glClearBufferDataFillBuffer task
glClearTexImage, glClearTexSubImageClearColorImage or ClearDepthStencilImage tasks
glBlitFramebufferBlitImage or ResolveImage tasks

Framebuffer and renderbuffer

OpenGLFrameGraph
glCreateFramebuffers, glCreateRenderbuffersFrameGraph::CreateRenderPass
glFramebufferTexture*RenderPassDesc::AddTarget
glClear, glClearColor, glClearDepth, glClearBuffer*, glClearNamedFramebuffer*clearValue parameter in RenderPassDesc::AddTarget
glInvalidateFramebufferstoreOp parameter with EAttachmentStoreOp::Invalidate in RenderPassDesc::AddTarget

Render states

OpenGLFrameGraph
color
glBlendColorRenderPassDesc::SetBlendColor
glBlendEquation*, glBlendEquationSeparate*RenderPassDesc::AddColorBuffer or DrawTask::AddColorBuffer
glBlendFunc*, glBlendFuncSeparate*RenderPassDesc::AddColorBuffer or DrawTask::AddColorBuffer
glColorMaskRenderPassDesc::AddColorBuffer or DrawTask::AddColorBuffer
glLogicOpRenderPassDesc::SetLogicOp
depth
glEnable(GL_DEPTH_TEST)RenderPassDesc::SetDepthTestEnabled or DrawTask::SetDepthTestEnabled
glDepthMaskRenderPassDesc::SetDepthWriteEnabled or DrawTask::SetDepthWriteEnabled
glDepthFuncRenderPassDesc::SetDepthCompareOp or DrawTask::SetDepthCompareOp
stencil
glEnable(GL_STENCIL_TEST)RenderPassDesc::SetStencilTestEnabled or DrawTask::SetStencilTestEnabled
glStencilOp, glStencilOpSeparateRenderPassDesc::SetStencilFrontFaceFailOp, SetStencilFrontFaceDepthFailOp, SetStencilFrontFacePassOp, SetStencilBackFaceFailOp, SetStencilBackFaceDepthFailOp, SetStencilBackFacePassOp
glStencilOpDrawTask::SetStencilFailOp, SetStencilDepthFailOp, SetStencilPassOp
glStencilFunc, glStencilFuncSeparateRenderPassDesc::SetStencilFrontFaceCompareOp, SetStencilFrontFaceReference, SetStencilFrontFaceCompareMask
glStencilFuncDrawTask::SetStencilRef, SetStencilCompareMask
glStencilMask, glStencilMaskSeparateRenderPassDesc::SetStencilFrontFaceWriteMask, SetStencilBackFaceWriteMask
glStencilMaskDrawTask::SetStencilWriteMask
rasterizer
glEnable(GL_DEPTH_CLAMP)RenderPassDesc::SetDepthClampEnabled
glPolygonOffsetRenderPassDesc::SetDepthBias or SetDepthBiasConstFactor, SetDepthBiasClamp, SetDepthBiasSlopeFactor
glPolygonModeRenderPassDesc::SetPolygonMode
glLineWidthRenderPassDesc::SetLineWidth
glEnable(GL_RASTERIZER_DISCARD)RenderPassDesc::SetRasterizerDiscard or DrawTask::SetRasterizerDiscard
glCullFaceRenderPassDesc::SetCullMode or DrawTask::SetCullMode
glFrontFaceRenderPassDesc::SetFrontFaceCCW or DrawTask::SetFrontFaceCCW
multisample
glEnable(GL_SAMPLE_ALPHA_TO_COVERAGE)RenderPassDesc::SetAlphaToCoverageEnabled
glEnable(GL_SAMPLE_ALPHA_TO_ONE)RenderPassDesc::SetAlphaToOneEnabled
glEnable(GL_SAMPLE_SHADING)RenderPassDesc::SetSampleShadingEnabled
glSampleMaskiRenderPassDesc::SetSampleMask, second parameter in SetMultiSamples
glMinSampleShadingRenderPassDesc::SetMinSampleShading
viewport & scissor
glViewport*, glDepthRange*RenderPassDesc::AddViewport
glScissor*DrawTask::AddScissor

DrawTask - may be any of DrawVertices, DrawIndexed, DrawVerticesIndirect, DrawIndexedIndirect, DrawMeshes, DrawMeshesIndirect.

Drawing

OpenGLFrameGraph
glDrawArrays, glDrawArraysInstanced, glDrawArraysInstancedBaseInstanceDrawVertices task
glDrawElements, glDrawElementsInstanced, glDrawElementsBaseVertexDrawIndexed task
glDrawElementsInstancedBaseInstance, glDrawElementsInstancedBaseVertexDrawIndexed task
glDrawElementsInstancedBaseVertexBaseInstanceDrawIndexed task
glDrawRangeElements, glDrawRangeElementsBaseVertexDrawIndexed task
glDrawArraysIndirectDrawVerticesInstanced task
glDrawElementsIndirectDrawIndexedInstanced task
glMultiDrawArraysDrawVertices task
glMultiDrawArraysIndirect, glMultiDrawElementsIndirectnone
glMultiDrawElements, glMultiDrawElementsBaseVertexDrawIndexed task

Computing

OpenGLFrameGraph
glDispatchComputeDispatchCompute task
glDispatchComputeIndirectDispatchComputeIndirect task

Uniforms

OpenGLFrameGraph
glUniform*not supported, use DrawTask::AddPushConstant instead
glUniformBlockBindingnot supported
glBindBufferBase, glBindBufferRangePipelineResources::BindBuffer
glBindTextureUnitPipelineResources::BindTexture
glBindImageTexturePipelineResources::BindImage
glBindSamplerPipelineResources::BindSampler, BindTexture

use DrawTask::AddResources, RenderPassDesc::AddResources or ComputeTask::AddResources for applying uniforms to draw/compute command.

Vertex & index buffers, vertex attributes

OpenGLFrameGraph
glBindVertexArrayDrawTask::SetVertexInput
glBindVertexBufferDrawTask::AddBuffer
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ...)DrawTask::SetIndexBuffer

DrawTask - may be any of DrawVertices, DrawIndexed, DrawVerticesIndirect, DrawIndexedIndirect.

Synchronizations

OpenGLFrameGraph
glFenceSync + glClientWaitSyncFrameGraph::Wait for command buffers
glFenceSync + glWaitSyncadd dependency between command buffers by specializing dependsOn parameter in FrameGraph::Begin or by calling CommandBuffer::AddDependency
glTextureBarrierplaced automaticaly
glFlushFrameGraph::Flush
glFinishFrameGraph::WaitIdle