Seite 1 von 1
[HLSL] cbuffer deklarieren
Verfasst: 09.08.2018, 06:17
von Krishty
Ich möchte den selben Constant Buffer in zwei Shadern verwenden, in unterschiedlichen Slots:
// Vertex shader:
cbuffer Light : register(b0) {
float3 pos : packoffset(c0);
float3 color : packoffset(c1);
};
// Pixel Shader:
cbuffer Light : register(b7) {
float3 pos : packoffset(c0);
float3 color : packoffset(c1);
};
Kriege ich das hin, ohne das Layout doppelt hinzuschreiben? Ich habe versucht, ihn zu deklarieren, aber ohne Erfolg:
// Gemeinsamer Header:
cbuffer Light {
float3 pos : packoffset(c0);
float3 color : packoffset(c1);
};
// Vertex Shader:
cbuffer Light : b0; // error
Pixel Shader:
cbuffer Light: b7; // error
grrrrnnnngh
Re: [HLSL] cbuffer deklarieren
Verfasst: 09.08.2018, 16:35
von unbird
Sollte laut
Doku mittels optionalem shader_profile/target möglich sein. Sollte. Nur kriegt man z.B. für sowas:
Code: Alles auswählen
cbuffer SomeBuffer : register( ps, b0 ) : register( vs, b1 )
{
// whatever
};
dann diese Fehlermeldung:
error X3515: User defined constant buffer slots cannot be target specific
Gurgelt man nach dieser Fehlermeldung kommt man auch nicht weiter.
In der Tat grrr. Sehe für einen workaround lediglich irgend einen Makro-Murks :/
Re: [HLSL] cbuffer deklarieren
Verfasst: 09.08.2018, 22:53
von Krishty
Wow, die Syntax war mir nicht aufgefallen! Unter bestimmten Umständen ist die sicher nützlich. Bringt mich hier nicht weiter, aber ich habe zumindest was gelernt. Ich dupliziere die verdammten structs einfach … was soll’s … :(
Re: [HLSL] cbuffer deklarieren
Verfasst: 10.08.2018, 04:14
von Zudomon
Mir ist gerade eingefallen, dass ich damals ja auch mal kurze Zeit DX10 gemacht habe.
Also habe ich nun mal in meinem alten Projekt gestöbert: Tatsächlich hatte ich auch cbuffer genutzt. Jetzt weiß ich allerdings nicht, ob die Situation die gleiche ist. Ich hatte die in einem Effektfile.
Also scheinbar sind cbuffer gar nicht als Structs anzusehen, sondern eher als Gruppenname für eine Menge an Variablen.
Ich hatte da die Slots gar nicht spezifiziert...
Code: Alles auswählen
cbuffer cbObject
{
matrix World;
matrix WorldNor;
matrix WorldNorm;
float4 vMeshColor;
float4 Campos;
float4 Thickness;
bool bSingleColor;
bool bLighttrans;
bool bLight;
bool bAlphatest;
bool bFog;
bool bObjNor;
bool bNewTex;
float4 ObjNor;
float4 Time;
};
Und später im Code wurden die Variablen direkt angesprochen... also da hieß es dann z.B. float4 col = vMeshColor;
Arrays:
Code: Alles auswählen
cbuffer cbLight
{
float4 Light_Pos[256];
float4 Light_Color[256];
};
Ich hoffe mal, das bringt dich weiter.
Re: [HLSL] cbuffer deklarieren
Verfasst: 10.08.2018, 07:24
von Krishty
Nein, leider nicht – so bindest du die Buffer immer nur an den ersten Slot (b0). Ich möchte den selben Buffer je nach Verwendung an unterschiedliche Slots binden …