mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 16:08:04 +02:00
nir/builder: Handle f2b conversions specially in nir_type_convert
No shader-db or fossil-db changes on any Intel platform. Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20509>
This commit is contained in:
parent
b265020b82
commit
024122c069
1 changed files with 21 additions and 10 deletions
|
|
@ -552,21 +552,32 @@ nir_type_convert(nir_builder *b,
|
|||
const nir_alu_type src_base =
|
||||
(nir_alu_type) nir_alu_type_get_base_type(src_type);
|
||||
|
||||
/* b2b and f2b use the regular type conversion path, but i2b is implemented
|
||||
* as src != 0.
|
||||
/* b2b uses the regular type conversion path, but i2b and f2b are
|
||||
* implemented as src != 0.
|
||||
*/
|
||||
if (dst_base == nir_type_bool && (src_base == nir_type_int ||
|
||||
src_base == nir_type_uint)) {
|
||||
if (dst_base == nir_type_bool && src_base != nir_type_bool) {
|
||||
nir_op opcode;
|
||||
|
||||
const unsigned dst_bit_size = nir_alu_type_get_type_size(dest_type);
|
||||
|
||||
switch (dst_bit_size) {
|
||||
case 1: opcode = nir_op_ine; break;
|
||||
case 8: opcode = nir_op_ine8; break;
|
||||
case 16: opcode = nir_op_ine16; break;
|
||||
case 32: opcode = nir_op_ine32; break;
|
||||
default: unreachable("Invalid Boolean size.");
|
||||
if (src_base == nir_type_float) {
|
||||
switch (dst_bit_size) {
|
||||
case 1: opcode = nir_op_fneu; break;
|
||||
case 8: opcode = nir_op_fneu8; break;
|
||||
case 16: opcode = nir_op_fneu16; break;
|
||||
case 32: opcode = nir_op_fneu32; break;
|
||||
default: unreachable("Invalid Boolean size.");
|
||||
}
|
||||
} else {
|
||||
assert(src_base == nir_type_int || src_base == nir_type_uint);
|
||||
|
||||
switch (dst_bit_size) {
|
||||
case 1: opcode = nir_op_ine; break;
|
||||
case 8: opcode = nir_op_ine8; break;
|
||||
case 16: opcode = nir_op_ine16; break;
|
||||
case 32: opcode = nir_op_ine32; break;
|
||||
default: unreachable("Invalid Boolean size.");
|
||||
}
|
||||
}
|
||||
|
||||
return nir_build_alu(b, opcode, src,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue