pan/bit: Add 16-bit fmod tests
These raise another set of issues -- indeed, not all of these tests are passing, since it turns out I have an actual bug in the packing code. So after all this work, test bringup has identified an actual issue :) Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4458>
This commit is contained in:
committed by
Marge Bot
parent
40160c576d
commit
78ba6d50a4
@@ -167,7 +167,7 @@ bit_generate_vector(uint32_t *mem)
|
||||
/* Tests all 64 combinations of floating point modifiers for a given
|
||||
* instruction / floating-type / test type */
|
||||
|
||||
void
|
||||
static void
|
||||
bit_fmod_helper(struct panfrost_device *dev,
|
||||
enum bi_class c, unsigned size, bool fma,
|
||||
uint32_t *input, enum bit_debug debug)
|
||||
@@ -193,6 +193,10 @@ bit_fmod_helper(struct panfrost_device *dev,
|
||||
ins.src_neg[0] = (inmod & 0x4);
|
||||
ins.src_neg[1] = (inmod & 0x8);
|
||||
|
||||
/* Skip over tests that cannot run on FMA */
|
||||
if (fma && (size == 16) && ins.src_abs[0] && ins.src_abs[1])
|
||||
continue;
|
||||
|
||||
if (!bit_test_single(dev, &ins, input, fma, debug)) {
|
||||
fprintf(stderr, "FAIL: fmod.%s%u.%s%s.%u\n",
|
||||
bi_class_name(c),
|
||||
@@ -204,3 +208,23 @@ bit_fmod_helper(struct panfrost_device *dev,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
bit_fmod(struct panfrost_device *dev, enum bit_debug debug)
|
||||
{
|
||||
float input32[4] = { 0.8, 1.7, 0.0, 0.0 };
|
||||
|
||||
uint32_t input16[4] = {
|
||||
_mesa_float_to_half(input32[0]) | (_mesa_float_to_half(-1.2) << 16),
|
||||
_mesa_float_to_half(input32[1]) | (_mesa_float_to_half(0.9) << 16),
|
||||
0, 0
|
||||
};
|
||||
|
||||
for (unsigned sz = 16; sz <= 32; sz *= 2) {
|
||||
uint32_t *input =
|
||||
(sz == 16) ? input16 :
|
||||
(uint32_t *) input32;
|
||||
|
||||
bit_fmod_helper(dev, BI_ADD, sz, true, input, debug);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -70,9 +70,7 @@ bit_step(struct bit_state *s, bi_instruction *ins, bool FMA);
|
||||
/* Packing tests */
|
||||
|
||||
void
|
||||
bit_fmod_helper(struct panfrost_device *dev,
|
||||
enum bi_class c, unsigned size, bool fma,
|
||||
uint32_t *input, enum bit_debug debug);
|
||||
bit_fmod(struct panfrost_device *dev, enum bit_debug debug);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user