#
` GLSL.std.450 main 2 ; A E H J N P R S T rend3-routine/shaders/src/depth.vert
rend3-routine/shaders/src/structures.glsl F � // OpModuleProcessed entry-point main
// OpModuleProcessed client vulkan100
// OpModuleProcessed target-env vulkan1.0
// OpModuleProcessed entry-point main
#line 1
#version 440
#include "structures.glsl"
// TODO: we don't need most of these
layout(location = 0) in vec3 i_position;
layout(location = 1) in vec3 i_normal;
layout(location = 2) in vec3 i_tangent;
layout(location = 3) in vec2 i_coords0;
layout(location = 4) in vec2 i_coords1;
layout(location = 5) in vec4 i_color;
#ifdef GPU_DRIVEN
layout(location = 8) in uint i_object_idx;
#endif
layout(location = 0) out vec4 o_position;
layout(location = 1) out vec2 o_coords0;
layout(location = 2) out vec4 o_color;
layout(location = 3) flat out uint o_material;
layout(set = 1, binding = 0, std430) readonly buffer ObjectOutputDataBuffer {
ObjectOutputData object_output[];
};
void main() {
#ifdef CPU_DRIVEN
uint object_idx = gl_InstanceIndex;
#else
uint object_idx = i_object_idx;
#endif
ObjectOutputData data = object_output[object_idx];
vec4 position = data.model_view_proj * vec4(i_position, 1.0);
o_position = position;
gl_Position = position;
o_material = data.material_idx;
o_color = i_color;
o_coords0 = i_coords0;
}
1 � #ifndef SHADER_STRUCTURES_GLSL
#define SHADER_STRUCTURES_GLSL
struct Plane {
vec4 inner;
};
struct Frustum {
Plane left;
Plane right;
Plane top;
Plane bottom;
// No far plane
Plane near;
};
struct ObjectInputData {
uint start_idx;
uint count;
int vertex_offset;
uint material_idx;
mat4 transform;
// xyz position; w radius
vec4 bounding_sphere;
};
/// If you change this struct, change the object output size in culling.rs
struct ObjectOutputData {
mat4 model_view;
mat4 model_view_proj;
uint material_idx;
// Work around https://github.com/gfx-rs/naga/issues/1561
vec3 inv_squared_scale;
};
struct IndirectCall {
uint vertex_count;
uint instance_count;
uint base_index;
int vertex_offset;
uint base_instance;
};
#define FLAGS_ALBEDO_ACTIVE 0x0001
#define FLAGS_ALBEDO_BLEND 0x0002
#define FLAGS_ALBEDO_VERTEX_SRGB 0x0004
#define FLAGS_BICOMPONENT_NORMAL 0x0008
#define FLAGS_SWIZZLED_NORMAL 0x0010
#define FLAGS_YDOWN_NORMAL 0x0020
#define FLAGS_AOMR_COMBINED 0x0040
#define FLAGS_AOMR_SWIZZLED_SPLIT 0x0080
#define FLAGS_AOMR_SPLIT 0x0100
#define FLAGS_AOMR_BW_SPLIT 0x0200
#define FLAGS_CC_GLTF_COMBINED 0x0400
#define FLAGS_CC_GLTF_SPLIT 0x0800
#define FLAGS_CC_BW_SPLIT 0x1000
#define FLAGS_UNLIT 0x2000
#define FLAGS_NEAREST 0x4000
#define MATERIAL_FLAG(name) bool(material.material_flags & name)
struct GPUMaterialData {
uint albedo_tex;
uint normal_tex;
uint roughness_tex;
uint metallic_tex;
// -- 16 --
uint reflectance_tex;
uint clear_coat_tex;
uint clear_coat_roughness_tex;
uint emissive_tex;
// -- 16 --
uint anisotropy_tex;
uint ambient_occlusion_tex;
uint _padding0;
uint _padding1;
// -- 16 --
mat3 uv_transform0;
// -- 16 --
mat3 uv_transform1;
// -- 16 --
vec4 albedo;
// -- 16 --
vec3 emissive;
float roughness;
// -- 16 --
float metallic;
float reflectance;
float clear_coat;
float clear_coat_roughness;
// -- 16 --
float anisotropy;
float ambient_occlusion;
float alpha_cutout;
uint material_flags;
};
struct CPUMaterialData {
mat3 uv_transform0;
// -- 16 --
mat3 uv_transform1;
// -- 16 --
vec4 albedo;
// -- 16 --
vec3 emissive;
float roughness;
// -- 16 --
float metallic;
float reflectance;
float clear_coat;
float clear_coat_roughness;
// -- 16 --
float anisotropy;
float ambient_occlusion;
float alpha_cutout;
uint material_flags;
// -- 16 --
uint texture_enable;
};
struct UniformData {
mat4 view;
mat4 view_proj;
mat4 origin_view_proj;
mat4 inv_view;
mat4 inv_view_proj;
mat4 inv_origin_view_proj;
Frustum frustum;
vec4 ambient;
};
struct DirectionalLightBufferHeader {
uint total_lights;
};
struct DirectionalLight {
mat4 view_proj;
vec3 color;
vec3 direction;
vec2 offset;
float size;
};
#endif
GL_GOOGLE_cpp_style_line_directive GL_GOOGLE_include_directive main i_object_idx ObjectOutputData model_view model_view_proj material_idx inv_squared_scale ObjectOutputDataBuffer object_output 2 i_position ; o_position ? gl_PerVertex ? gl_Position ? gl_PointSize ? gl_ClipDistance A E o_material H o_color J i_color N o_coords0 P i_coords0 R i_normal S i_tangent T i_coords1 G H H # H H H # @ H H # � H # � G � H H # G G "