Разборка кода шейдера

Есть ли способ получить разборку, создаваемую вашим драйвером при компиляции шейдера? Я заметил, что вы можете получить аварийный сброс, если вы перейдете к максимальному размеру группы потоков, поддерживаемому аппаратным обеспечением в вычислительных шейдерах, поэтому, естественно, я решил, что для всех типов шейдеров должен быть какой-то способ. Есть ли надежный способ получить разборку (возможно, определенную для оборудования NVIDIA /AMD /Intel), используя инструменты или даже просто «взломать», например, вызывать ошибки во время компиляции /компоновки?

5 голосов | спросил TravisG 11 12013vEurope/Moscow11bEurope/MoscowMon, 11 Nov 2013 09:57:52 +0400 2013, 09:57:52

2 ответа


4

По крайней мере на оборудовании NVIDIA представление сборки шейдеров можно запросить с помощью функции glGetProgramBinary () OpenGL (изначально часть расширения gl_arb_get_program_binary), для чего требуется OpenGL 3.0 и выше.

const size_t MAX_SIZE = 1<<24;
char binary[MAX_SIZE];
GLenum format;
GLint length;
glGetProgramBinary(shaderProgramObject,MAX_SIZE,&length,&format,&binary[0]);

Затем вы можете сбросить его, как вы хотите, например (для удобства копирования и вставки этого ответа) в C ++:

std::ofstream binaryfile("bin.txt");
binaryfile.write(binary,length);

Если вы откроете файл в текстовом редакторе, он будет содержать мусор (предположительно фактическое скомпилированное двоичное представление кода сборки), но, по крайней мере, на трех разных наборах аппаратных средств и на двух разных наборах в версиях драйверов я мог бы test, он также будет содержать сборку программы. Технически вывод glGetProgramBinary - это реализация (вашего драйвера), поэтому в будущем или в старых версиях драйверов она может не содержать никакой сборки, но, похоже, она работает до сих пор.

Я не могу проверить, выводит ли аппаратные драйверы AMD также сборку, но это имеет смысл.

ответил TravisG 5 Jpm1000000pmSun, 05 Jan 2014 12:36:14 +040014 2014, 12:36:14
1

Для графических процессоров AMD ознакомьтесь с Radeon GPU Analyzer -

Используя это, вы можете создавать разборку и статистику производительности ISA для DX11, OpenGL и Vulkan shaders, а также для ядер OpenCL.

ответил AmitB 10 22015vEurope/Moscow11bEurope/MoscowTue, 10 Nov 2015 12:16:59 +0300 2015, 12:16:59

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132