mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 13:00:09 +01:00
llvmpipe: fix denorm handling for r11g11b10_float format when blending
The code re-enabling denorms for small float formats did not recognize this format due to format handling hacks (mainly, the lp_type doesn't have the floating bit set). Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
This commit is contained in:
parent
606544214e
commit
1d53603f1f
1 changed files with 15 additions and 2 deletions
|
|
@ -1089,6 +1089,19 @@ scale_bits(struct gallivm_state *gallivm,
|
|||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* If RT is a smallfloat (needing denorms) format
|
||||
*/
|
||||
static INLINE int
|
||||
have_smallfloat_format(struct lp_type dst_type,
|
||||
enum pipe_format format)
|
||||
{
|
||||
return ((dst_type.floating && dst_type.width != 32) ||
|
||||
/* due to format handling hacks this format doesn't have floating set
|
||||
* here (and actually has width set to 32 too) so special case this. */
|
||||
(format == PIPE_FORMAT_R11G11B10_FLOAT));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Convert from memory format to blending format
|
||||
|
|
@ -1593,7 +1606,7 @@ generate_unswizzled_blend(struct gallivm_state *gallivm,
|
|||
* this, otherwise half-float format conversions won't work
|
||||
* (again due to llvm bug #6393).
|
||||
*/
|
||||
if (dst_type.floating && dst_type.width != 32) {
|
||||
if (have_smallfloat_format(dst_type, out_format)) {
|
||||
/* We need to make sure that denorms are ok for half float
|
||||
conversions */
|
||||
fpstate = lp_build_fpstate_get(gallivm);
|
||||
|
|
@ -2091,7 +2104,7 @@ generate_unswizzled_blend(struct gallivm_state *gallivm,
|
|||
dst, dst_type, dst_count, dst_alignment);
|
||||
}
|
||||
|
||||
if (dst_type.floating && dst_type.width != 32) {
|
||||
if (have_smallfloat_format(dst_type, out_format)) {
|
||||
lp_build_fpstate_set(gallivm, fpstate);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue