[Mesa-dev] [PATCH 1/2] softpipe: fix 32-bit bitfield extract
Dave Airlie
airlied at gmail.com
Thu Mar 21 04:16:30 UTC 2019
From: Dave Airlie <airlied at redhat.com>
These didn't deal with the width == 32 case that TGSI is defined with.
Fixes piglit tests if ARB_gpu_shader5 is enabled.
---
src/gallium/auxiliary/tgsi/tgsi_exec.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/src/gallium/auxiliary/tgsi/tgsi_exec.c b/src/gallium/auxiliary/tgsi/tgsi_exec.c
index e1181aa1932..c93e4e26e40 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_exec.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_exec.c
@@ -4944,8 +4944,13 @@ micro_ibfe(union tgsi_exec_channel *dst,
{
int i;
for (i = 0; i < 4; i++) {
- int width = src2->i[i] & 0x1f;
+ int width = src2->i[i];
int offset = src1->i[i] & 0x1f;
+ if (width == 32 && offset == 0) {
+ dst->i[i] = src0->i[i];
+ continue;
+ }
+ width &= 0x1f;
if (width == 0)
dst->i[i] = 0;
else if (width + offset < 32)
@@ -4966,8 +4971,13 @@ micro_ubfe(union tgsi_exec_channel *dst,
{
int i;
for (i = 0; i < 4; i++) {
- int width = src2->u[i] & 0x1f;
+ int width = src2->u[i];
int offset = src1->u[i] & 0x1f;
+ if (width == 32 && offset == 0) {
+ dst->u[i] = src0->u[i];
+ continue;
+ }
+ width &= 0x1f;
if (width == 0)
dst->u[i] = 0;
else if (width + offset < 32)
--
2.20.1
More information about the mesa-dev
mailing list