project-aster/samples/03_model_render/shader/bindless_structs.hlsli

58 lines
1.3 KiB
HLSL

typedef float4 PositionData;
typedef float2 UVData;
typedef float4 NormalData;
typedef float4 ColorData;
struct TransformData
{
float4x4 transform;
};
struct MaterialData
{
float m_AlbedoFactor[4];
float m_EmissionFactor[3];
float m_MetalFactor;
float m_RoughFactor;
uint m_AlbedoTex;
uint m_NormalTex;
uint m_MetalRoughTex;
uint m_OcclusionTex;
uint m_EmissionTex;
};
struct Block
{
uint vertexBufferHandle;
uint colorHandle;
uint uvBufferHandle;
uint materialBufferHandle;
uint nodeBufferHandle;
int m_MaterialIdx;
uint m_NodeIdx;
};
struct Camera
{
float4x4 model;
float4x4 view;
float4x4 proj;
};
#define INVALID_HANDLE 0xFFFFFFFF
[[vk::binding(0, 0)]] StructuredBuffer<PositionData> vertexBuffer[];
[[vk::binding(0, 0)]] StructuredBuffer<UVData> uvBuffer[];
[[vk::binding(0, 0)]] StructuredBuffer<NormalData> normalBuffer[];
[[vk::binding(0, 0)]] StructuredBuffer<ColorData> colorBuffer[];
[[vk::binding(0, 0)]] StructuredBuffer<MaterialData> materialsBuffer[];
[[vk::binding(0, 0)]] StructuredBuffer<TransformData> nodeBuffer[];
[[vk::binding(1, 0)]] Texture2D<float4> textures[];
[[vk::binding(1, 0)]] SamplerState immutableSamplers[];
[[vk::binding(0, 1)]] ConstantBuffer<Camera> camera;
[[vk::push_constant]]
Block pcb;