projects
/
mesa.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
nir: Switch to using 1-bit Booleans for almost everything
[mesa.git]
/
src
/
compiler
/
spirv
/
spirv_to_nir.c
diff --git
a/src/compiler/spirv/spirv_to_nir.c
b/src/compiler/spirv/spirv_to_nir.c
index a05c4d236cad935d675ece3ccc27478d72b14105..7dc6bc914d6f9374440702959f9d0f54e5758fb1 100644
(file)
--- a/
src/compiler/spirv/spirv_to_nir.c
+++ b/
src/compiler/spirv/spirv_to_nir.c
@@
-1468,7
+1468,7
@@
vtn_handle_constant(struct vtn_builder *b, SpvOp opcode,
opcode == SpvOpSpecConstantFalse)
int_val = get_specialization(b, val, int_val);
opcode == SpvOpSpecConstantFalse)
int_val = get_specialization(b, val, int_val);
- val->constant->values[0].
u32[0] = int_val ? NIR_TRUE : NIR_FALSE
;
+ val->constant->values[0].
b[0] = int_val != 0
;
break;
}
break;
}
@@
-1561,6
+1561,9
@@
vtn_handle_constant(struct vtn_builder *b, SpvOp opcode,
case 8:
val->constant->values[0].u8[i] = elems[i]->values[0].u8[0];
break;
case 8:
val->constant->values[0].u8[i] = elems[i]->values[0].u8[0];
break;
+ case 1:
+ val->constant->values[0].b[i] = elems[i]->values[0].b[0];
+ break;
default:
vtn_fail("Invalid SpvOpConstantComposite bit size");
}
default:
vtn_fail("Invalid SpvOpConstantComposite bit size");
}
@@
-1734,6
+1737,9
@@
vtn_handle_constant(struct vtn_builder *b, SpvOp opcode,
case 8:
val->constant->values[0].u8[i] = (*c)->values[col].u8[elem + i];
break;
case 8:
val->constant->values[0].u8[i] = (*c)->values[col].u8[elem + i];
break;
+ case 1:
+ val->constant->values[0].b[i] = (*c)->values[col].b[elem + i];
+ break;
default:
vtn_fail("Invalid SpvOpCompositeExtract bit size");
}
default:
vtn_fail("Invalid SpvOpCompositeExtract bit size");
}
@@
-1761,6
+1767,9
@@
vtn_handle_constant(struct vtn_builder *b, SpvOp opcode,
case 8:
(*c)->values[col].u8[elem + i] = insert->constant->values[0].u8[i];
break;
case 8:
(*c)->values[col].u8[elem + i] = insert->constant->values[0].u8[i];
break;
+ case 1:
+ (*c)->values[col].b[elem + i] = insert->constant->values[0].b[i];
+ break;
default:
vtn_fail("Invalid SpvOpCompositeInsert bit size");
}
default:
vtn_fail("Invalid SpvOpCompositeInsert bit size");
}
@@
-2174,6
+2183,13
@@
vtn_handle_texture(struct vtn_builder *b, SpvOp opcode,
texop = nir_texop_txf_ms;
(*p++) = vtn_tex_src(b, w[idx++], nir_tex_src_ms_index);
}
texop = nir_texop_txf_ms;
(*p++) = vtn_tex_src(b, w[idx++], nir_tex_src_ms_index);
}
+
+ if (operands & SpvImageOperandsMinLodMask) {
+ vtn_assert(texop == nir_texop_tex ||
+ texop == nir_texop_txb ||
+ texop == nir_texop_txd);
+ (*p++) = vtn_tex_src(b, w[idx++], nir_tex_src_min_lod);
+ }
}
/* We should have now consumed exactly all of the arguments */
vtn_assert(idx == count);
}
/* We should have now consumed exactly all of the arguments */
vtn_assert(idx == count);
@@
-3416,15
+3432,17
@@
vtn_handle_preamble_instruction(struct vtn_builder *b, SpvOp opcode,
case SpvCapabilityVector16:
case SpvCapabilityFloat16Buffer:
case SpvCapabilityFloat16:
case SpvCapabilityVector16:
case SpvCapabilityFloat16Buffer:
case SpvCapabilityFloat16:
- case SpvCapabilityInt64Atomics:
case SpvCapabilityStorageImageMultisample:
case SpvCapabilityInt8:
case SpvCapabilitySparseResidency:
case SpvCapabilityStorageImageMultisample:
case SpvCapabilityInt8:
case SpvCapabilitySparseResidency:
- case SpvCapabilityMinLod:
vtn_warn("Unsupported SPIR-V capability: %s",
spirv_capability_to_string(cap));
break;
vtn_warn("Unsupported SPIR-V capability: %s",
spirv_capability_to_string(cap));
break;
+ case SpvCapabilityMinLod:
+ spv_check_supported(min_lod, cap);
+ break;
+
case SpvCapabilityAtomicStorage:
spv_check_supported(atomic_storage, cap);
break;
case SpvCapabilityAtomicStorage:
spv_check_supported(atomic_storage, cap);
break;
@@
-3447,6
+3465,10
@@
vtn_handle_preamble_instruction(struct vtn_builder *b, SpvOp opcode,
spv_check_supported(geometry_streams, cap);
break;
spv_check_supported(geometry_streams, cap);
break;
+ case SpvCapabilityInt64Atomics:
+ spv_check_supported(int64_atomics, cap);
+ break;
+
case SpvCapabilityAddresses:
case SpvCapabilityKernel:
case SpvCapabilityImageBasic:
case SpvCapabilityAddresses:
case SpvCapabilityKernel:
case SpvCapabilityImageBasic: