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:
@@ -399,12 +399,13 @@ find_lowerable_rvalues_visitor::visit_enter(ir_expression *ir)
|
|||||||
stack.back().state = CANT_LOWER;
|
stack.back().state = CANT_LOWER;
|
||||||
|
|
||||||
/* Don't lower precision for derivative calculations */
|
/* Don't lower precision for derivative calculations */
|
||||||
if (ir->operation == ir_unop_dFdx ||
|
if (!options->LowerPrecisionDerivatives &&
|
||||||
ir->operation == ir_unop_dFdx_coarse ||
|
(ir->operation == ir_unop_dFdx ||
|
||||||
ir->operation == ir_unop_dFdx_fine ||
|
ir->operation == ir_unop_dFdx_coarse ||
|
||||||
ir->operation == ir_unop_dFdy ||
|
ir->operation == ir_unop_dFdx_fine ||
|
||||||
ir->operation == ir_unop_dFdy_coarse ||
|
ir->operation == ir_unop_dFdy ||
|
||||||
ir->operation == ir_unop_dFdy_fine) {
|
ir->operation == ir_unop_dFdy_coarse ||
|
||||||
|
ir->operation == ir_unop_dFdy_fine)) {
|
||||||
stack.back().state = CANT_LOWER;
|
stack.back().state = CANT_LOWER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -440,6 +440,7 @@ standalone_compile_shader(const struct standalone_options *_options,
|
|||||||
&ctx->Const.ShaderCompilerOptions[i];
|
&ctx->Const.ShaderCompilerOptions[i];
|
||||||
options->LowerPrecisionFloat16 = true;
|
options->LowerPrecisionFloat16 = true;
|
||||||
options->LowerPrecisionInt16 = true;
|
options->LowerPrecisionInt16 = true;
|
||||||
|
options->LowerPrecisionDerivatives = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1035,6 +1035,34 @@ TESTS = [
|
|||||||
}
|
}
|
||||||
""",
|
""",
|
||||||
r'\(expression +uint16_t min'),
|
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'),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@@ -3208,6 +3208,7 @@ struct gl_shader_compiler_options
|
|||||||
*/
|
*/
|
||||||
GLboolean LowerPrecisionFloat16;
|
GLboolean LowerPrecisionFloat16;
|
||||||
GLboolean LowerPrecisionInt16;
|
GLboolean LowerPrecisionInt16;
|
||||||
|
GLboolean LowerPrecisionDerivatives;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \name Forms of indirect addressing the driver cannot do.
|
* \name Forms of indirect addressing the driver cannot do.
|
||||||
|
Reference in New Issue
Block a user