Change RGB32k to a union of BYTE[32][32][32] and BYTE[32*32*32]

- Clang's optional runtime array bounds checking doesn't understand when we
  intentionally "overflow" by doing this:
    RGB32k[0][0][colorval]
  It will warn that it was accessed at an index will past the bounds
  of type 'BYTE [32]', which makes it less than useful for catching real
  array bounds overflows. So now do this:
    RGB32k.All[colorval]
  And if you want this:
    RGB32k[r][g][b]
  Now do this:
    RGB32k.RGB[r][g][b]
This commit is contained in:
Randy Heit 2015-03-08 18:05:02 -05:00
commit e259087c19
13 changed files with 88 additions and 77 deletions

View file

@ -270,7 +270,7 @@ void R_FillAddColumn (void)
{
DWORD bg;
bg = (fg + bg2rgb[*dest]) | 0x1f07c1f;
*dest = RGB32k[0][0][bg & (bg>>15)];
*dest = RGB32k.All[bg & (bg>>15)];
dest += pitch;
} while (--count);
@ -303,7 +303,7 @@ void R_FillAddClampColumn (void)
a &= 0x3fffffff;
b = b - (b >> 5);
a |= b;
*dest = RGB32k[0][0][a & (a>>15)];
*dest = RGB32k.All[a & (a>>15)];
dest += pitch;
} while (--count);
@ -335,7 +335,7 @@ void R_FillSubClampColumn (void)
b = b - (b >> 5);
a &= b;
a |= 0x01f07c1f;
*dest = RGB32k[0][0][a & (a>>15)];
*dest = RGB32k.All[a & (a>>15)];
dest += pitch;
} while (--count);
@ -367,7 +367,7 @@ void R_FillRevSubClampColumn (void)
b = b - (b >> 5);
a &= b;
a |= 0x01f07c1f;
*dest = RGB32k[0][0][a & (a>>15)];
*dest = RGB32k.All[a & (a>>15)];
dest += pitch;
} while (--count);
@ -569,7 +569,7 @@ void R_DrawAddColumnP_C (void)
fg = fg2rgb[fg];
bg = bg2rgb[bg];
fg = (fg+bg) | 0x1f07c1f;
*dest = RGB32k[0][0][fg & (fg>>15)];
*dest = RGB32k.All[fg & (fg>>15)];
dest += pitch;
frac += fracstep;
} while (--count);
@ -650,7 +650,7 @@ void R_DrawTlatedAddColumnP_C (void)
fg = fg2rgb[fg];
bg = bg2rgb[bg];
fg = (fg+bg) | 0x1f07c1f;
*dest = RGB32k[0][0][fg & (fg>>15)];
*dest = RGB32k.All[fg & (fg>>15)];
dest += pitch;
frac += fracstep;
} while (--count);
@ -686,7 +686,7 @@ void R_DrawShadedColumnP_C (void)
DWORD val = colormap[source[frac>>FRACBITS]];
DWORD fg = fgstart[val<<8];
val = (Col2RGB8[64-val][*dest] + fg) | 0x1f07c1f;
*dest = RGB32k[0][0][val & (val>>15)];
*dest = RGB32k.All[val & (val>>15)];
dest += pitch;
frac += fracstep;
@ -728,7 +728,7 @@ void R_DrawAddClampColumnP_C ()
a &= 0x3fffffff;
b = b - (b >> 5);
a |= b;
*dest = RGB32k[0][0][a & (a>>15)];
*dest = RGB32k.All[a & (a>>15)];
dest += pitch;
frac += fracstep;
} while (--count);
@ -770,7 +770,7 @@ void R_DrawAddClampTranslatedColumnP_C ()
a &= 0x3fffffff;
b = b - (b >> 5);
a |= b;
*dest = RGB32k[0][0][(a>>15) & a];
*dest = RGB32k.All[(a>>15) & a];
dest += pitch;
frac += fracstep;
} while (--count);
@ -810,7 +810,7 @@ void R_DrawSubClampColumnP_C ()
b = b - (b >> 5);
a &= b;
a |= 0x01f07c1f;
*dest = RGB32k[0][0][a & (a>>15)];
*dest = RGB32k.All[a & (a>>15)];
dest += pitch;
frac += fracstep;
} while (--count);
@ -851,7 +851,7 @@ void R_DrawSubClampTranslatedColumnP_C ()
b = b - (b >> 5);
a &= b;
a |= 0x01f07c1f;
*dest = RGB32k[0][0][(a>>15) & a];
*dest = RGB32k.All[(a>>15) & a];
dest += pitch;
frac += fracstep;
} while (--count);
@ -891,7 +891,7 @@ void R_DrawRevSubClampColumnP_C ()
b = b - (b >> 5);
a &= b;
a |= 0x01f07c1f;
*dest = RGB32k[0][0][a & (a>>15)];
*dest = RGB32k.All[a & (a>>15)];
dest += pitch;
frac += fracstep;
} while (--count);
@ -932,7 +932,7 @@ void R_DrawRevSubClampTranslatedColumnP_C ()
b = b - (b >> 5);
a &= b;
a |= 0x01f07c1f;
*dest = RGB32k[0][0][(a>>15) & a];
*dest = RGB32k.All[(a>>15) & a];
dest += pitch;
frac += fracstep;
} while (--count);
@ -1227,7 +1227,7 @@ void R_DrawSpanTranslucentP_C (void)
fg = fg2rgb[fg];
bg = bg2rgb[bg];
fg = (fg+bg) | 0x1f07c1f;
*dest++ = RGB32k[0][0][fg & (fg>>15)];
*dest++ = RGB32k.All[fg & (fg>>15)];
xfrac += xstep;
yfrac += ystep;
} while (--count);
@ -1245,7 +1245,7 @@ void R_DrawSpanTranslucentP_C (void)
fg = fg2rgb[fg];
bg = bg2rgb[bg];
fg = (fg+bg) | 0x1f07c1f;
*dest++ = RGB32k[0][0][fg & (fg>>15)];
*dest++ = RGB32k.All[fg & (fg>>15)];
xfrac += xstep;
yfrac += ystep;
} while (--count);
@ -1292,7 +1292,7 @@ void R_DrawSpanMaskedTranslucentP_C (void)
fg = fg2rgb[fg];
bg = bg2rgb[bg];
fg = (fg+bg) | 0x1f07c1f;
*dest = RGB32k[0][0][fg & (fg>>15)];
*dest = RGB32k.All[fg & (fg>>15)];
}
dest++;
xfrac += xstep;
@ -1317,7 +1317,7 @@ void R_DrawSpanMaskedTranslucentP_C (void)
fg = fg2rgb[fg];
bg = bg2rgb[bg];
fg = (fg+bg) | 0x1f07c1f;
*dest = RGB32k[0][0][fg & (fg>>15)];
*dest = RGB32k.All[fg & (fg>>15)];
}
dest++;
xfrac += xstep;
@ -1364,7 +1364,7 @@ void R_DrawSpanAddClampP_C (void)
a &= 0x3fffffff;
b = b - (b >> 5);
a |= b;
*dest++ = RGB32k[0][0][a & (a>>15)];
*dest++ = RGB32k.All[a & (a>>15)];
xfrac += xstep;
yfrac += ystep;
} while (--count);
@ -1385,7 +1385,7 @@ void R_DrawSpanAddClampP_C (void)
a &= 0x3fffffff;
b = b - (b >> 5);
a |= b;
*dest++ = RGB32k[0][0][a & (a>>15)];
*dest++ = RGB32k.All[a & (a>>15)];
xfrac += xstep;
yfrac += ystep;
} while (--count);
@ -1435,7 +1435,7 @@ void R_DrawSpanMaskedAddClampP_C (void)
a &= 0x3fffffff;
b = b - (b >> 5);
a |= b;
*dest = RGB32k[0][0][a & (a>>15)];
*dest = RGB32k.All[a & (a>>15)];
}
dest++;
xfrac += xstep;
@ -1463,7 +1463,7 @@ void R_DrawSpanMaskedAddClampP_C (void)
a &= 0x3fffffff;
b = b - (b >> 5);
a |= b;
*dest = RGB32k[0][0][a & (a>>15)];
*dest = RGB32k.All[a & (a>>15)];
}
dest++;
xfrac += xstep;
@ -1908,7 +1908,7 @@ fixed_t tmvline1_add ()
DWORD fg = fg2rgb[colormap[pix]];
DWORD bg = bg2rgb[*dest];
fg = (fg+bg) | 0x1f07c1f;
*dest = RGB32k[0][0][fg & (fg>>15)];
*dest = RGB32k.All[fg & (fg>>15)];
}
frac += fracstep;
dest += pitch;
@ -1936,7 +1936,7 @@ void tmvline4_add ()
DWORD fg = fg2rgb[palookupoffse[i][pix]];
DWORD bg = bg2rgb[dest[i]];
fg = (fg+bg) | 0x1f07c1f;
dest[i] = RGB32k[0][0][fg & (fg>>15)];
dest[i] = RGB32k.All[fg & (fg>>15)];
}
vplce[i] += vince[i];
}
@ -1971,7 +1971,7 @@ fixed_t tmvline1_addclamp ()
a &= 0x3fffffff;
b = b - (b >> 5);
a |= b;
*dest = RGB32k[0][0][a & (a>>15)];
*dest = RGB32k.All[a & (a>>15)];
}
frac += fracstep;
dest += pitch;
@ -2004,7 +2004,7 @@ void tmvline4_addclamp ()
a &= 0x3fffffff;
b = b - (b >> 5);
a |= b;
dest[i] = RGB32k[0][0][a & (a>>15)];
dest[i] = RGB32k.All[a & (a>>15)];
}
vplce[i] += vince[i];
}
@ -2038,7 +2038,7 @@ fixed_t tmvline1_subclamp ()
b = b - (b >> 5);
a &= b;
a |= 0x01f07c1f;
*dest = RGB32k[0][0][a & (a>>15)];
*dest = RGB32k.All[a & (a>>15)];
}
frac += fracstep;
dest += pitch;
@ -2070,7 +2070,7 @@ void tmvline4_subclamp ()
b = b - (b >> 5);
a &= b;
a |= 0x01f07c1f;
dest[i] = RGB32k[0][0][a & (a>>15)];
dest[i] = RGB32k.All[a & (a>>15)];
}
vplce[i] += vince[i];
}
@ -2104,7 +2104,7 @@ fixed_t tmvline1_revsubclamp ()
b = b - (b >> 5);
a &= b;
a |= 0x01f07c1f;
*dest = RGB32k[0][0][a & (a>>15)];
*dest = RGB32k.All[a & (a>>15)];
}
frac += fracstep;
dest += pitch;
@ -2136,7 +2136,7 @@ void tmvline4_revsubclamp ()
b = b - (b >> 5);
a &= b;
a |= 0x01f07c1f;
dest[i] = RGB32k[0][0][a & (a>>15)];
dest[i] = RGB32k.All[a & (a>>15)];
}
vplce[i] += vince[i];
}
@ -2421,7 +2421,7 @@ ESPSResult R_SetPatchStyle (FRenderStyle style, fixed_t alpha, int translation,
int g = GPART(color);
int b = BPART(color);
// dc_color is used by the rt_* routines. It is indexed into dc_srcblend.
dc_color = RGB32k[r>>3][g>>3][b>>3];
dc_color = RGB32k.RGB[r>>3][g>>3][b>>3];
if (style.Flags & STYLEF_InvertSource)
{
r = 255 - r;