Войти
ПрограммированиеФорумГрафика

Хочу прояснить момент как делать DX 12 Bindless textures.

#0
(Правка: 10:28) 10:13, 10 окт. 2019

Общий descriptorheap на 10 текстур.
Я сейчас загружаю текстуру и для каждой делаю:
1) CreateCommittedResource и CreateShaderResourceView

Знаю как одну текстуру в рендере на root повесить
commandList->SetGraphicsRootDescriptorTable(RootParameterIndex::TextureSRVBase, texture1);


Мне не ясно как эти все 10 текстур присоединить за 1 раз к root.

Знаю что можно сделать CD3DX12_DESCRIPTOR_RANGE textureRange(D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 10, 0);

Только не совсем пойму как 10 текстур присоединяются к root в рендере.

PS: Смотрю Франк делает cmdList->SetGraphicsRootConstantBufferView(3,
matCBAddress);

Типа в констант буфер положил все GPU_textur адреса.


#1
10:41, 10 окт. 2019

https://github.com/microsoft/DirectX-Graphics-Samples/tree/master… namicIndexing

не поможет ?

> Смотрю Франк

откуда берутся неучи, читающие книги?

#2
19:35, 10 окт. 2019
ronniko
innuendo
я жду этого противостояния ) )) )
#3
23:44, 10 окт. 2019

SetGraphicsRootDescriptorTable потому и называется "table" поскольку там присоединяется таблица дескрипторов. Таблица может включать несколько текстур. Можно присоединять и несколько таблиц. Короче смотри микрософтовские примеры, там все есть.

#4
(Правка: 11:17) 11:02, 11 окт. 2019

san

SetGraphicsRootDescriptorTable потому и называется "table" поскольку там присоединяется
таблица дескрипторов. Таблица может включать несколько текстур.

Если это так, то тогда вообще все просто.

В Pixel шейдере version 5.1 :
Texture2D  g_txMats[10]  : register(t0);//SetGraphicsRootDescriptorTable повесит сюда 10 текстур

uint instanceID : SV_InstanceID;
texture = g_txMats[instanceID].Sample(g_sampler, input.uv).rgba;

#5
11:10, 11 окт. 2019

ronniko
> Texture2D  g_txMats[10] 

это bindless?

#6
11:17, 11 окт. 2019

Это хотя бы для начала не плохо :)

ПрограммированиеФорумГрафика