Differential D13910 Diff 47452 source/blender/draw/engines/workbench/shaders/infos/workbench_prepass_info.hh
Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/engines/workbench/shaders/infos/workbench_prepass_info.hh
- This file was moved from source/blender/draw/engines/workbench/shaders/workbench_prepass_info.hh.
| #include "gpu_shader_create_info.hh" | #include "gpu_shader_create_info.hh" | ||||
| /* -------------------------------------------------------------------- */ | /* -------------------------------------------------------------------- */ | ||||
| /** \name Object Type | /** \name Object Type | ||||
| * \{ */ | * \{ */ | ||||
| GPU_SHADER_CREATE_INFO(workbench_mesh) | GPU_SHADER_CREATE_INFO(workbench_mesh) | ||||
| .vertex_in(0, Type::VEC3, "pos") | .vertex_in(0, Type::VEC3, "pos") | ||||
| .vertex_in(1, Type::VEC3, "nor") | .vertex_in(1, Type::VEC3, "nor") | ||||
| .vertex_in(2, Type::VEC4, "ac") | .vertex_in(2, Type::VEC4, "ac") | ||||
| .vertex_in(3, Type::VEC2, "au") | .vertex_in(3, Type::VEC2, "au") | ||||
| .vertex_source("workbench_prepass_vert.glsl") | .vertex_source("workbench_prepass_vert.glsl") | ||||
| .additional_info("draw_mesh"); | .additional_info("draw_mesh") | ||||
| .additional_info("draw_resource_handle"); | |||||
| GPU_SHADER_CREATE_INFO(workbench_hair) | GPU_SHADER_CREATE_INFO(workbench_hair) | ||||
| .sampler(0, ImageType::FLOAT_BUFFER, "ac", Frequency::BATCH) | .sampler(0, ImageType::FLOAT_BUFFER, "ac", Frequency::BATCH) | ||||
| .sampler(1, ImageType::FLOAT_BUFFER, "au", Frequency::BATCH) | .sampler(1, ImageType::FLOAT_BUFFER, "au", Frequency::BATCH) | ||||
| .vertex_source("workbench_prepass_hair_vert.glsl") | .vertex_source("workbench_prepass_hair_vert.glsl") | ||||
| .additional_info("draw_hair"); | .additional_info("draw_hair") | ||||
| .additional_info("draw_resource_handle"); | |||||
| GPU_SHADER_CREATE_INFO(workbench_pointcloud) | GPU_SHADER_CREATE_INFO(workbench_pointcloud) | ||||
| .vertex_source("workbench_prepass_pointcloud_vert.glsl") | .vertex_source("workbench_prepass_pointcloud_vert.glsl") | ||||
| .additional_info("draw_pointcloud"); | .additional_info("draw_pointcloud") | ||||
| .additional_info("draw_resource_handle"); | |||||
| /** \} */ | /** \} */ | ||||
| /* -------------------------------------------------------------------- */ | /* -------------------------------------------------------------------- */ | ||||
| /** \name Texture Type | /** \name Texture Type | ||||
| * \{ */ | * \{ */ | ||||
| GPU_SHADER_CREATE_INFO(workbench_texture_none).define("TEXTURE_NONE"); | GPU_SHADER_CREATE_INFO(workbench_texture_none).define("TEXTURE_NONE"); | ||||
| GPU_SHADER_CREATE_INFO(workbench_texture_single) | GPU_SHADER_CREATE_INFO(workbench_texture_single) | ||||
| .sampler(2, ImageType::FLOAT_2D, "imageTexture", Frequency::BATCH) | .sampler(2, ImageType::FLOAT_2D, "imageTexture", Frequency::BATCH) | ||||
| .push_constant(1, Type::BOOL, "imagePremult") | .push_constant(1, Type::BOOL, "imagePremult") | ||||
| .push_constant(2, Type::FLOAT, "imageTransparencyCutoff") | .push_constant(2, Type::FLOAT, "imageTransparencyCutoff") | ||||
| .define("V3D_SHADING_TEXTURE_COLOR"); | .define("V3D_SHADING_TEXTURE_COLOR"); | ||||
| GPU_SHADER_CREATE_INFO(workbench_texture_tile) | GPU_SHADER_CREATE_INFO(workbench_texture_tile) | ||||
| .sampler(2, ImageType::FLOAT_2D_ARRAY, "imageTileArray", Frequency::BATCH) | .sampler(2, ImageType::FLOAT_2D_ARRAY, "imageTileArray", Frequency::BATCH) | ||||
| .sampler(3, ImageType::FLOAT_1D_ARRAY, "imageTileData", Frequency::BATCH) | .sampler(3, ImageType::FLOAT_1D_ARRAY, "imageTileData", Frequency::BATCH) | ||||
| .push_constant(1, Type::BOOL, "imagePremult") | .push_constant(1, Type::BOOL, "imagePremult") | ||||
| .push_constant(2, Type::FLOAT, "imageTransparencyCutoff") | .push_constant(2, Type::FLOAT, "imageTransparencyCutoff") | ||||
| .define("V3D_SHADING_TEXTURE_COLOR") | |||||
| .define("TEXTURE_IMAGE_ARRAY"); | .define("TEXTURE_IMAGE_ARRAY"); | ||||
| /** \} */ | /** \} */ | ||||
| /* -------------------------------------------------------------------- */ | /* -------------------------------------------------------------------- */ | ||||
| /** \name Lighting Type | /** \name Lighting Type (only for transparent) | ||||
| * \{ */ | * \{ */ | ||||
| GPU_SHADER_CREATE_INFO(workbench_lighting_studio).define("V3D_LIGHTING_STUDIO"); | |||||
| GPU_SHADER_CREATE_INFO(workbench_lighting_matcap).define("V3D_LIGHTING_MATCAP"); | |||||
| GPU_SHADER_CREATE_INFO(workbench_lighting_flat).define("V3D_LIGHTING_FLAT"); | GPU_SHADER_CREATE_INFO(workbench_lighting_flat).define("V3D_LIGHTING_FLAT"); | ||||
| GPU_SHADER_CREATE_INFO(workbench_lighting_studio).define("V3D_LIGHTING_STUDIO"); | |||||
| GPU_SHADER_CREATE_INFO(workbench_lighting_matcap) | |||||
| .define("V3D_LIGHTING_MATCAP") | |||||
| .sampler(4, ImageType::FLOAT_2D, "matcap_diffuse_tx", Frequency::PASS) | |||||
| .sampler(5, ImageType::FLOAT_2D, "matcap_specular_tx", Frequency::PASS); | |||||
| /** \} */ | /** \} */ | ||||
| /* -------------------------------------------------------------------- */ | /* -------------------------------------------------------------------- */ | ||||
| /** \name Material Interface | /** \name Material Interface | ||||
| * \{ */ | * \{ */ | ||||
| GPU_SHADER_INTERFACE_INFO(workbench_material_iface, "") | GPU_SHADER_INTERFACE_INFO(workbench_material_iface, "") | ||||
| .smooth(Type::VEC3, "normal_interp") | .smooth(Type::VEC3, "normal_interp") | ||||
| .smooth(Type::VEC3, "color_interp") | .smooth(Type::VEC3, "color_interp") | ||||
| .smooth(Type::FLOAT, "alpha_interp") | .smooth(Type::FLOAT, "alpha_interp") | ||||
| .smooth(Type::VEC2, "uv_interp") | .smooth(Type::VEC2, "uv_interp") | ||||
| .flat(Type::INT, "object_id") | .flat(Type::INT, "object_id") | ||||
| .flat(Type::FLOAT, "roughness") | .flat(Type::FLOAT, "roughness") | ||||
| .flat(Type::FLOAT, "metallic"); | .flat(Type::FLOAT, "metallic"); | ||||
| GPU_SHADER_CREATE_INFO(workbench_material).vertex_out(workbench_material_iface); | GPU_SHADER_CREATE_INFO(workbench_material) | ||||
| .uniform_buf(4, "WorldData", "world_data", Frequency::PASS) | |||||
| .uniform_buf(5, "vec4", "materials_data[4096]", Frequency::PASS) | |||||
| .push_constant(4, Type::INT, "materialIndex") | |||||
| .push_constant(5, Type::BOOL, "useMatcap") | |||||
| .vertex_out(workbench_material_iface); | |||||
| /** \} */ | /** \} */ | ||||
| /* -------------------------------------------------------------------- */ | /* -------------------------------------------------------------------- */ | ||||
| /** \name Pipeline Type | /** \name Pipeline Type | ||||
| * \{ */ | * \{ */ | ||||
| GPU_SHADER_CREATE_INFO(workbench_transparent_accum) | GPU_SHADER_CREATE_INFO(workbench_transparent_accum) | ||||
| /* Note: Blending will be skipped on objectId because output is a | /* Note: Blending will be skipped on objectId because output is a | ||||
| non-normalized integer buffer. */ | non-normalized integer buffer. */ | ||||
| .fragment_out(0, Type::VEC4, "transparentAccum") | .fragment_out(0, Type::VEC4, "transparentAccum") | ||||
| .fragment_out(1, Type::VEC4, "revealageAccum") | .fragment_out(1, Type::VEC4, "revealageAccum") | ||||
| .fragment_out(2, Type::UINT, "objectId") | .fragment_out(2, Type::UINT, "objectId") | ||||
| .uniform_buf(4, "WorldData", "world_data", Frequency::PASS) | .push_constant(3, Type::BOOL, "forceShadowing") | ||||
| .typedef_source("workbench_shader_shared.h") | .typedef_source("workbench_shader_shared.h") | ||||
| .fragment_source("workbench_transparent_accum_frag.glsl") | .fragment_source("workbench_transparent_accum_frag.glsl"); | ||||
| .additional_info("workbench_material"); | |||||
| GPU_SHADER_CREATE_INFO(workbench_opaque) | GPU_SHADER_CREATE_INFO(workbench_opaque) | ||||
| .fragment_out(0, Type::VEC4, "materialData") | .fragment_out(0, Type::VEC4, "materialData") | ||||
| .fragment_out(1, Type::VEC2, "normalData") | .fragment_out(1, Type::VEC2, "normalData") | ||||
| .fragment_out(2, Type::UINT, "objectId") | .fragment_out(2, Type::UINT, "objectId") | ||||
| .uniform_buf(4, "WorldData", "world_data", Frequency::PASS) | |||||
| .typedef_source("workbench_shader_shared.h") | .typedef_source("workbench_shader_shared.h") | ||||
| .fragment_source("workbench_prepass_frag.glsl") | .fragment_source("workbench_prepass_frag.glsl"); | ||||
| .additional_info("workbench_material"); | |||||
| /** \} */ | /** \} */ | ||||
| /* -------------------------------------------------------------------- */ | /* -------------------------------------------------------------------- */ | ||||
| /** \name Variations Declaration | /** \name Variations Declaration | ||||
| * \{ */ | * \{ */ | ||||
| #define WORKBENCH_SURFACETYPE_VARIATIONS(prefix, ...) \ | #define WORKBENCH_FINAL_VARIATION(name, ...) \ | ||||
| GPU_SHADER_CREATE_INFO(prefix##_mesh) \ | GPU_SHADER_CREATE_INFO(name).additional_info(__VA_ARGS__).do_static_compilation(true); | ||||
| .additional_info("workbench_mesh", __VA_ARGS__) \ | |||||
| .do_static_compilation(true); \ | #define WORKBENCH_CLIPPING_VARIATIONS(prefix, ...) \ | ||||
| GPU_SHADER_CREATE_INFO(prefix##_hair) \ | WORKBENCH_FINAL_VARIATION(prefix##_clip, "drw_clipped", __VA_ARGS__) \ | ||||
| .additional_info("workbench_hair", __VA_ARGS__) \ | WORKBENCH_FINAL_VARIATION(prefix##_no_clip, __VA_ARGS__) | ||||
| .do_static_compilation(true); \ | |||||
| GPU_SHADER_CREATE_INFO(prefix##_ptcloud) \ | #define WORKBENCH_TEXTURE_VARIATIONS(prefix, ...) \ | ||||
| .additional_info("workbench_pointcloud", __VA_ARGS__) \ | WORKBENCH_CLIPPING_VARIATIONS(prefix##_tex_none, "workbench_texture_none", __VA_ARGS__) \ | ||||
| .do_static_compilation(true); | WORKBENCH_CLIPPING_VARIATIONS(prefix##_tex_single, "workbench_texture_single", __VA_ARGS__) \ | ||||
| WORKBENCH_CLIPPING_VARIATIONS(prefix##_tex_tile, "workbench_texture_tile", __VA_ARGS__) | |||||
| #define WORKBENCH_DATATYPE_VARIATIONS(prefix, ...) \ | |||||
| WORKBENCH_TEXTURE_VARIATIONS(prefix##_mesh, "workbench_mesh", __VA_ARGS__) \ | |||||
| WORKBENCH_TEXTURE_VARIATIONS(prefix##_hair, "workbench_hair", __VA_ARGS__) \ | |||||
| WORKBENCH_TEXTURE_VARIATIONS(prefix##_ptcloud, "workbench_pointcloud", __VA_ARGS__) | |||||
| #define WORKBENCH_PIPELINE_VARIATIONS(prefix, ...) \ | #define WORKBENCH_PIPELINE_VARIATIONS(prefix, ...) \ | ||||
| WORKBENCH_SURFACETYPE_VARIATIONS(prefix##_transp_studio, \ | WORKBENCH_DATATYPE_VARIATIONS(prefix##_transp_studio, \ | ||||
| "workbench_transparent_accum", \ | "workbench_transparent_accum", \ | ||||
| "workbench_lighting_studio", \ | "workbench_lighting_studio", \ | ||||
| __VA_ARGS__) \ | __VA_ARGS__) \ | ||||
| WORKBENCH_SURFACETYPE_VARIATIONS(prefix##_transp_matcap, \ | WORKBENCH_DATATYPE_VARIATIONS(prefix##_transp_matcap, \ | ||||
| "workbench_transparent_accum", \ | "workbench_transparent_accum", \ | ||||
| "workbench_lighting_matcap", \ | "workbench_lighting_matcap", \ | ||||
| __VA_ARGS__) \ | __VA_ARGS__) \ | ||||
| WORKBENCH_SURFACETYPE_VARIATIONS(prefix##_transp_flat, \ | WORKBENCH_DATATYPE_VARIATIONS(prefix##_transp_flat, \ | ||||
| "workbench_transparent_accum", \ | "workbench_transparent_accum", \ | ||||
| "workbench_lighting_flat", \ | "workbench_lighting_flat", \ | ||||
| __VA_ARGS__) \ | __VA_ARGS__) \ | ||||
| WORKBENCH_SURFACETYPE_VARIATIONS(prefix##_opaque, "workbench_opaque", __VA_ARGS__) | WORKBENCH_DATATYPE_VARIATIONS(prefix##_opaque, "workbench_opaque", __VA_ARGS__) | ||||
| WORKBENCH_PIPELINE_VARIATIONS(workbench_tex_none, "workbench_texture_none") | WORKBENCH_PIPELINE_VARIATIONS(workbench, "workbench_material"); | ||||
| WORKBENCH_PIPELINE_VARIATIONS(workbench_tex_single, "workbench_texture_single") | |||||
| WORKBENCH_PIPELINE_VARIATIONS(workbench_tex_tile, "workbench_texture_tile") | |||||
| /** \} */ | /** \} */ | ||||