基于对照表的HLSL着色器源码转换为GLSL着色器源码的方法技术

技术编号:35898925 阅读:51 留言:0更新日期:2022-12-10 10:34
本发明专利技术公开了一种基于对照表的HLSL着色器源码转换为GLSL着色器源码的方法,包括步骤1,获取已有HLSL着色器源码和转换后的GLSL着色器源码,生成对照表;步骤2,基于所述对照表,将HLSL着色器源码转换为GLSL着色器源码。本发明专利技术在国产平台下基于对照表自动实现HLSL中顶点和像素着色器源码转GLSL中顶点和片段着色器源码,根据建立的HLSL语言顶点和像素着色器与GLSL语言顶点和片段着色器关键字对照表,通过扫描HLSL语言源码,将找到的HLSL关键字转化为GLSL关键字,并补齐GLSL下着色器所具有的语法结构,从而实现顶点和像素着色器算法和处理函数自动翻译为顶点和片段着色器的功能。函数自动翻译为顶点和片段着色器的功能。函数自动翻译为顶点和片段着色器的功能。

【技术实现步骤摘要】
基于对照表的HLSL着色器源码转换为GLSL着色器源码的方法


[0001]本专利技术属于计算机软件开发
,具体涉及一种基于对照表的HLSL着色器源码转换为GLSL着色器源码的方法。

技术介绍

[0002]HLSL(High Level Shading Language,高阶着色器语言)的顶点和像素着色器可通过交叉编译器转化为GLSL(Open Graphics Library Shading Language,开放图形库着色器语言),在国产软硬件平台下最新的DirectX程序无法直接运行需要转化成OpenGL程序,面对新近生成的越来越复杂的HLSL源码交叉编译器转化经常失败,所以需要简单通用的工具实现HLSL语言顶点和像素着色器向GLSL语言顶点和片段着色器的转换。通过改造交叉编译器的方式难以在多种架构的国产CPU和操作系统上实现。

技术实现思路

