mirror of https://gitlab.freedesktop.org/mesa/mesa
30 lines
734 B
C
30 lines
734 B
C
/*
|
|
* Copyright 2022 Alyssa Rosenzweig
|
|
* SPDX-License-Identifier: MIT
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "util/format/u_formats.h"
|
|
#include "nir_builder.h"
|
|
#include "nir_format_convert.h"
|
|
|
|
static inline nir_def *
|
|
nir_sign_extend_if_sint(nir_builder *b, nir_def *x, enum pipe_format format)
|
|
{
|
|
if (!util_format_is_pure_sint(format))
|
|
return x;
|
|
|
|
const struct util_format_description *desc = util_format_description(format);
|
|
unsigned bits[4] = {0};
|
|
|
|
for (unsigned i = 0; i < desc->nr_channels; ++i) {
|
|
assert(desc->channel[i].type == UTIL_FORMAT_TYPE_SIGNED ||
|
|
desc->channel[i].type == UTIL_FORMAT_TYPE_VOID);
|
|
|
|
bits[i] = desc->channel[i].size;
|
|
}
|
|
|
|
return nir_format_sign_extend_ivec(b, x, bits);
|
|
}
|