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)

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 微信公众号开发之实现自定义微信公众号菜单和跳转第三方网页[通俗易懂]

    微信公众号开发之实现自定义微信公众号菜单和跳转第三方网页[通俗易懂]自定义菜单创建接口:http请求方式:POST(请使用https协议)https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN自定义菜单查询接口:http请求方式:GEThttps://api.weixin.qq.com/cgi-bin/menu/get?access_token=ACCES…

    2022年5月23日
    72
  • php rdkafka_php rdkafka

    php rdkafka_php rdkafkaKafka是一种分布式的,基于发布/订阅的消息系统。在使用PHP处理Kafka消息的时候需要使用一个PHP的扩展php-rdkafka下面将介绍一下如何在Linux/MacOS下安装php-rdkafka在使用php-rdkafka之前需要先安装好librdkafkaisaClibraryimplementationoftheApacheK…

    2022年10月14日
    2
  • MPEG4 MP4和AVC H264 MP4有什么不同

    MPEG4 MP4和AVC H264 MP4有什么不同H264  一、H.264与其他标准的比较  1.1在画质上  H.264概述随着市场的需求,在尽可能低的存储情况下获得好的图像质量和低带宽图像快速传输已成为视频压缩的两大难题。为此IEO/IEC/和ITU-T两大国际标准化组织联手制定了新一代视频压缩标准H.264。  MPEG4H.264标准LOGO1.2在编码上  H.264和以前的标准一样,也是DPCM加变换编码

    2022年10月17日
    2
  • 函数依赖关系的例子_部分函数依赖

    函数依赖关系的例子_部分函数依赖这里写自定义目录标题完全函数依赖、部分函数依赖和传递函数依赖举例1.完全依赖:2.部分函数依赖:传递函数依赖:完全函数依赖、部分函数依赖和传递函数依赖举例1.完全依赖:通过{学生学号,选修课程名}可以得到{该生本门选修课程的成绩},而通过单独的{学生学号}或者单独的{选修课程名}都无法得到该成绩,则说明{该生本门选修课程的成绩}完全依赖于{学生学号,选修课程名}2.部分函数依赖:通过{学生学号,课程号}可以得到{该生姓名},而通过单独的{学生学号}已经能够得到{该生姓名},则说明{该生姓

    2025年5月25日
    3
  • 统计xml文件包含的标注信息 parse_dataset_annotation

    统计xml文件包含的标注信息 parse_dataset_annotation

    2020年11月8日
    264
  • 详细介绍如何在ubuntu20.04中安装ROS系统,超快完成安装(最新版教程)

    详细介绍如何在ubuntu20.04中安装ROS系统,超快完成安装(最新版教程)  2020年的10月份,我整理写了一篇名为:详细介绍如何在ubuntu20.04中安装ROS系统,以及安装过程中出现的常见错误的解决方法,填坑!!!的博客,已经经过了很多小伙伴的验证,确实是可行的,该篇博客链接如下:【请点击此处进行跳转】  经过近期的探索,我将安装步骤进行了进一步的优化,使安装变得更加快速,更加简单,我已经验证了其可行性,期待更多的小伙伴们一起来验证  本次安装依旧采用在虚拟机中安装的模式,一年前我用的VMware15.5,现在用的VMware16.1.1,【获取方式(附安装步

    2022年6月15日
    41

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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