[0003]专利技术目的:本专利技术所要解决的技术问题是针对现有技术的不足,提供一种基于对照表的HLSL着色器源码转换为GLSL着色器源码的方法。
[0004]为了解决上述技术问题,本专利技术公开了一种基于对照表的HLSL着色器源码转换为GLSL着色器源码的方法,包括以下步骤:
[0005]步骤1,获取已有HLSL着色器源码和转换后的GLSL着色器源码,生成对照表;
[0006]步骤2,基于所述对照表,将HLSL着色器源码转换为GLSL着色器源码。
[0007]进一步地,步骤1中HLSL着色器源码包括Windows平台下DirectX的HLSL顶点和像素着色器源码,GLSL着色器源码包括GLSL顶点和片元着色器源码,步骤1包括:
[0008]步骤1.1,通过交叉编译方式或人工转化方式获取已有HLSL顶点和像素着色器源码和转换后的GLSL顶点和片元着色器源码,形成数据集,将所述数据集划分为训练数据和检验数据;
[0009]步骤1.2,对训练数据中的HLSL顶点和像素着色器源码,通过HLSL编译器将包括变量、数据类型、数据、注释、运算符和函数在内的基本项进行分离,生成对照表HLSL端;
[0010]步骤1.3,对训练数据中的GLSL顶点和片元着色器源码,通过GLSL编译器将包括变量、数据类型、数据、注释、运算符和函数在内的基本项进行分离,生成对照表GLSL端;
[0011]步骤1.4,将对照表HLSL端和对照表GLSL端进行对齐,若对照表中不存在对齐内容,则在对照表中写入HLSL和GLSL对齐项;
[0012]步骤1.5,重复步骤1.2至步骤1.4,遍历训练数据中的HLSL顶点和像素着色器源码和对应转换后的GLSL顶点和片元着色器源码,获得写入HLSL和GLSL对齐项的对照表;
[0013]步骤1.6,使用步骤1.5获得的对照表,将检验数据中的HLSL顶点和像素着色器源码转化为GLSL顶点和片元着色器源码,并与检验数据中的GLSL顶点和片元着色器源码进行比较,若仅存在命名差异,对照表满足要求,否则继续执行步骤1.1。
[0014]进一步地,步骤1.2中的HLSL编译器和步骤1.3中的GLSL编译器均包括扫描器、词
法分析器、语法分析器和语义分析器,所述扫描器,用于对着色器源码进行扫描,获得字符流;所述词法分析器,用于对所述字符流通过有限自动机解析并识别词法记号;所述语法分析器,用于将词法记号采用自顶向下的分析,递归下降构建抽象语法树;所述语义分析器,用于检查所述语法树中变量和函数使用前是否定义,赋值时类型是否兼容,确保语法树的正确性,从而生成对照表HLSL端和对照表GLSL端。
[0015]进一步地,步骤1.4中将对照表HLSL端和对照表GLSL端进行对齐包括按照注释、变量、数据类型、运算符和函数的对齐,
[0016]其中,注释直接引用,不需要写入对照表中;变量包括自定义变量和内部变量,自定义变量直接引用,不需要写入对照表;内部变量包括HLSL和GLSL相同的内部变量和不相同的内部变量,均写入对照表;数据类型包括HLSL和GLSL相同的数据类型和不相同的数据类型,均写入对照表;运算符包括HLSL和GLSL相同的运算符和不相同的运算符,均写入对照表;函数包括HLSL和GLSL相同的函数、不相同的函数、需要重新实现的函数和调用,相同和不相同的函数写入对照表,需要重新实现的函数按照GLSL顶点和片段着色器的语言规则重新实现,调用按照GLSL顶点和片段着色器的语言重新封装,将实现前后的函数和封装前后的调用写入对照表。
[0017]进一步地,步骤1.4中将对照表HLSL端和对照表GLSL端进行对齐还包括自定义类型的对齐,自定义类型包括无法归入注释、变量、数据类型、运算符和函数的项,自定义类型的对齐按照GLSL顶点和片段着色器的语言规则重新实现,将实现前后的项扩充保存至对照表中。
[0018]进一步地,步骤2包括:
[0019]步骤2.1,对待转换的HLSL顶点和像素着色器源码,通过所述HLSL编译器将包括变量、数据类型、数据、注释、运算符和函数在内的基本项进行分离,生成第一语法树;
[0020]步骤2.2,基于对照表,将所述第一语法树中的各项转换为GLSL顶点和片元着色器中对应的项;
[0021]步骤2.3,按照GLSL顶点和片段着色器的语言格式,补齐缺失的语言结构,将转换后的各项通过主函数封装起来,再添加GLSL版本信息,形成完整的顶点和片段着色器源码。由此将Windows平台下DirectX的HLSL顶点和像素着色器转化为OpenGL的GLSL顶点和片段着色器,可以供国产平台下调用。
[0022]现有技术中基于交叉编译器进行转换时,编译器内定义有转化规则,如果编译器在国产平台海光处理器为x86架构、飞腾处理器为ARM架构、龙芯最新处理器为LoongArch架构、申威处理器为alpha架构下不能运行则无法实现转化,而本申请所述的方法将转化程序和转化规则分离,步骤2的转化程序可以针对不同架构去重构,而步骤1的转化规则(生成对照表)可以实现复用。
[0023]进一步地,步骤2.2包括:
[0024]步骤2.2.1,注释内容不做变动,直接在GLSL顶点和片段着色器源码中使用;
[0025]步骤2.2.2,针对变量,自定义变量名不做变化直接在GLSL顶点和片段着色器中使用,内部变量根据对照表替换;
[0026]步骤2.2.3,针对数据类型,根据对照表,保留相同的数据类型,不同的数据类型则按照对应关系替换;
[0027]步骤2.2.4,针对运算符,根据对照表,保留相同的运算符,不同的运算符则按照对应关系替换;
[0028]步骤2.2.5,针对函数,根据对照表,保留相同的函数,名称不同功能相同的函数按照对应关系替换,对于在对照表中存在的已经重新实现的函数和封装的调用按照对应关系替换,没有参考性的函数和调用则按照GLSL顶点和片段着色器的语言规则重新实现和封装。
[0029]进一步地,步骤2.2还包括:
本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于对照表的HLSL着色器源码转换为GLSL着色器源码的方法,其特征在于,包括以下步骤:步骤1,获取已有HLSL着色器源码和转换后的GLSL着色器源码,生成对照表;步骤2,基于所述对照表,将HLSL着色器源码转换为GLSL着色器源码。2.根据权利要求1所述的一种基于对照表的HLSL着色器源码转换为GLSL着色器源码的方法,其特征在于,步骤1中HLSL着色器源码包括HLSL顶点和像素着色器源码,GLSL着色器源码包括GLSL顶点和片元着色器源码,步骤1包括:步骤1.1,通过交叉编译方式或人工转化方式获取已有HLSL顶点和像素着色器源码和转换后的GLSL顶点和片元着色器源码,形成数据集,将所述数据集划分为训练数据和检验数据;步骤1.2,对训练数据中的HLSL顶点和像素着色器源码,通过HLSL编译器将包括变量、数据类型、数据、注释、运算符和函数在内的基本项进行分离,生成对照表HLSL端;步骤1.3,对训练数据中的GLSL顶点和片元着色器源码,通过GLSL编译器将包括变量、数据类型、数据、注释、运算符和函数在内的基本项进行分离,生成对照表GLSL端;步骤1.4,将对照表HLSL端和对照表GLSL端进行对齐,若对照表中不存在对齐内容,则在对照表中写入HLSL和GLSL对齐项;步骤1.5,重复步骤1.2至步骤1.4,遍历训练数据中的HLSL顶点和像素着色器源码和对应转换后的GLSL顶点和片元着色器源码,获得写入HLSL和GLSL对齐项的对照表;步骤1.6,使用步骤1.5获得的对照表,将检验数据中的HLSL顶点和像素着色器源码转化为GLSL顶点和片元着色器源码,并与检验数据中的GLSL顶点和片元着色器源码进行比较,若仅存在命名差异,对照表满足要求,否则继续执行步骤1.1。3.根据权利要求2所述的一种基于对照表的HLSL着色器源码转换为GLSL着色器源码的方法,其特征在于,步骤1.2中的HLSL编译器和步骤1.3中的GLSL编译器均包括扫描器、词法分析器、语法分析器和语义分析器,所述扫描器,用于对着色器源码进行扫描,获得字符流所述词法分析器,用于对所述字符流通过有限自动机解析并识别词法记号;所述语法分析器,用于将词法记号采用自顶向下的分析,递归下降构建抽象语法树;所述语义分析器,用于检查所述语法树中变量和函数使用前是否定义,赋值时类型是否兼容,确保语法树的正确性,从而生成对照表HLSL端和对照表GLSL端。4.根据权利要求3所述的一种基于对照表的HLSL着色器源码转换为GLSL着色器源码的方法,其特征在于,步骤1.4中将对照表HLSL端和对照表GLSL端进行对齐包括按照注释、变量、数据类型、运算符和函数的对齐,其中,注释直接引用,不需要写入对照表中;变量包括自定义变量和内部变量,自定义变量直接引用,不需要写入对照表;内部变量包括HLSL和GLSL相同的内部变量和不相同的内部变量,均写入对照表;数据类型包括HLSL和GLSL相同的数据类型和不相同的数据类型,均写入对照表;运算符包括HLSL和GLSL相同的运算符和不相同的运算符,均写入对照表;函数包括HLSL和GLSL相同的函数、不相同的函数、需要重...

【专利技术属性】
技术研发人员:蒉露超陈巍然张一鸣占伟伟何建清刘青峰
申请(专利权)人:中国电子科技集团公司第二十八研究所
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1