You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-12-01 16:38:31 +00:00
Merge pull request #102552 from DarioSamo/shader-baker
Add shader baker to project exporter.
This commit is contained in:
@@ -134,12 +134,9 @@ layout(location = 9) out float dp_clip;
|
||||
layout(location = 10) out flat uint instance_index_interp;
|
||||
|
||||
#ifdef USE_MULTIVIEW
|
||||
#ifdef has_VK_KHR_multiview
|
||||
#extension GL_EXT_multiview : enable
|
||||
#define ViewIndex gl_ViewIndex
|
||||
#else // has_VK_KHR_multiview
|
||||
// !BAS! This needs to become an input once we implement our fallback!
|
||||
#define ViewIndex 0
|
||||
#endif // has_VK_KHR_multiview
|
||||
|
||||
vec3 multiview_uv(vec2 uv) {
|
||||
return vec3(uv, ViewIndex);
|
||||
}
|
||||
@@ -148,15 +145,12 @@ ivec3 multiview_uv(ivec2 uv) {
|
||||
}
|
||||
layout(location = 11) out vec4 combined_projected;
|
||||
#else // USE_MULTIVIEW
|
||||
// Set to zero, not supported in non stereo
|
||||
#define ViewIndex 0
|
||||
vec2 multiview_uv(vec2 uv) {
|
||||
return uv;
|
||||
}
|
||||
ivec2 multiview_uv(ivec2 uv) {
|
||||
return uv;
|
||||
}
|
||||
|
||||
#endif //USE_MULTIVIEW
|
||||
|
||||
#if !defined(MODE_RENDER_DEPTH) && !defined(MODE_UNSHADED) && defined(USE_VERTEX_LIGHTING)
|
||||
@@ -915,12 +909,8 @@ vec4 textureArray_bicubic(texture2DArray tex, vec3 uv, vec2 texture_size) {
|
||||
#endif //USE_LIGHTMAP
|
||||
|
||||
#ifdef USE_MULTIVIEW
|
||||
#ifdef has_VK_KHR_multiview
|
||||
#extension GL_EXT_multiview : enable
|
||||
#define ViewIndex gl_ViewIndex
|
||||
#else // has_VK_KHR_multiview
|
||||
// !BAS! This needs to become an input once we implement our fallback!
|
||||
#define ViewIndex 0
|
||||
#endif // has_VK_KHR_multiview
|
||||
vec3 multiview_uv(vec2 uv) {
|
||||
return vec3(uv, ViewIndex);
|
||||
}
|
||||
@@ -929,15 +919,13 @@ ivec3 multiview_uv(ivec2 uv) {
|
||||
}
|
||||
layout(location = 11) in vec4 combined_projected;
|
||||
#else // USE_MULTIVIEW
|
||||
// Set to zero, not supported in non stereo
|
||||
#define ViewIndex 0
|
||||
vec2 multiview_uv(vec2 uv) {
|
||||
return uv;
|
||||
}
|
||||
ivec2 multiview_uv(ivec2 uv) {
|
||||
return uv;
|
||||
}
|
||||
#endif //USE_MULTIVIEW
|
||||
#endif // !USE_MULTIVIEW
|
||||
#if !defined(MODE_RENDER_DEPTH) && !defined(MODE_UNSHADED) && defined(USE_VERTEX_LIGHTING)
|
||||
layout(location = 12) highp in vec4 diffuse_light_interp;
|
||||
layout(location = 13) highp in vec4 specular_light_interp;
|
||||
@@ -1452,28 +1440,22 @@ void fragment_shader(in SceneData scene_data) {
|
||||
|
||||
cluster_get_item_range(cluster_decal_offset + implementation_data.max_cluster_element_count_div_32 + cluster_z, item_min, item_max, item_from, item_to);
|
||||
|
||||
#ifdef USE_SUBGROUPS
|
||||
item_from = subgroupBroadcastFirst(subgroupMin(item_from));
|
||||
item_to = subgroupBroadcastFirst(subgroupMax(item_to));
|
||||
#endif
|
||||
|
||||
for (uint i = item_from; i < item_to; i++) {
|
||||
uint mask = cluster_buffer.data[cluster_decal_offset + i];
|
||||
mask &= cluster_get_range_clip_mask(i, item_min, item_max);
|
||||
#ifdef USE_SUBGROUPS
|
||||
uint merged_mask = subgroupBroadcastFirst(subgroupOr(mask));
|
||||
#else
|
||||
uint merged_mask = mask;
|
||||
#endif
|
||||
|
||||
uint merged_mask = subgroupBroadcastFirst(subgroupOr(mask));
|
||||
while (merged_mask != 0) {
|
||||
uint bit = findMSB(merged_mask);
|
||||
merged_mask &= ~(1u << bit);
|
||||
#ifdef USE_SUBGROUPS
|
||||
|
||||
if (((1u << bit) & mask) == 0) { //do not process if not originally here
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
|
||||
uint decal_index = 32 * i + bit;
|
||||
|
||||
if (!bool(decals.data[decal_index].mask & instances.data[instance_index].layer_mask)) {
|
||||
@@ -1931,10 +1913,8 @@ void fragment_shader(in SceneData scene_data) {
|
||||
|
||||
cluster_get_item_range(cluster_reflection_offset + implementation_data.max_cluster_element_count_div_32 + cluster_z, item_min, item_max, item_from, item_to);
|
||||
|
||||
#ifdef USE_SUBGROUPS
|
||||
item_from = subgroupBroadcastFirst(subgroupMin(item_from));
|
||||
item_to = subgroupBroadcastFirst(subgroupMax(item_to));
|
||||
#endif
|
||||
|
||||
#ifdef LIGHT_ANISOTROPY_USED
|
||||
// https://google.github.io/filament/Filament.html#lighting/imagebasedlights/anisotropy
|
||||
@@ -1952,20 +1932,16 @@ void fragment_shader(in SceneData scene_data) {
|
||||
for (uint i = item_from; i < item_to; i++) {
|
||||
uint mask = cluster_buffer.data[cluster_reflection_offset + i];
|
||||
mask &= cluster_get_range_clip_mask(i, item_min, item_max);
|
||||
#ifdef USE_SUBGROUPS
|
||||
uint merged_mask = subgroupBroadcastFirst(subgroupOr(mask));
|
||||
#else
|
||||
uint merged_mask = mask;
|
||||
#endif
|
||||
|
||||
uint merged_mask = subgroupBroadcastFirst(subgroupOr(mask));
|
||||
while (merged_mask != 0) {
|
||||
uint bit = findMSB(merged_mask);
|
||||
merged_mask &= ~(1u << bit);
|
||||
#ifdef USE_SUBGROUPS
|
||||
|
||||
if (((1u << bit) & mask) == 0) { //do not process if not originally here
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
|
||||
uint reflection_index = 32 * i + bit;
|
||||
|
||||
if (!bool(reflections.data[reflection_index].mask & instances.data[instance_index].layer_mask)) {
|
||||
@@ -2515,28 +2491,22 @@ void fragment_shader(in SceneData scene_data) {
|
||||
|
||||
cluster_get_item_range(cluster_omni_offset + implementation_data.max_cluster_element_count_div_32 + cluster_z, item_min, item_max, item_from, item_to);
|
||||
|
||||
#ifdef USE_SUBGROUPS
|
||||
item_from = subgroupBroadcastFirst(subgroupMin(item_from));
|
||||
item_to = subgroupBroadcastFirst(subgroupMax(item_to));
|
||||
#endif
|
||||
|
||||
for (uint i = item_from; i < item_to; i++) {
|
||||
uint mask = cluster_buffer.data[cluster_omni_offset + i];
|
||||
mask &= cluster_get_range_clip_mask(i, item_min, item_max);
|
||||
#ifdef USE_SUBGROUPS
|
||||
uint merged_mask = subgroupBroadcastFirst(subgroupOr(mask));
|
||||
#else
|
||||
uint merged_mask = mask;
|
||||
#endif
|
||||
|
||||
uint merged_mask = subgroupBroadcastFirst(subgroupOr(mask));
|
||||
while (merged_mask != 0) {
|
||||
uint bit = findMSB(merged_mask);
|
||||
merged_mask &= ~(1u << bit);
|
||||
#ifdef USE_SUBGROUPS
|
||||
|
||||
if (((1u << bit) & mask) == 0) { //do not process if not originally here
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
|
||||
uint light_index = 32 * i + bit;
|
||||
|
||||
if (!bool(omni_lights.data[light_index].mask & instances.data[instance_index].layer_mask)) {
|
||||
@@ -2582,28 +2552,21 @@ void fragment_shader(in SceneData scene_data) {
|
||||
|
||||
cluster_get_item_range(cluster_spot_offset + implementation_data.max_cluster_element_count_div_32 + cluster_z, item_min, item_max, item_from, item_to);
|
||||
|
||||
#ifdef USE_SUBGROUPS
|
||||
item_from = subgroupBroadcastFirst(subgroupMin(item_from));
|
||||
item_to = subgroupBroadcastFirst(subgroupMax(item_to));
|
||||
#endif
|
||||
|
||||
for (uint i = item_from; i < item_to; i++) {
|
||||
uint mask = cluster_buffer.data[cluster_spot_offset + i];
|
||||
mask &= cluster_get_range_clip_mask(i, item_min, item_max);
|
||||
#ifdef USE_SUBGROUPS
|
||||
uint merged_mask = subgroupBroadcastFirst(subgroupOr(mask));
|
||||
#else
|
||||
uint merged_mask = mask;
|
||||
#endif
|
||||
|
||||
uint merged_mask = subgroupBroadcastFirst(subgroupOr(mask));
|
||||
while (merged_mask != 0) {
|
||||
uint bit = findMSB(merged_mask);
|
||||
merged_mask &= ~(1u << bit);
|
||||
#ifdef USE_SUBGROUPS
|
||||
|
||||
if (((1u << bit) & mask) == 0) { //do not process if not originally here
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
|
||||
uint light_index = 32 * i + bit;
|
||||
|
||||
|
||||
@@ -5,20 +5,9 @@
|
||||
#define MAX_VOXEL_GI_INSTANCES 8
|
||||
#define MAX_VIEWS 2
|
||||
|
||||
#ifndef MOLTENVK_USED
|
||||
#if defined(has_GL_KHR_shader_subgroup_ballot) && defined(has_GL_KHR_shader_subgroup_arithmetic)
|
||||
|
||||
#extension GL_KHR_shader_subgroup_ballot : enable
|
||||
#extension GL_KHR_shader_subgroup_arithmetic : enable
|
||||
|
||||
#define USE_SUBGROUPS
|
||||
#endif
|
||||
#endif // MOLTENVK_USED
|
||||
|
||||
#if defined(USE_MULTIVIEW) && defined(has_VK_KHR_multiview)
|
||||
#extension GL_EXT_multiview : enable
|
||||
#endif
|
||||
|
||||
#include "../cluster_data_inc.glsl"
|
||||
#include "../decal_data_inc.glsl"
|
||||
#include "../scene_data_inc.glsl"
|
||||
|
||||
Reference in New Issue
Block a user