【GPU驱动开发】-Mesa ST和GLSL编译器衔接源码分析

2024-01-26 06:44

本文主要是介绍【GPU驱动开发】-Mesa ST和GLSL编译器衔接源码分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

不必害怕未知,无需恐惧犯错,做一个Creator!

(基于Mesa 22.2.5版本)

st_glsl_to_nir.c 主要实现了 GLSL 到 NIR 的转换功能,包括 GLSL 程序的链接、NIR 的最终化、优化以及统一变量的处理。以下是该文件主要实现的功能以及功能之间的实现流程:

链接 GLSL 到 NIR:
st_link_shader 函数是 GLSL 程序链接到 NIR 的入口函数。
根据着色器类型(GLSL 或 SPIR-V)调用相应的链接函数,如 gl_nir_link_glsl 或 gl_nir_link_spirv。
在链接过程中,执行了一系列的操作,包括清除着色器程序数据、创建着色器程序数据、判断着色器类型、链接着色器等。

GLSL 到 NIR 转换后的处理:
st_glsl_to_nir_post_opts 函数执行 GLSL 到 NIR 转换的链接后任务。
为使用的内建统一变量添加状态引用。

NIR 最终化和优化:
st_finalize_nir_before_variants 函数在生成变体之前最终化 NIR。
执行一系列 NIR 优化和变换,如分裂变量拷贝、降级纹理采样器、降级原子操作等。
设置受影响的状态标志(affected state flags)。

NIR 统一变量处理:
st_nir_lower_uniforms 函数用于降级 NIR 中的统一变量,根据配置使用压缩或非压缩方式。
如果启用了 lower_uniforms_to_ubo,还会将一些统一变量降级为 UBO。
最终将状态参数优化为 UBO。

统一变量的位置分配:
st_nir_lookup_parameter_index 函数根据变量在程序参数列表中的位置查找参数的索引。
st_nir_assign_uniform_locations 函数为 NIR 着色器中的统一变量分配驱动程序位置。
处理不同情况,包括无绑定和状态槽。

顶点着色器输入位置分配:
st_nir_assign_vs_in_locations 函数专门处理为顶点着色器输入分配输入位置的任务。
紧缩输入位置,删除未使用的输入,并相应调整位置。

变量位置的分配:
st_nir_assign_varying_locations 函数负责为着色器中的输入和输出变量分配位置。
对于顶点着色器,分配输出位置,并通过 st_nir_fixup_varying_slots 修正变量槽位。
对于几何着色器、Tessellation 控制着色器和 Tessellation 评估着色器,分配输入和输出位置,并修正变量槽位。
对于片段着色器,分配输入和输出位置。

NIR 向量化和坐标系变换:
st_nir_vectorize_io 函数向量化输入输出变量,特别对 Tessellation 控制着色器的 Tessellation 等级进行向量化。
st_nir_lower_wpos_ytransform 函数处理片段着色器的窗口坐标系转换。

NIR 缓存加载和存储:
st_load_nir_from_disk_cache 函数从磁盘缓存加载 NIR,以避免重新生成。
st_store_nir_in_disk_cache 函数将 NIR 存储到磁盘缓存中,以便将来重用。

释放 NIR 变体:
st_release_variants 函数释放着色器程序的变体。
在释放之前,将 NIR 存储到磁盘缓存中。

最终化着色器程序:
st_finalize_program 函数最终化着色器程序。
包括对 NIR 进行一系列最终化操作,如变量位置分配、采样器降级、统一变量降级等。
这些功能在 st_glsl_to_nir.c 文件中共同协作,完成了 GLSL 到 NIR 的转换和最终化过程,确保生成的 NIR 表示符合 Mesa 图形驱动的要求。

这篇关于【GPU驱动开发】-Mesa ST和GLSL编译器衔接源码分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/645950

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta