.[ ČeskéHry.cz ].
Zarovnání v constant bufferech DirectX 10+

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Grafika
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

PříspěvekZaslal: 3. květen 2012, 21:05:02    Předmět: Zarovnání v constant bufferech DirectX 10+ Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



Založen: 28. 07. 2007
Příspěvky: 1050

PříspěvekZaslal: 3. květen 2012, 21:29:14    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
micky



Založen: 28. 02. 2008
Příspěvky: 348
Bydliště: Plzeň, Praha

PříspěvekZaslal: 3. květen 2012, 22:30:48    Předmět: Odpovědět s citátem

Díky, ještě jsem (přes odkazy na nějakém opengl fóru, které vedly na DX téma) našel poměrně dobré postřehy tady: http://forums.nvidia.com/index.php?showtopic=169643

Snad už si s tím poradím, díky za popostrčení.
_________________
https://www.bluepulsar.cz/
https://twitter.com/11thDream_Game/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1827

PříspěvekZaslal: 4. květen 2012, 11:23:11    Předmět: Odpovědět s citátem

Toto http://msdn.microsoft.com/en-us/library/windows/desktop/bb509581%28v=vs.85%29.aspx a toto http://msdn.microsoft.com/en-us/library/windows/desktop/bb509632%28v=vs.85%29.aspx si cital?

Je to tam velmi konkretne napisane. A je tam aj ukazka, ako to spakovat "agresivnejsie".

Pravda je, ze ja pouzivam Effects11 Framework, takze som si s tym fakt nikdy nelamal hlavu, ale pravdou bude, ze to fakt zarovnava a vyplna na float4 (16 B).
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
micky



Založen: 28. 02. 2008
Příspěvky: 348
Bydliště: Plzeň, Praha

PříspěvekZaslal: 4. květen 2012, 12:49:41    Předmět: Odpovědět s citátem

Četl, ale až někdy později v noci. Smile 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 Smile ).
_________________
https://www.bluepulsar.cz/
https://twitter.com/11thDream_Game/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Grafika Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna