glsl: lower mediump partial derivatives

Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Reviewed-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5002>
This commit is contained in:
Marek Olšák 2020-05-09 21:38:34 -04:00 committed by Marge Bot
parent 6fe20ebaaa
commit 1192989533
4 changed files with 37 additions and 6 deletions

View File

@ -399,12 +399,13 @@ find_lowerable_rvalues_visitor::visit_enter(ir_expression *ir)
stack.back().state = CANT_LOWER;
/* Don't lower precision for derivative calculations */
if (ir->operation == ir_unop_dFdx ||
ir->operation == ir_unop_dFdx_coarse ||
ir->operation == ir_unop_dFdx_fine ||
ir->operation == ir_unop_dFdy ||
ir->operation == ir_unop_dFdy_coarse ||
ir->operation == ir_unop_dFdy_fine) {
if (!options->LowerPrecisionDerivatives &&
(ir->operation == ir_unop_dFdx ||
ir->operation == ir_unop_dFdx_coarse ||
ir->operation == ir_unop_dFdx_fine ||
ir->operation == ir_unop_dFdy ||
ir->operation == ir_unop_dFdy_coarse ||
ir->operation == ir_unop_dFdy_fine)) {
stack.back().state = CANT_LOWER;
}

View File

@ -440,6 +440,7 @@ standalone_compile_shader(const struct standalone_options *_options,
&ctx->Const.ShaderCompilerOptions[i];
options->LowerPrecisionFloat16 = true;
options->LowerPrecisionInt16 = true;
options->LowerPrecisionDerivatives = true;
}
}

View File

@ -1035,6 +1035,34 @@ TESTS = [
}
""",
r'\(expression +uint16_t min'),
Test("dFdx",
"""
#version 300 es
precision mediump float;
in vec4 var;
out vec4 color;
void main()
{
color = dFdx(var);
}
""",
r'\(expression +f16vec4 +dFdx +\(expression +f16vec4'),
Test("dFdy",
"""
#version 300 es
precision mediump float;
in vec4 var;
out vec4 color;
void main()
{
color = dFdy(var);
}
""",
r'\(expression +f16vec4 +dFdy +\(expression +f16vec4'),
]

View File

@ -3208,6 +3208,7 @@ struct gl_shader_compiler_options
*/
GLboolean LowerPrecisionFloat16;
GLboolean LowerPrecisionInt16;
GLboolean LowerPrecisionDerivatives;
/**
* \name Forms of indirect addressing the driver cannot do.