project-aster/samples/04_scenes/shader/bindless_structs.glsl

53 lines
1.5 KiB
GLSL

struct VertexData {
vec4 Normal;
vec2 TexCoord0;
vec2 TexCoord1;
vec4 Color;
};
struct Material
{
vec4 m_AlbedoFactor; // 16 16
vec3 m_EmissionFactor; // 12 28
float m_MetalFactor; // 04 32
float m_RoughFactor; // 04 36
uint m_AlbedoTex; // 04 40
uint m_NormalTex; // 04 44
uint m_MetalRoughTex; // 04 48
uint m_OcclusionTex; // 04 52
uint m_EmissionTex; // 04 56
// We might be able to go upto 64 without pains.
};
// ---------- Bindless Bindings ----------
#define INVALID_HANDLE 0xFFFFFFFF
layout (set = 0, binding = 1) uniform sampler2D textures[];
layout (set = 0, binding = 1) uniform samplerCube textureCubes[];
// ---------- Buffer References ----------
layout(std430, buffer_reference, buffer_reference_align=16) readonly buffer VPositionRef {
vec4 Positions[];
};
layout(std430, buffer_reference, buffer_reference_align=16) readonly buffer VDataRef {
VertexData Data[];
};
layout(std430, buffer_reference, buffer_reference_align=8) readonly buffer MaterialsRef {
Material materials[];
};
layout(std430, buffer_reference, buffer_reference_align=8) readonly buffer MaterialRef {
vec4 m_AlbedoFactor; // 16 16
vec3 m_EmissionFactor; // 12 28
float m_MetalFactor; // 04 32
float m_RoughFactor; // 04 36
uint m_AlbedoTex; // 04 40
uint m_NormalTex; // 04 44
uint m_MetalRoughTex; // 04 48
uint m_OcclusionTex; // 04 52
uint m_EmissionTex; // 04 56
};