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)


相关推荐

  • 华三路由交换配置命令_H3C路由器常用基本配置命令「建议收藏」

    华三路由交换配置命令_H3C路由器常用基本配置命令「建议收藏」H3C路由器常用基本配置命令[Quidway]sysnamerouter_name命名路由器(或交换机)[Quidway]delete删除FlashROM中的配置[Quidway]save将配置写入FlashROM[Quidway]interfaceserial0进入接口配置模式[Quidway]quit退出接口模式到系统视图[Quidway]shutdown/undoshutdown…

    2022年10月17日
  • C++实现矩阵类(附代码和功能)

    C++实现矩阵类(附代码和功能)本文由两部分组成,第一部分介绍一个在win10系统上运行的exe程序,第二部分介绍通过C++实现矩阵运算的方法(功能会更强大,但不如exe文件操作方便)。用户界面如下,能够实现矩阵的加、减、乘、除运算,以及矩阵的转置,求逆,求行列式的值等。读者可以在下载该程序,直接在自己的电脑上运行。下载地址:https://download.csdn.net/do…

  • LSTM 时间序列预测 matlab

    由于参加了一个小的课题,是关于时间序列预测的。平时习惯用matlab,网上这种资源就比较少。借鉴了 http://blog.csdn.net/u010540396/article/details/52797489 的内容,稍微修改了一下程序。程序说明:DATA.mat是一行时序值,numdely是用前numdely个点预测当前点,cell_num是隐含层的数目,cos

  • DVWA file inclusion 出错 allow_url_fopen=0

    DVWA file inclusion 出错 allow_url_fopen=0在DVWA平台中测试文件包含是出现错误信息include():http://wrapperisdisabledintheserverconfigurationbyallow_url_fopen=0,原因是设置allow_url_open与allow_url_include位置不对,在C:\xampp\htdocs\DVWA\php.ini文件中都设置为on并不会起作用,需要…

  • platform driver注册过程

    platform driver注册过程platform总线上的驱动注册一般使用module_platform_driver宏,如goldfish设备的注册module_platform_driver(goldfish_pipe);这个宏定义在/goldfish/include/linux/platform_device.h文件/*module_platform_driver()-Helpermacrofordriv…

  • 树莓派win11镜像_树莓派安装镜像

    树莓派win11镜像_树莓派安装镜像2017-09-0410:40:47下载Hassbian镜像文件,浏览https://github.com/home-assistant/pi-gen/releases/tag/v1.23,查看最

发表回复

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

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