HLSL 与 GLSL 之间的映射关系参考[通俗易懂]

HLSL 与 GLSL 之间的映射关系参考[通俗易懂]系统参数与內建的输入参数Direct3D有很多系统参数,而相应的,GLSL也有內建的输入参数的概念。他们的对应关系如下:HLSLGLSLSV_ClipDistancegl_ClipDistanceSV_CullDistance当存在ARB_cull_distance情况下gl_CullDistanceSV_Coveragegl_SampleMaskIn&gl_SampleMaskSV_Depth

大家好,又见面了,我是你们的朋友全栈君。

系统参数与內建的输入参数

Direct3D有很多系统参数,而相应的,GLSL也有內建的输入参数的概念。他们的对应关系如下:

HLSL

GLSL

SV_ClipDistance

gl_ClipDistance

SV_CullDistance

当存在ARB_cull_distance情况下gl_CullDistance

SV_Coverage

gl_SampleMaskIn & gl_SampleMask

SV_Depth

gl_FragDepth

SV_DepthGreaterEqual

layout (depth_greater) out float gl_FragDepth;

SV_DepthLessEqual

layout (depth_less) out float gl_FragDepth;

SV_DispatchThreadID

gl_GlobalInvocationID

SV_DomainLocation

gl_TessCord

SV_GroupID

gl_WorkGroupID

SV_GroupIndex

N/A

SV_GroupThreadID

gl_LocalInvocationID

SV_GSInstanceID

gl_InvocationID

SV_InsideTessFactor

gl_TessLevelInner

SV_InstanceID

gl_InstanceID & gl_InstanceIndex (后面的 Vulkan 会有不同的语义)

SV_IsFrontFace

gl_FrontFacing

SV_OutputControlPointID

gl_InvocationID

N / A

gl_PatchVerticesIn

SV_Position

在顶点着色器中gl_Position

在片元着色器中gl_FragCoord

SV_PrimitiveID

gl_PrimitiveID

SV_RenderTargetArrayIndex

gl_Layer

SV_SampleIndex

gl_SampleID

通过EvaluateAttributeAtSample可以达到等价

gl_SamplePosition

SV_StencilRef

当存在ARB_cull_distance情况下gl_FragStencilRef

SV_Target

layout(location=N) out your_var_name

SV_TessFactor

gl_TessLevelOuter

SV_VertexID

gl_VertexID & gl_VertexIndex (后面的Vulkan会有不同的语义)

SV_ViewportArrayIndex

gl_ViewportIndex

此表来源于OpenGL维基百科,HLSL语义文档以及GL_KHR_vulkan_glsl扩展规范。

原子操作

原子操作的对应关系非常简单。将Interlocked换成atomic。因此InterlockedAdd则替换成atomicAdd,以此类推。唯一的区别就是InterlockedCompareExchange要换成atomicCompSwap。

共享/本地内存

HLSL中的groupshared 内存就是GLSL中的shared 内存。仅此而已。

内存屏障

HLSL

GLSL

GroupMemoryBarrierWithGroupSync

groupMemoryBarrier

和 barrier

GroupMemoryBarrier

groupMemoryBarrier

DeviceMemoryBarrierWithGroupSync

memoryBarrier, memoryBarrierImage, memoryBarrierImage和barrier

AllMemoryBarrierWithGroupSync

上面所有的内存栅栏 和 barrier

AllMemoryBarrier

上面所有的内存栅栏

N/A

memoryBarrierShared

纹理访问

在没有Vulkan之前,贴图是整体绑定的,不可能部分访问。幸运的是, Vulkan使用和HLSL类似的语义,使得这部分可以有所不同。这个主要区别在于,HLSL中访问方法是“纹理对象”的一部分,而在GLSL,他们使用的是自由函数。在HLSL中,您要用一个Sampler采样器去采样一张Texture纹理贴图如下:

Texture.Sample (Sampler, coordinate)

在GLSL中,你需要指定纹理的类型和采样器的类型,除此之外,基本是一样的:

texture (sampler2D(Texture, Sampler), coordinate)

HLSL

GLSL

CalculateLevelOfDetail & CalculateLevelOfDetailUnclamped

textureQueryLod

Load

texelFetch 和 texelFetchOffset

GetDimensions

textureSize, textureQueryLevels 和textureSamples

Gather

textureGather, textureGatherOffset, textureGatherOffsets

Sample, SampleBias

