You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-21 14:57:09 +00:00
Merge pull request #67915 from RevoluPowered/fix-intel-macbook-crash-subgroups
Ensure vulkan subgroups are disabled for MoltenVK
This commit is contained in:
@@ -64,7 +64,7 @@ void main() {
|
|||||||
#version 450
|
#version 450
|
||||||
|
|
||||||
#VERSION_DEFINES
|
#VERSION_DEFINES
|
||||||
|
#ifndef MOLTENVK_USED // Metal will corrupt GPU state otherwise
|
||||||
#if defined(has_GL_KHR_shader_subgroup_ballot) && defined(has_GL_KHR_shader_subgroup_arithmetic) && defined(has_GL_KHR_shader_subgroup_vote)
|
#if defined(has_GL_KHR_shader_subgroup_ballot) && defined(has_GL_KHR_shader_subgroup_arithmetic) && defined(has_GL_KHR_shader_subgroup_vote)
|
||||||
|
|
||||||
#extension GL_KHR_shader_subgroup_ballot : enable
|
#extension GL_KHR_shader_subgroup_ballot : enable
|
||||||
@@ -73,6 +73,7 @@ void main() {
|
|||||||
|
|
||||||
#define USE_SUBGROUPS
|
#define USE_SUBGROUPS
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
layout(location = 0) in float depth_interp;
|
layout(location = 0) in float depth_interp;
|
||||||
layout(location = 1) in flat uint element_index;
|
layout(location = 1) in flat uint element_index;
|
||||||
|
|||||||
@@ -32,7 +32,9 @@
|
|||||||
// Based on Spartan Engine's TAA implementation (without TAA upscale).
|
// Based on Spartan Engine's TAA implementation (without TAA upscale).
|
||||||
// <https://github.com/PanosK92/SpartanEngine/blob/a8338d0609b85dc32f3732a5c27fb4463816a3b9/Data/shaders/temporal_antialiasing.hlsl>
|
// <https://github.com/PanosK92/SpartanEngine/blob/a8338d0609b85dc32f3732a5c27fb4463816a3b9/Data/shaders/temporal_antialiasing.hlsl>
|
||||||
|
|
||||||
|
#ifndef MOLTENVK_USED
|
||||||
#define USE_SUBGROUPS
|
#define USE_SUBGROUPS
|
||||||
|
#endif // MOLTENVK_USED
|
||||||
|
|
||||||
#define GROUP_SIZE 8
|
#define GROUP_SIZE 8
|
||||||
#define FLT_MIN 0.00000001
|
#define FLT_MIN 0.00000001
|
||||||
|
|||||||
@@ -97,9 +97,7 @@ layout(location = 8) out vec4 prev_screen_position;
|
|||||||
|
|
||||||
#ifdef MATERIAL_UNIFORMS_USED
|
#ifdef MATERIAL_UNIFORMS_USED
|
||||||
layout(set = MATERIAL_UNIFORM_SET, binding = 0, std140) uniform MaterialUniforms{
|
layout(set = MATERIAL_UNIFORM_SET, binding = 0, std140) uniform MaterialUniforms{
|
||||||
|
|
||||||
#MATERIAL_UNIFORMS
|
#MATERIAL_UNIFORMS
|
||||||
|
|
||||||
} material;
|
} material;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -691,7 +689,7 @@ vec4 fog_process(vec3 vertex) {
|
|||||||
|
|
||||||
void cluster_get_item_range(uint p_offset, out uint item_min, out uint item_max, out uint item_from, out uint item_to) {
|
void cluster_get_item_range(uint p_offset, out uint item_min, out uint item_max, out uint item_from, out uint item_to) {
|
||||||
uint item_min_max = cluster_buffer.data[p_offset];
|
uint item_min_max = cluster_buffer.data[p_offset];
|
||||||
item_min = item_min_max & 0xFFFF;
|
item_min = item_min_max & 0xFFFFu;
|
||||||
item_max = item_min_max >> 16;
|
item_max = item_min_max >> 16;
|
||||||
|
|
||||||
item_from = item_min >> 5;
|
item_from = item_min >> 5;
|
||||||
@@ -958,9 +956,9 @@ void fragment_shader(in SceneData scene_data) {
|
|||||||
|
|
||||||
while (merged_mask != 0) {
|
while (merged_mask != 0) {
|
||||||
uint bit = findMSB(merged_mask);
|
uint bit = findMSB(merged_mask);
|
||||||
merged_mask &= ~(1 << bit);
|
merged_mask &= ~(1u << bit);
|
||||||
#ifdef USE_SUBGROUPS
|
#ifdef USE_SUBGROUPS
|
||||||
if (((1 << bit) & mask) == 0) { //do not process if not originally here
|
if (((1u << bit) & mask) == 0) { //do not process if not originally here
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -1419,9 +1417,9 @@ void fragment_shader(in SceneData scene_data) {
|
|||||||
|
|
||||||
while (merged_mask != 0) {
|
while (merged_mask != 0) {
|
||||||
uint bit = findMSB(merged_mask);
|
uint bit = findMSB(merged_mask);
|
||||||
merged_mask &= ~(1 << bit);
|
merged_mask &= ~(1u << bit);
|
||||||
#ifdef USE_SUBGROUPS
|
#ifdef USE_SUBGROUPS
|
||||||
if (((1 << bit) & mask) == 0) { //do not process if not originally here
|
if (((1u << bit) & mask) == 0) { //do not process if not originally here
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -1781,9 +1779,9 @@ void fragment_shader(in SceneData scene_data) {
|
|||||||
float shadow = 1.0;
|
float shadow = 1.0;
|
||||||
#ifndef SHADOWS_DISABLED
|
#ifndef SHADOWS_DISABLED
|
||||||
if (i < 4) {
|
if (i < 4) {
|
||||||
shadow = float(shadow0 >> (i * 8) & 0xFF) / 255.0;
|
shadow = float(shadow0 >> (i * 8u) & 0xFFu) / 255.0;
|
||||||
} else {
|
} else {
|
||||||
shadow = float(shadow1 >> ((i - 4) * 8) & 0xFF) / 255.0;
|
shadow = float(shadow1 >> ((i - 4u) * 8u) & 0xFFu) / 255.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
shadow = shadow * directional_lights.data[i].shadow_opacity + 1.0 - directional_lights.data[i].shadow_opacity;
|
shadow = shadow * directional_lights.data[i].shadow_opacity + 1.0 - directional_lights.data[i].shadow_opacity;
|
||||||
@@ -1845,9 +1843,9 @@ void fragment_shader(in SceneData scene_data) {
|
|||||||
|
|
||||||
while (merged_mask != 0) {
|
while (merged_mask != 0) {
|
||||||
uint bit = findMSB(merged_mask);
|
uint bit = findMSB(merged_mask);
|
||||||
merged_mask &= ~(1 << bit);
|
merged_mask &= ~(1u << bit);
|
||||||
#ifdef USE_SUBGROUPS
|
#ifdef USE_SUBGROUPS
|
||||||
if (((1 << bit) & mask) == 0) { //do not process if not originally here
|
if (((1u << bit) & mask) == 0) { //do not process if not originally here
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -1916,9 +1914,9 @@ void fragment_shader(in SceneData scene_data) {
|
|||||||
|
|
||||||
while (merged_mask != 0) {
|
while (merged_mask != 0) {
|
||||||
uint bit = findMSB(merged_mask);
|
uint bit = findMSB(merged_mask);
|
||||||
merged_mask &= ~(1 << bit);
|
merged_mask &= ~(1u << bit);
|
||||||
#ifdef USE_SUBGROUPS
|
#ifdef USE_SUBGROUPS
|
||||||
if (((1 << bit) & mask) == 0) { //do not process if not originally here
|
if (((1u << bit) & mask) == 0) { //do not process if not originally here
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -2071,7 +2069,7 @@ void fragment_shader(in SceneData scene_data) {
|
|||||||
float sGreen = floor((cGreen / pow(2.0f, exps - B - N)) + 0.5f);
|
float sGreen = floor((cGreen / pow(2.0f, exps - B - N)) + 0.5f);
|
||||||
float sBlue = floor((cBlue / pow(2.0f, exps - B - N)) + 0.5f);
|
float sBlue = floor((cBlue / pow(2.0f, exps - B - N)) + 0.5f);
|
||||||
//store as 8985 to have 2 extra neighbour bits
|
//store as 8985 to have 2 extra neighbour bits
|
||||||
uint light_rgbe = ((uint(sRed) & 0x1FF) >> 1) | ((uint(sGreen) & 0x1FF) << 8) | (((uint(sBlue) & 0x1FF) >> 1) << 17) | ((uint(exps) & 0x1F) << 25);
|
uint light_rgbe = ((uint(sRed) & 0x1FFu) >> 1) | ((uint(sGreen) & 0x1FFu) << 8) | (((uint(sBlue) & 0x1FFu) >> 1) << 17) | ((uint(exps) & 0x1Fu) << 25);
|
||||||
|
|
||||||
imageStore(emission_grid, grid_pos, uvec4(light_rgbe));
|
imageStore(emission_grid, grid_pos, uvec4(light_rgbe));
|
||||||
imageStore(emission_aniso_grid, grid_pos, uvec4(light_aniso));
|
imageStore(emission_aniso_grid, grid_pos, uvec4(light_aniso));
|
||||||
@@ -2105,8 +2103,8 @@ void fragment_shader(in SceneData scene_data) {
|
|||||||
if (bool(instances.data[instance_index].flags & INSTANCE_FLAGS_USE_VOXEL_GI)) { // process voxel_gi_instances
|
if (bool(instances.data[instance_index].flags & INSTANCE_FLAGS_USE_VOXEL_GI)) { // process voxel_gi_instances
|
||||||
uint index1 = instances.data[instance_index].gi_offset & 0xFFFF;
|
uint index1 = instances.data[instance_index].gi_offset & 0xFFFF;
|
||||||
uint index2 = instances.data[instance_index].gi_offset >> 16;
|
uint index2 = instances.data[instance_index].gi_offset >> 16;
|
||||||
voxel_gi_buffer.x = index1 & 0xFF;
|
voxel_gi_buffer.x = index1 & 0xFFu;
|
||||||
voxel_gi_buffer.y = index2 & 0xFF;
|
voxel_gi_buffer.y = index2 & 0xFFu;
|
||||||
} else {
|
} else {
|
||||||
voxel_gi_buffer.x = 0xFF;
|
voxel_gi_buffer.x = 0xFF;
|
||||||
voxel_gi_buffer.y = 0xFF;
|
voxel_gi_buffer.y = 0xFF;
|
||||||
|
|||||||
@@ -4,14 +4,15 @@
|
|||||||
#define MAX_VOXEL_GI_INSTANCES 8
|
#define MAX_VOXEL_GI_INSTANCES 8
|
||||||
#define MAX_VIEWS 2
|
#define MAX_VIEWS 2
|
||||||
|
|
||||||
|
#ifndef MOLTENVK_USED
|
||||||
#if defined(has_GL_KHR_shader_subgroup_ballot) && defined(has_GL_KHR_shader_subgroup_arithmetic)
|
#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_ballot : enable
|
||||||
#extension GL_KHR_shader_subgroup_arithmetic : enable
|
#extension GL_KHR_shader_subgroup_arithmetic : enable
|
||||||
|
|
||||||
#define USE_SUBGROUPS
|
#define USE_SUBGROUPS
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
#endif // MOLTENVK_USED
|
||||||
|
|
||||||
#if defined(USE_MULTIVIEW) && defined(has_VK_KHR_multiview)
|
#if defined(USE_MULTIVIEW) && defined(has_VK_KHR_multiview)
|
||||||
#extension GL_EXT_multiview : enable
|
#extension GL_EXT_multiview : enable
|
||||||
|
|||||||
Reference in New Issue
Block a user