EEVEE-Next: Fix shader compilation on Metal
This commit is contained in:
@@ -60,7 +60,7 @@ OcclusionData ambient_occlusion_unpack_data(vec4 v)
|
||||
|
||||
vec2 ambient_occlusion_get_noise(ivec2 texel)
|
||||
{
|
||||
vec2 noise = utility_tx_fetch(utility_tx, texel, UTIL_BLUE_NOISE_LAYER).xy;
|
||||
vec2 noise = utility_tx_fetch(utility_tx, vec2(texel), UTIL_BLUE_NOISE_LAYER).xy;
|
||||
return fract(noise + sampling_rng_2D_get(SAMPLING_AO_U));
|
||||
}
|
||||
|
||||
|
||||
@@ -11,12 +11,12 @@ vec3 view_position_derivative_from_depth(
|
||||
sampler2D depth_tx, ivec2 extent, vec2 uv, ivec2 offset, vec3 vP, float depth_center)
|
||||
{
|
||||
vec4 H;
|
||||
H.x = texelFetch(depth_tx, ivec2(uv * extent) - offset * 2, 0).r;
|
||||
H.y = texelFetch(depth_tx, ivec2(uv * extent) - offset, 0).r;
|
||||
H.z = texelFetch(depth_tx, ivec2(uv * extent) + offset, 0).r;
|
||||
H.w = texelFetch(depth_tx, ivec2(uv * extent) + offset * 2, 0).r;
|
||||
H.x = texelFetch(depth_tx, ivec2(uv * vec2(extent)) - offset * 2, 0).r;
|
||||
H.y = texelFetch(depth_tx, ivec2(uv * vec2(extent)) - offset, 0).r;
|
||||
H.z = texelFetch(depth_tx, ivec2(uv * vec2(extent)) + offset, 0).r;
|
||||
H.w = texelFetch(depth_tx, ivec2(uv * vec2(extent)) + offset * 2, 0).r;
|
||||
|
||||
vec2 uv_offset = vec2(offset) / extent;
|
||||
vec2 uv_offset = vec2(offset) / vec2(extent);
|
||||
vec2 uv1 = uv - uv_offset * 2.0;
|
||||
vec2 uv2 = uv - uv_offset;
|
||||
vec2 uv3 = uv + uv_offset;
|
||||
@@ -42,7 +42,7 @@ vec3 view_position_derivative_from_depth(
|
||||
bool reconstruct_view_position_and_normal_from_depth(
|
||||
sampler2D depth_tx, ivec2 extent, vec2 uv, out vec3 vP, out vec3 vNg)
|
||||
{
|
||||
float depth_center = texelFetch(depth_tx, ivec2(uv * extent), 0).r;
|
||||
float depth_center = texelFetch(depth_tx, ivec2(uv * vec2(extent)), 0).r;
|
||||
|
||||
vP = get_view_space_from_depth(uv, depth_center);
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ void light_world_eval(ClosureReflection reflection, vec3 P, vec3 V, inout vec3 o
|
||||
/* http://http.developer.nvidia.com/GPUGems3/gpugems3_ch20.html : Equation 13 */
|
||||
/* TODO: lod_factor should be precalculated and stored inside the reflection probe data. */
|
||||
const float bias = 0.0;
|
||||
const float lod_factor = bias + 0.5 * log(float(square_i(texture_size.x))) / log(2);
|
||||
const float lod_factor = bias + 0.5 * log(float(square_i(texture_size.x))) / log(2.0);
|
||||
/* -2: Don't use LOD levels that are smaller than 4x4 pixels. */
|
||||
float lod = clamp(lod_factor - 0.5 * log2(pdf * dist), 0.0, lod_cube_max - 2.0);
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ void main()
|
||||
if (any(greaterThanEqual(octahedral_coord.xy, octahedral_size.xy))) {
|
||||
return;
|
||||
}
|
||||
vec2 octahedral_uv = vec2(octahedral_coord) / vec2(octahedral_size);
|
||||
vec2 octahedral_uv = vec2(octahedral_coord.xy) / vec2(octahedral_size.xy);
|
||||
vec3 R = octahedral_uv_to_direction(octahedral_uv);
|
||||
|
||||
vec4 col = textureLod(cubemap_tx, R, 0.0);
|
||||
|
||||
@@ -1464,6 +1464,9 @@ bool MTLShader::generate_msl_from_glsl_compute(const shader::ShaderCreateInfo *i
|
||||
/** Generate Compute shader stage. **/
|
||||
std::stringstream ss_compute;
|
||||
|
||||
ss_compute << "#define GPU_ARB_texture_cube_map_array 1\n"
|
||||
"#define GPU_ARB_shader_draw_parameters 1\n";
|
||||
|
||||
#ifndef NDEBUG
|
||||
extract_global_scope_constants(shd_builder_->glsl_compute_source_, ss_compute);
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user