texture, textureOffset

SampleCmp

samplerShadow

SampleGrad

textureGrad, textureGradOffset

SampleLevel

textureLod, textureLodOffset

N/A

textureProj

基本数学函数

GLSL和HLSL对默认矩阵阐释有所不同。GLSL使用列优先右乘矩阵(也就是,你用的是 M * v),HLSL使用行优先左乘矩阵(v * M)然而你通常可以忽略这些-你可以重载这个命令,使之可以在左右两边都能进行乘法 –这将会改变矩阵m中m[0]的含义。在HLSL中,将返回第一行,而在GLSL中,则会返回第一列。,当你用“本来的”的命令初始化成员的时候,这同样也适用于构造函数。

各种函数

HLSL

GLSL

atan2(y,x)

atan 使用参数交换

ddx

dFdx

ddx_coarse

dFdxCoarse

ddx_fine

dFdxFine

ddy

dFdy

ddy_coarse

dFdyCoarse

ddy_fine

dFdyFine

EvaluateAttributeAtCentroid

interpolateAtCentroid

EvaluateAttributeAtSample

interpolateAtSample

EvaluateAttributeSnapped

interpolateAtOffset

frac

fract

lerp

mix

mad

fma

saturate

clamp(x, 0.0, 1.0)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/159800.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 二叉树的详解与实现「建议收藏」

    二叉树的详解与实现「建议收藏」简介二叉树的相关概念,如,树高度,节点层数,节点度数,路径,叶节点,分支节点,根节点,父节点,左节点,右节点,兄弟节点,祖先节点,子孙节点,左子树,右子树等基本概念,不再赘述。二叉树分类1、完全二叉树若设二叉树的高度为h,除第h层外,其它各层(1~h-1)的结点数都达到最大个数,第h层有叶子结点,并且叶子结点都是从左到右依次排布,这就是完全二叉树。一维数组可以作为完全二叉树…

  • 易经六十四卦详解白话文解释——易经64卦全解(下)「建议收藏」

    易经六十四卦详解白话文解释——易经64卦全解(下)「建议收藏」文章目录第33卦 天山遁(遁卦) 遁世救世 下下卦第34卦 雷天大壮(大壮卦) 壮勿妄动 中上卦第35卦 火地晋(晋卦) 求进发展 中上卦第36卦 地火明夷(明夷卦) 晦而转明 中下卦第37卦 风火家人(家人卦) 诚威治业 下下卦第38卦 火泽睽(睽卦) 异中求同 下下卦第39卦 水山蹇(蹇卦) 险阻在前 下下卦第40卦 雷水解(解卦) 柔道致治 中上卦第41卦 山泽损(损卦) 损益制衡 下下卦第…

  • 2014年国人开发的最热门的开源软件TOP 100

    2014年国人开发的最热门的开源软件TOP 100

  • eclipse svn上传代码_svn统计每个人代码提交行数

    eclipse svn上传代码_svn统计每个人代码提交行数1.先去将本地的代码更新到最新,如果更新内容较少,可以点击资源同步,具体可以看一下博主:svn创建svn图文2.更新成最新的代码之后,点击创建补丁,点击第二个file文本框,选择一个文件夹存下一个文件。3.打开申请上线权限,。点击puth,填写./4.申请通过之后,复制review+版本号5.将复制的版本号放到comment下6.点击ok。…

    2022年10月15日
  • CWnd::AssertValid()函数执行出错—MFC多线程

    CWnd::AssertValid()函数执行出错—MFC多线程1.问题在修改单线程MFC程序为多线程时,遇到了CWnd::AssertValid()函数执行出错问题。主要表现是在执行下面代码中绿色语句时出错点击(此处)折叠或打开#ifdef_DEBUGvoidCWnd::AssertValid()const{if(m_hWnd==NULL)return;//null(unattache…

  • 启用shift后门的方法_shift按五次怎么取消

    启用shift后门的方法_shift按五次怎么取消一、什么是shift后门?shift后门是黑客希望以后方便进入服务器而在没有密码的情况下为进入服务器系统而设置的一个后门。其操作就是在不知道管理员密码的情况下,连续按5次shift键来启动粘滞键,已进入服务器的系统程序管理器。二、shift后门的制作?其制作有很多种,下面介绍一种常用的,可以明白其原理自己扩展:在cmd窗口,敲打命令如下:copyc:\windows\ex

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号