From 5b4e94630be452cdbb662940c3cf637f9dccfade Mon Sep 17 00:00:00 2001 From: teoxoy <28601907+teoxoy@users.noreply.github.com> Date: Fri, 6 Jan 2023 16:34:23 +0100 Subject: [PATCH] [glsl-out] use `fma` polyfill for versions below gles 320 --- src/back/glsl/features.rs | 19 ++++--------------- src/back/glsl/mod.rs | 2 +- tests/in/functions-webgl.param.ron | 2 +- .../out/glsl/functions-webgl.main.Vertex.glsl | 4 ++-- tests/out/glsl/functions.main.Compute.glsl | 3 +-- 5 files changed, 9 insertions(+), 21 deletions(-) diff --git a/src/back/glsl/features.rs b/src/back/glsl/features.rs index b898b1d2b3..ca292364fe 100644 --- a/src/back/glsl/features.rs +++ b/src/back/glsl/features.rs @@ -1,7 +1,7 @@ use super::{BackendResult, Error, Version, Writer}; use crate::{ AddressSpace, Binding, Bytes, Expression, Handle, ImageClass, ImageDimension, Interpolation, - MathFunction, Sampling, ScalarKind, ShaderStage, StorageFormat, Type, TypeInner, + Sampling, ScalarKind, ShaderStage, StorageFormat, Type, TypeInner, }; use std::fmt::Write; @@ -34,14 +34,12 @@ bitflags::bitflags! { /// Arrays with a dynamic length. const DYNAMIC_ARRAY_SIZE = 1 << 16; const MULTI_VIEW = 1 << 17; - /// Fused multiply-add. - const FMA = 1 << 18; /// Texture samples query - const TEXTURE_SAMPLES = 1 << 19; + const TEXTURE_SAMPLES = 1 << 18; /// Texture levels query - const TEXTURE_LEVELS = 1 << 20; + const TEXTURE_LEVELS = 1 << 19; /// Image size query - const IMAGE_SIZE = 1 << 21; + const IMAGE_SIZE = 1 << 20; } } @@ -224,11 +222,6 @@ impl FeaturesManager { } } - if self.0.contains(Features::FMA) && version >= Version::new_gles(310) { - // https://www.khronos.org/registry/OpenGL/extensions/EXT/EXT_gpu_shader5.txt - writeln!(out, "#extension GL_EXT_gpu_shader5 : require")?; - } - if self.0.contains(Features::TEXTURE_SAMPLES) { // https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_shader_texture_image_samples.txt writeln!( @@ -425,10 +418,6 @@ impl<'a, W> Writer<'a, W> { { for (_, expr) in expressions.iter() { match *expr { - // Check for fused multiply add use - Expression::Math { fun, .. } if fun == MathFunction::Fma => { - features.request(Features::FMA) - } // Check for queries that neeed aditonal features Expression::ImageQuery { image, diff --git a/src/back/glsl/mod.rs b/src/back/glsl/mod.rs index 3c750d8d8e..5a7d4d12a2 100644 --- a/src/back/glsl/mod.rs +++ b/src/back/glsl/mod.rs @@ -179,7 +179,7 @@ impl Version { } fn supports_fma_function(&self) -> bool { - *self >= Version::Desktop(400) || *self >= Version::new_gles(310) + *self >= Version::Desktop(400) || *self >= Version::new_gles(320) } } diff --git a/tests/in/functions-webgl.param.ron b/tests/in/functions-webgl.param.ron index 923da07299..8ac016ad21 100644 --- a/tests/in/functions-webgl.param.ron +++ b/tests/in/functions-webgl.param.ron @@ -1,7 +1,7 @@ ( glsl: ( version: Embedded( - version: 300, + version: 320, is_webgl: false ), writer_flags: (bits: 0), diff --git a/tests/out/glsl/functions-webgl.main.Vertex.glsl b/tests/out/glsl/functions-webgl.main.Vertex.glsl index 3522f1a655..9dd084c32a 100644 --- a/tests/out/glsl/functions-webgl.main.Vertex.glsl +++ b/tests/out/glsl/functions-webgl.main.Vertex.glsl @@ -1,4 +1,4 @@ -#version 300 es +#version 320 es precision highp float; precision highp int; @@ -8,7 +8,7 @@ vec2 test_fma() { vec2 a = vec2(2.0, 2.0); vec2 b = vec2(0.5, 0.5); vec2 c = vec2(0.5, 0.5); - return (a * b + c); + return fma(a, b, c); } void main() { diff --git a/tests/out/glsl/functions.main.Compute.glsl b/tests/out/glsl/functions.main.Compute.glsl index 07e4e7cdea..b0f23125f7 100644 --- a/tests/out/glsl/functions.main.Compute.glsl +++ b/tests/out/glsl/functions.main.Compute.glsl @@ -1,5 +1,4 @@ #version 310 es -#extension GL_EXT_gpu_shader5 : require precision highp float; precision highp int; @@ -11,7 +10,7 @@ vec2 test_fma() { vec2 a = vec2(2.0, 2.0); vec2 b = vec2(0.5, 0.5); vec2 c = vec2(0.5, 0.5); - return fma(a, b, c); + return (a * b + c); } int test_integer_dot_product() {