Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
micky

Založen: 28. 02. 2008 Příspěvky: 348 Bydliště: Plzeň, Praha
|
Zaslal: 3. květen 2012, 21:05:02 Předmět: Zarovnání v constant bufferech DirectX 10+ |
|
|
Ahoj,
mám poněkud potíž s používáním constant bufferů u DX/HLSL. Do této chvíle jsem si naivně myslel, že když dodržím zarovnání na 4 bajty (int, float), vše se v shaderech přečte bez potíží tak, jak jsem to tam zaslal. To se však neděje.
Struktura constant bufferu:
kód: |
cbuffer GlobalBuffer : register(b0)
{
float4 lightAmbient;
float4 dirlightDirection;
float4 dirlightColor;
float4 cameraPosition;
float4 pointlightPos[16];
float4 pointlightColor[16];
float pointlightFalloff[16];
int pointlightCount;
};
|
Pole pointlightFalloff musím plnit z druhé strany, jako kdyby bylo sestavené z float4, abych dostal nenulové hodnoty...
Otázka je tedy taková - uvnitř constant bufferu musí být všechny prvky nejméně o velikosti float4? Nebo je v tom jiná magie?
Díky za případné rady a postřehy. _________________ https://www.bluepulsar.cz/
https://twitter.com/11thDream_Game/ |
|
Návrat nahoru |
|
 |
nou

Založen: 28. 07. 2007 Příspěvky: 1050
|
Zaslal: 3. květen 2012, 21:29:14 Předmět: |
|
|
v OpenCL musia byt vsetky struktury zarovnane na najvecsi prvok v strukture. v tomto pripade teda float4 - 16 bajtov. taktiez kazdy prvok musi byt zarovnany na svoju velkost. teda
kód: |
struct { float a; float4 b }; |
tak b bude zacinat na offsete 16. velmi pravdepodobne su tieto pravidla ucinne aj v DX a OpenGL kedze v OpenGL musi clovek zistit vsetky offsety alebo pouzit std140.
EDIT: troska som pozrel na std140 a tam ma byt vsetko zarovnane na vec4 _________________ Najjednoduchšie chyby sa najtažšie hľadajú. |
|
Návrat nahoru |
|
 |
micky

Založen: 28. 02. 2008 Příspěvky: 348 Bydliště: Plzeň, Praha
|
|
Návrat nahoru |
|
 |
pcmaster

Založen: 28. 07. 2007 Příspěvky: 1827
|
|
Návrat nahoru |
|
 |
micky

Založen: 28. 02. 2008 Příspěvky: 348 Bydliště: Plzeň, Praha
|
Zaslal: 4. květen 2012, 12:49:41 Předmět: |
|
|
Četl, ale až někdy později v noci. Nakonec jsem ty svoje floaty připojil jako složku w jednoho z polí float4 vektorů (doufejme, že to nebude mít nějaký značný vliv na výkon, bez otestování ale těžko něco soudit ). _________________ https://www.bluepulsar.cz/
https://twitter.com/11thDream_Game/ |
|
Návrat nahoru |
|
 |
|