mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 08:40:11 +01:00
gallivm: Handle invalid image format/op combinations
Reviewed-by: Dave Airlie <airlied@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23515>
This commit is contained in:
parent
1841dd7549
commit
a2159dfe8a
1 changed files with 35 additions and 3 deletions
|
|
@ -4650,9 +4650,41 @@ lp_build_do_atomic_soa(struct gallivm_state *gallivm,
|
|||
{
|
||||
const enum pipe_format format = format_desc->format;
|
||||
|
||||
if (format != PIPE_FORMAT_R32_UINT &&
|
||||
format != PIPE_FORMAT_R32_SINT &&
|
||||
format != PIPE_FORMAT_R32_FLOAT) {
|
||||
bool valid = format == PIPE_FORMAT_R32_UINT ||
|
||||
format == PIPE_FORMAT_R32_SINT ||
|
||||
format == PIPE_FORMAT_R32_FLOAT;
|
||||
|
||||
bool integer = format != PIPE_FORMAT_R32_FLOAT;
|
||||
if (img_op == LP_IMG_ATOMIC) {
|
||||
switch (op) {
|
||||
case LLVMAtomicRMWBinOpAdd:
|
||||
case LLVMAtomicRMWBinOpSub:
|
||||
case LLVMAtomicRMWBinOpAnd:
|
||||
case LLVMAtomicRMWBinOpNand:
|
||||
case LLVMAtomicRMWBinOpOr:
|
||||
case LLVMAtomicRMWBinOpXor:
|
||||
case LLVMAtomicRMWBinOpMax:
|
||||
case LLVMAtomicRMWBinOpMin:
|
||||
case LLVMAtomicRMWBinOpUMax:
|
||||
case LLVMAtomicRMWBinOpUMin:
|
||||
valid &= integer;
|
||||
break;
|
||||
case LLVMAtomicRMWBinOpFAdd:
|
||||
case LLVMAtomicRMWBinOpFSub:
|
||||
#if LLVM_VERSION_MAJOR >= 15
|
||||
case LLVMAtomicRMWBinOpFMax:
|
||||
case LLVMAtomicRMWBinOpFMin:
|
||||
#endif
|
||||
valid &= !integer;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
valid &= integer;
|
||||
}
|
||||
|
||||
if (!valid) {
|
||||
atomic_result[0] = lp_build_zero(gallivm, type);
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue