В настоящее время я занимаюсь рефакторингом большого куска старого кода и, наконец, нырнул в раздел HLSL
, где мои знания минимальны из-за отсутствия практики.Я встречал некоторую документацию онлайн, в которой указывается, какие регистры должны использоваться для каких целей:
- t - для представлений ресурсов шейдеров (SRV)
- s - для сэмплеров
- u - для неупорядоченных представлений доступа (UAV)
- b - для постоянных представлений буфера (CBV)
Thisчасть довольно очевидна.Если я хочу создать постоянный буфер, я могу просто объявить как:
cbuffer LightBuffer: register(b0) { };
cbuffer CameraBuffer: register(b1) { };
cbuffer MaterialBuffer: register(b2) { };
cbuffer ViewBuffer: register(b3) { };
Однако, происходя из мира MIPS Assembly
, я не могу не задаться вопросом, существуют ли конечные и ограниченные диапазоны на этих,Например, временные регистры ограничены диапазоном t0 - t7
в MIPS Assembly
.В случае HLSL
я не смог найти никакой документации, связанной с этой темой, поскольку все, кажется, указывает на языки ассемблера и микропроцессоры (такие как 8051, если вы хотите, чтобы случайная тема читалась).
Есть ли заданный диапазон для четырех типов регистров в HLSL или я просто продолжаю столько, сколько необходимо, последовательно и позволяю базовой сборке обрабатывать грязные детали?
Примечание
Я частично ответил на этот вопрос, так как не могу найти диапазон для u
в настоящее время;однако, если у кого-то есть лучший, более подробный ответ, чем тот, который я дал во время тестирования, не стесняйтесь опубликовать его, и я отмечу это как правильный ответ.Я оставлю этот вопрос открытым до 1 декабря 2018 , чтобы дать другим возможность дать лучший ответ для будущих читателей.