mirror of
https://github.com/ZDoom/qzdoom-gpl.git
synced 2024-12-11 12:51:27 +00:00
Fix missing colormap lookup
This commit is contained in:
parent
a6d696bbfd
commit
5ae8e9e8c2
3 changed files with 106 additions and 99 deletions
|
@ -2793,24 +2793,19 @@ bool R_GetTransMaskDrawers (fixed_t (**tmvline1)(), void (**tmvline4)())
|
||||||
void R_SetTranslationMap(lighttable_t *translation)
|
void R_SetTranslationMap(lighttable_t *translation)
|
||||||
{
|
{
|
||||||
dc_fcolormap = nullptr;
|
dc_fcolormap = nullptr;
|
||||||
dc_shade_constants.light_red = 256;
|
dc_colormap = translation;
|
||||||
dc_shade_constants.light_green = 256;
|
|
||||||
dc_shade_constants.light_blue = 256;
|
|
||||||
dc_shade_constants.light_alpha = 256;
|
|
||||||
dc_shade_constants.fade_red = 0;
|
|
||||||
dc_shade_constants.fade_green = 0;
|
|
||||||
dc_shade_constants.fade_blue = 0;
|
|
||||||
dc_shade_constants.fade_alpha = 256;
|
|
||||||
dc_shade_constants.desaturate = 0;
|
|
||||||
dc_shade_constants.simple_shade = true;
|
|
||||||
if (r_swtruecolor)
|
if (r_swtruecolor)
|
||||||
{
|
{
|
||||||
dc_colormap = translation;
|
dc_shade_constants.light_red = 256;
|
||||||
dc_light = 0;
|
dc_shade_constants.light_green = 256;
|
||||||
}
|
dc_shade_constants.light_blue = 256;
|
||||||
else
|
dc_shade_constants.light_alpha = 256;
|
||||||
{
|
dc_shade_constants.fade_red = 0;
|
||||||
dc_colormap = translation;
|
dc_shade_constants.fade_green = 0;
|
||||||
|
dc_shade_constants.fade_blue = 0;
|
||||||
|
dc_shade_constants.fade_alpha = 256;
|
||||||
|
dc_shade_constants.desaturate = 0;
|
||||||
|
dc_shade_constants.simple_shade = true;
|
||||||
dc_light = 0;
|
dc_light = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2818,49 +2813,47 @@ void R_SetTranslationMap(lighttable_t *translation)
|
||||||
void R_SetColorMapLight(FColormap *base_colormap, float light, int shade)
|
void R_SetColorMapLight(FColormap *base_colormap, float light, int shade)
|
||||||
{
|
{
|
||||||
dc_fcolormap = base_colormap;
|
dc_fcolormap = base_colormap;
|
||||||
dc_shade_constants.light_red = dc_fcolormap->Color.r * 256 / 255;
|
|
||||||
dc_shade_constants.light_green = dc_fcolormap->Color.g * 256 / 255;
|
|
||||||
dc_shade_constants.light_blue = dc_fcolormap->Color.b * 256 / 255;
|
|
||||||
dc_shade_constants.light_alpha = dc_fcolormap->Color.a * 256 / 255;
|
|
||||||
dc_shade_constants.fade_red = dc_fcolormap->Fade.r;
|
|
||||||
dc_shade_constants.fade_green = dc_fcolormap->Fade.g;
|
|
||||||
dc_shade_constants.fade_blue = dc_fcolormap->Fade.b;
|
|
||||||
dc_shade_constants.fade_alpha = dc_fcolormap->Fade.a;
|
|
||||||
dc_shade_constants.desaturate = MIN(abs(dc_fcolormap->Desaturate), 255) * 255 / 256;
|
|
||||||
dc_shade_constants.simple_shade = (dc_fcolormap->Color.d == 0x00ffffff && dc_fcolormap->Fade.d == 0x00000000 && dc_fcolormap->Desaturate == 0);
|
|
||||||
if (r_swtruecolor)
|
if (r_swtruecolor)
|
||||||
{
|
{
|
||||||
|
dc_shade_constants.light_red = dc_fcolormap->Color.r * 256 / 255;
|
||||||
|
dc_shade_constants.light_green = dc_fcolormap->Color.g * 256 / 255;
|
||||||
|
dc_shade_constants.light_blue = dc_fcolormap->Color.b * 256 / 255;
|
||||||
|
dc_shade_constants.light_alpha = dc_fcolormap->Color.a * 256 / 255;
|
||||||
|
dc_shade_constants.fade_red = dc_fcolormap->Fade.r;
|
||||||
|
dc_shade_constants.fade_green = dc_fcolormap->Fade.g;
|
||||||
|
dc_shade_constants.fade_blue = dc_fcolormap->Fade.b;
|
||||||
|
dc_shade_constants.fade_alpha = dc_fcolormap->Fade.a;
|
||||||
|
dc_shade_constants.desaturate = MIN(abs(dc_fcolormap->Desaturate), 255) * 255 / 256;
|
||||||
|
dc_shade_constants.simple_shade = (dc_fcolormap->Color.d == 0x00ffffff && dc_fcolormap->Fade.d == 0x00000000 && dc_fcolormap->Desaturate == 0);
|
||||||
dc_colormap = base_colormap->Maps;
|
dc_colormap = base_colormap->Maps;
|
||||||
dc_light = LIGHTSCALE(light, shade);
|
dc_light = LIGHTSCALE(light, shade);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
dc_colormap = base_colormap->Maps + (GETPALOOKUP(light, shade) << COLORMAPSHIFT);
|
dc_colormap = base_colormap->Maps + (GETPALOOKUP(light, shade) << COLORMAPSHIFT);
|
||||||
dc_light = 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void R_SetDSColorMapLight(FColormap *base_colormap, float light, int shade)
|
void R_SetDSColorMapLight(FColormap *base_colormap, float light, int shade)
|
||||||
{
|
{
|
||||||
ds_fcolormap = base_colormap;
|
ds_fcolormap = base_colormap;
|
||||||
ds_shade_constants.light_red = ds_fcolormap->Color.r * 256 / 255;
|
|
||||||
ds_shade_constants.light_green = ds_fcolormap->Color.g * 256 / 255;
|
|
||||||
ds_shade_constants.light_blue = ds_fcolormap->Color.b * 256 / 255;
|
|
||||||
ds_shade_constants.light_alpha = ds_fcolormap->Color.a * 256 / 255;
|
|
||||||
ds_shade_constants.fade_red = ds_fcolormap->Fade.r;
|
|
||||||
ds_shade_constants.fade_green = ds_fcolormap->Fade.g;
|
|
||||||
ds_shade_constants.fade_blue = ds_fcolormap->Fade.b;
|
|
||||||
ds_shade_constants.fade_alpha = ds_fcolormap->Fade.a;
|
|
||||||
ds_shade_constants.desaturate = MIN(abs(ds_fcolormap->Desaturate), 255) * 255 / 256;
|
|
||||||
ds_shade_constants.simple_shade = (ds_fcolormap->Color.d == 0x00ffffff && ds_fcolormap->Fade.d == 0x00000000 && ds_fcolormap->Desaturate == 0);
|
|
||||||
if (r_swtruecolor)
|
if (r_swtruecolor)
|
||||||
{
|
{
|
||||||
|
ds_shade_constants.light_red = ds_fcolormap->Color.r * 256 / 255;
|
||||||
|
ds_shade_constants.light_green = ds_fcolormap->Color.g * 256 / 255;
|
||||||
|
ds_shade_constants.light_blue = ds_fcolormap->Color.b * 256 / 255;
|
||||||
|
ds_shade_constants.light_alpha = ds_fcolormap->Color.a * 256 / 255;
|
||||||
|
ds_shade_constants.fade_red = ds_fcolormap->Fade.r;
|
||||||
|
ds_shade_constants.fade_green = ds_fcolormap->Fade.g;
|
||||||
|
ds_shade_constants.fade_blue = ds_fcolormap->Fade.b;
|
||||||
|
ds_shade_constants.fade_alpha = ds_fcolormap->Fade.a;
|
||||||
|
ds_shade_constants.desaturate = MIN(abs(ds_fcolormap->Desaturate), 255) * 255 / 256;
|
||||||
|
ds_shade_constants.simple_shade = (ds_fcolormap->Color.d == 0x00ffffff && ds_fcolormap->Fade.d == 0x00000000 && ds_fcolormap->Desaturate == 0);
|
||||||
ds_colormap = base_colormap->Maps;
|
ds_colormap = base_colormap->Maps;
|
||||||
ds_light = LIGHTSCALE(light, shade);
|
ds_light = LIGHTSCALE(light, shade);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ds_colormap = base_colormap->Maps + (GETPALOOKUP(light, shade) << COLORMAPSHIFT);
|
ds_colormap = base_colormap->Maps + (GETPALOOKUP(light, shade) << COLORMAPSHIFT);
|
||||||
ds_light = 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -229,6 +229,7 @@ class DrawColumnRGBACommand : public DrawerCommand
|
||||||
const BYTE *dc_source;
|
const BYTE *dc_source;
|
||||||
int dc_pitch;
|
int dc_pitch;
|
||||||
ShadeConstants dc_shade_constants;
|
ShadeConstants dc_shade_constants;
|
||||||
|
BYTE *dc_colormap;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DrawColumnRGBACommand()
|
DrawColumnRGBACommand()
|
||||||
|
@ -241,6 +242,7 @@ public:
|
||||||
dc_source = ::dc_source;
|
dc_source = ::dc_source;
|
||||||
dc_pitch = ::dc_pitch;
|
dc_pitch = ::dc_pitch;
|
||||||
dc_shade_constants = ::dc_shade_constants;
|
dc_shade_constants = ::dc_shade_constants;
|
||||||
|
dc_colormap = ::dc_colormap;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Execute(DrawerThread *thread) override
|
void Execute(DrawerThread *thread) override
|
||||||
|
@ -267,24 +269,20 @@ public:
|
||||||
fracstep = dc_iscale * thread->num_cores;
|
fracstep = dc_iscale * thread->num_cores;
|
||||||
frac = dc_texturefrac + dc_iscale * thread->skipped_by_thread(dc_dest_y);
|
frac = dc_texturefrac + dc_iscale * thread->skipped_by_thread(dc_dest_y);
|
||||||
|
|
||||||
|
// [RH] Get local copies of these variables so that the compiler
|
||||||
|
// has a better chance of optimizing this well.
|
||||||
|
const BYTE *source = dc_source;
|
||||||
|
int pitch = dc_pitch * thread->num_cores;
|
||||||
|
BYTE *colormap = dc_colormap;
|
||||||
|
|
||||||
|
do
|
||||||
{
|
{
|
||||||
// [RH] Get local copies of these variables so that the compiler
|
*dest = shade_pal_index(colormap[source[frac >> FRACBITS]], light, shade_constants);
|
||||||
// has a better chance of optimizing this well.
|
|
||||||
const BYTE *source = dc_source;
|
|
||||||
int pitch = dc_pitch * thread->num_cores;
|
|
||||||
|
|
||||||
// Inner loop that does the actual texture mapping,
|
dest += pitch;
|
||||||
// e.g. a DDA-lile scaling.
|
frac += fracstep;
|
||||||
// This is as fast as it gets.
|
|
||||||
do
|
|
||||||
{
|
|
||||||
*dest = shade_pal_index(source[frac >> FRACBITS], light, shade_constants);
|
|
||||||
|
|
||||||
dest += pitch;
|
} while (--count);
|
||||||
frac += fracstep;
|
|
||||||
|
|
||||||
} while (--count);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -90,13 +90,13 @@ public:
|
||||||
sincr = thread->num_cores * 4;
|
sincr = thread->num_cores * 4;
|
||||||
|
|
||||||
if (count & 1) {
|
if (count & 1) {
|
||||||
*dest = *source;
|
*dest = GPalette.BaseColors[*source];
|
||||||
source += sincr;
|
source += sincr;
|
||||||
dest += pitch;
|
dest += pitch;
|
||||||
}
|
}
|
||||||
if (count & 2) {
|
if (count & 2) {
|
||||||
dest[0] = source[0];
|
dest[0] = GPalette.BaseColors[source[0]];
|
||||||
dest[pitch] = source[sincr];
|
dest[pitch] = GPalette.BaseColors[source[sincr]];
|
||||||
source += sincr * 2;
|
source += sincr * 2;
|
||||||
dest += pitch * 2;
|
dest += pitch * 2;
|
||||||
}
|
}
|
||||||
|
@ -104,10 +104,10 @@ public:
|
||||||
return;
|
return;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
dest[0] = source[0];
|
dest[0] = GPalette.BaseColors[source[0]];
|
||||||
dest[pitch] = source[sincr];
|
dest[pitch] = GPalette.BaseColors[source[sincr]];
|
||||||
dest[pitch * 2] = source[sincr * 2];
|
dest[pitch * 2] = GPalette.BaseColors[source[sincr * 2]];
|
||||||
dest[pitch * 3] = source[sincr * 3];
|
dest[pitch * 3] = GPalette.BaseColors[source[sincr * 3]];
|
||||||
source += sincr * 4;
|
source += sincr * 4;
|
||||||
dest += pitch * 4;
|
dest += pitch * 4;
|
||||||
} while (--count);
|
} while (--count);
|
||||||
|
@ -124,6 +124,7 @@ class RtMap1colRGBACommand : public DrawerCommand
|
||||||
ShadeConstants dc_shade_constants;
|
ShadeConstants dc_shade_constants;
|
||||||
BYTE *dc_destorg;
|
BYTE *dc_destorg;
|
||||||
int dc_pitch;
|
int dc_pitch;
|
||||||
|
BYTE *dc_colormap;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
RtMap1colRGBACommand(int hx, int sx, int yl, int yh)
|
RtMap1colRGBACommand(int hx, int sx, int yl, int yh)
|
||||||
|
@ -137,6 +138,7 @@ public:
|
||||||
dc_shade_constants = ::dc_shade_constants;
|
dc_shade_constants = ::dc_shade_constants;
|
||||||
dc_destorg = ::dc_destorg;
|
dc_destorg = ::dc_destorg;
|
||||||
dc_pitch = ::dc_pitch;
|
dc_pitch = ::dc_pitch;
|
||||||
|
dc_colormap = ::dc_colormap;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Execute(DrawerThread *thread) override
|
void Execute(DrawerThread *thread) override
|
||||||
|
@ -158,9 +160,11 @@ public:
|
||||||
source = &thread->dc_temp_rgba[yl * 4 + hx] + thread->skipped_by_thread(yl) * 4;
|
source = &thread->dc_temp_rgba[yl * 4 + hx] + thread->skipped_by_thread(yl) * 4;
|
||||||
pitch = dc_pitch * thread->num_cores;
|
pitch = dc_pitch * thread->num_cores;
|
||||||
sincr = thread->num_cores * 4;
|
sincr = thread->num_cores * 4;
|
||||||
|
|
||||||
|
BYTE *colormap = dc_colormap;
|
||||||
|
|
||||||
if (count & 1) {
|
if (count & 1) {
|
||||||
*dest = shade_pal_index(*source, light, shade_constants);
|
*dest = shade_pal_index(colormap[*source], light, shade_constants);
|
||||||
source += sincr;
|
source += sincr;
|
||||||
dest += pitch;
|
dest += pitch;
|
||||||
}
|
}
|
||||||
|
@ -168,8 +172,8 @@ public:
|
||||||
return;
|
return;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
dest[0] = shade_pal_index(source[0], light, shade_constants);
|
dest[0] = shade_pal_index(colormap[source[0]], light, shade_constants);
|
||||||
dest[pitch] = shade_pal_index(source[sincr], light, shade_constants);
|
dest[pitch] = shade_pal_index(colormap[source[sincr]], light, shade_constants);
|
||||||
source += sincr * 2;
|
source += sincr * 2;
|
||||||
dest += pitch * 2;
|
dest += pitch * 2;
|
||||||
} while (--count);
|
} while (--count);
|
||||||
|
@ -185,6 +189,7 @@ class RtMap4colsRGBACommand : public DrawerCommand
|
||||||
ShadeConstants dc_shade_constants;
|
ShadeConstants dc_shade_constants;
|
||||||
BYTE *dc_destorg;
|
BYTE *dc_destorg;
|
||||||
int dc_pitch;
|
int dc_pitch;
|
||||||
|
BYTE *colormap;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
RtMap4colsRGBACommand(int sx, int yl, int yh)
|
RtMap4colsRGBACommand(int sx, int yl, int yh)
|
||||||
|
@ -197,6 +202,7 @@ public:
|
||||||
dc_shade_constants = ::dc_shade_constants;
|
dc_shade_constants = ::dc_shade_constants;
|
||||||
dc_destorg = ::dc_destorg;
|
dc_destorg = ::dc_destorg;
|
||||||
dc_pitch = ::dc_pitch;
|
dc_pitch = ::dc_pitch;
|
||||||
|
dc_colormap = ::dc_colormap;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef NO_SSE
|
#ifdef NO_SSE
|
||||||
|
@ -219,12 +225,14 @@ public:
|
||||||
source = &thread->dc_temp_rgba[yl * 4] + thread->skipped_by_thread(yl) * 4;
|
source = &thread->dc_temp_rgba[yl * 4] + thread->skipped_by_thread(yl) * 4;
|
||||||
pitch = dc_pitch * thread->num_cores;
|
pitch = dc_pitch * thread->num_cores;
|
||||||
sincr = thread->num_cores * 4;
|
sincr = thread->num_cores * 4;
|
||||||
|
|
||||||
|
BYTE *colormap = dc_colormap;
|
||||||
|
|
||||||
if (count & 1) {
|
if (count & 1) {
|
||||||
dest[0] = shade_pal_index(source[0], light, shade_constants);
|
dest[0] = shade_pal_index(colormap[source[0]], light, shade_constants);
|
||||||
dest[1] = shade_pal_index(source[1], light, shade_constants);
|
dest[1] = shade_pal_index(colormap[source[1]], light, shade_constants);
|
||||||
dest[2] = shade_pal_index(source[2], light, shade_constants);
|
dest[2] = shade_pal_index(colormap[source[2]], light, shade_constants);
|
||||||
dest[3] = shade_pal_index(source[3], light, shade_constants);
|
dest[3] = shade_pal_index(colormap[source[3]], light, shade_constants);
|
||||||
source += sincr;
|
source += sincr;
|
||||||
dest += pitch;
|
dest += pitch;
|
||||||
}
|
}
|
||||||
|
@ -232,14 +240,14 @@ public:
|
||||||
return;
|
return;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
dest[0] = shade_pal_index(source[0], light, shade_constants);
|
dest[0] = shade_pal_index(colormap[source[0]], light, shade_constants);
|
||||||
dest[1] = shade_pal_index(source[1], light, shade_constants);
|
dest[1] = shade_pal_index(colormap[source[1]], light, shade_constants);
|
||||||
dest[2] = shade_pal_index(source[2], light, shade_constants);
|
dest[2] = shade_pal_index(colormap[source[2]], light, shade_constants);
|
||||||
dest[3] = shade_pal_index(source[3], light, shade_constants);
|
dest[3] = shade_pal_index(colormap[source[3]], light, shade_constants);
|
||||||
dest[pitch] = shade_pal_index(source[sincr], light, shade_constants);
|
dest[pitch] = shade_pal_index(colormap[source[sincr]], light, shade_constants);
|
||||||
dest[pitch + 1] = shade_pal_index(source[sincr + 1], light, shade_constants);
|
dest[pitch + 1] = shade_pal_index(colormap[source[sincr + 1]], light, shade_constants);
|
||||||
dest[pitch + 2] = shade_pal_index(source[sincr + 2], light, shade_constants);
|
dest[pitch + 2] = shade_pal_index(colormap[source[sincr + 2]], light, shade_constants);
|
||||||
dest[pitch + 3] = shade_pal_index(source[sincr + 3], light, shade_constants);
|
dest[pitch + 3] = shade_pal_index(colormap[source[sincr + 3]], light, shade_constants);
|
||||||
source += sincr * 2;
|
source += sincr * 2;
|
||||||
dest += pitch * 2;
|
dest += pitch * 2;
|
||||||
} while (--count);
|
} while (--count);
|
||||||
|
@ -265,16 +273,18 @@ public:
|
||||||
source = &thread->dc_temp_rgba[yl * 4] + thread->skipped_by_thread(yl) * 4;
|
source = &thread->dc_temp_rgba[yl * 4] + thread->skipped_by_thread(yl) * 4;
|
||||||
pitch = dc_pitch * thread->num_cores;
|
pitch = dc_pitch * thread->num_cores;
|
||||||
sincr = thread->num_cores * 4;
|
sincr = thread->num_cores * 4;
|
||||||
|
|
||||||
|
BYTE *colormap = dc_colormap;
|
||||||
|
|
||||||
if (shade_constants.simple_shade)
|
if (shade_constants.simple_shade)
|
||||||
{
|
{
|
||||||
SSE_SHADE_SIMPLE_INIT(light);
|
SSE_SHADE_SIMPLE_INIT(light);
|
||||||
|
|
||||||
if (count & 1) {
|
if (count & 1) {
|
||||||
uint32_t p0 = source[0];
|
uint32_t p0 = colormap[source[0]];
|
||||||
uint32_t p1 = source[1];
|
uint32_t p1 = colormap[source[1]];
|
||||||
uint32_t p2 = source[2];
|
uint32_t p2 = colormap[source[2]];
|
||||||
uint32_t p3 = source[3];
|
uint32_t p3 = colormap[source[3]];
|
||||||
|
|
||||||
// shade_pal_index:
|
// shade_pal_index:
|
||||||
__m128i fg = _mm_set_epi32(palette[p3], palette[p2], palette[p1], palette[p0]);
|
__m128i fg = _mm_set_epi32(palette[p3], palette[p2], palette[p1], palette[p0]);
|
||||||
|
@ -290,10 +300,10 @@ public:
|
||||||
do {
|
do {
|
||||||
// shade_pal_index 0-3
|
// shade_pal_index 0-3
|
||||||
{
|
{
|
||||||
uint32_t p0 = source[0];
|
uint32_t p0 = colormap[source[0]];
|
||||||
uint32_t p1 = source[1];
|
uint32_t p1 = colormap[source[1]];
|
||||||
uint32_t p2 = source[2];
|
uint32_t p2 = colormap[source[2]];
|
||||||
uint32_t p3 = source[3];
|
uint32_t p3 = colormap[source[3]];
|
||||||
|
|
||||||
__m128i fg = _mm_set_epi32(palette[p3], palette[p2], palette[p1], palette[p0]);
|
__m128i fg = _mm_set_epi32(palette[p3], palette[p2], palette[p1], palette[p0]);
|
||||||
SSE_SHADE_SIMPLE(fg);
|
SSE_SHADE_SIMPLE(fg);
|
||||||
|
@ -302,10 +312,10 @@ public:
|
||||||
|
|
||||||
// shade_pal_index 4-7 (pitch)
|
// shade_pal_index 4-7 (pitch)
|
||||||
{
|
{
|
||||||
uint32_t p0 = source[sincr];
|
uint32_t p0 = colormap[source[sincr]];
|
||||||
uint32_t p1 = source[sincr + 1];
|
uint32_t p1 = colormap[source[sincr + 1]];
|
||||||
uint32_t p2 = source[sincr + 2];
|
uint32_t p2 = colormap[source[sincr + 2]];
|
||||||
uint32_t p3 = source[sincr + 3];
|
uint32_t p3 = colormap[source[sincr + 3]];
|
||||||
|
|
||||||
__m128i fg = _mm_set_epi32(palette[p3], palette[p2], palette[p1], palette[p0]);
|
__m128i fg = _mm_set_epi32(palette[p3], palette[p2], palette[p1], palette[p0]);
|
||||||
SSE_SHADE_SIMPLE(fg);
|
SSE_SHADE_SIMPLE(fg);
|
||||||
|
@ -321,10 +331,10 @@ public:
|
||||||
SSE_SHADE_INIT(light, shade_constants);
|
SSE_SHADE_INIT(light, shade_constants);
|
||||||
|
|
||||||
if (count & 1) {
|
if (count & 1) {
|
||||||
uint32_t p0 = source[0];
|
uint32_t p0 = colormap[source[0]];
|
||||||
uint32_t p1 = source[1];
|
uint32_t p1 = colormap[source[1]];
|
||||||
uint32_t p2 = source[2];
|
uint32_t p2 = colormap[source[2]];
|
||||||
uint32_t p3 = source[3];
|
uint32_t p3 = colormap[source[3]];
|
||||||
|
|
||||||
// shade_pal_index:
|
// shade_pal_index:
|
||||||
__m128i fg = _mm_set_epi32(palette[p3], palette[p2], palette[p1], palette[p0]);
|
__m128i fg = _mm_set_epi32(palette[p3], palette[p2], palette[p1], palette[p0]);
|
||||||
|
@ -340,10 +350,10 @@ public:
|
||||||
do {
|
do {
|
||||||
// shade_pal_index 0-3
|
// shade_pal_index 0-3
|
||||||
{
|
{
|
||||||
uint32_t p0 = source[0];
|
uint32_t p0 = colormap[source[0]];
|
||||||
uint32_t p1 = source[1];
|
uint32_t p1 = colormap[source[1]];
|
||||||
uint32_t p2 = source[2];
|
uint32_t p2 = colormap[source[2]];
|
||||||
uint32_t p3 = source[3];
|
uint32_t p3 = colormap[source[3]];
|
||||||
|
|
||||||
__m128i fg = _mm_set_epi32(palette[p3], palette[p2], palette[p1], palette[p0]);
|
__m128i fg = _mm_set_epi32(palette[p3], palette[p2], palette[p1], palette[p0]);
|
||||||
SSE_SHADE(fg, shade_constants);
|
SSE_SHADE(fg, shade_constants);
|
||||||
|
@ -352,10 +362,10 @@ public:
|
||||||
|
|
||||||
// shade_pal_index 4-7 (pitch)
|
// shade_pal_index 4-7 (pitch)
|
||||||
{
|
{
|
||||||
uint32_t p0 = source[sincr];
|
uint32_t p0 = colormap[source[sincr]];
|
||||||
uint32_t p1 = source[sincr + 1];
|
uint32_t p1 = colormap[source[sincr + 1]];
|
||||||
uint32_t p2 = source[sincr + 2];
|
uint32_t p2 = colormap[source[sincr + 2]];
|
||||||
uint32_t p3 = source[sincr + 3];
|
uint32_t p3 = colormap[source[sincr + 3]];
|
||||||
|
|
||||||
__m128i fg = _mm_set_epi32(palette[p3], palette[p2], palette[p1], palette[p0]);
|
__m128i fg = _mm_set_epi32(palette[p3], palette[p2], palette[p1], palette[p0]);
|
||||||
SSE_SHADE(fg, shade_constants);
|
SSE_SHADE(fg, shade_constants);
|
||||||
|
@ -1800,6 +1810,9 @@ void rt_span_coverage_rgba(int x, int start, int stop)
|
||||||
// drawn to the screen along with up to three other columns.
|
// drawn to the screen along with up to three other columns.
|
||||||
void R_DrawColumnHorizP_RGBA_C (void)
|
void R_DrawColumnHorizP_RGBA_C (void)
|
||||||
{
|
{
|
||||||
|
if (dc_count <= 0)
|
||||||
|
return;
|
||||||
|
|
||||||
int x = dc_x & 3;
|
int x = dc_x & 3;
|
||||||
unsigned int **span = &dc_ctspan[x];
|
unsigned int **span = &dc_ctspan[x];
|
||||||
(*span)[0] = dc_yl;
|
(*span)[0] = dc_yl;
|
||||||
|
@ -1812,6 +1825,9 @@ void R_DrawColumnHorizP_RGBA_C (void)
|
||||||
// [RH] Just fills a column with a given color
|
// [RH] Just fills a column with a given color
|
||||||
void R_FillColumnHorizP_RGBA_C (void)
|
void R_FillColumnHorizP_RGBA_C (void)
|
||||||
{
|
{
|
||||||
|
if (dc_count <= 0)
|
||||||
|
return;
|
||||||
|
|
||||||
int x = dc_x & 3;
|
int x = dc_x & 3;
|
||||||
unsigned int **span = &dc_ctspan[x];
|
unsigned int **span = &dc_ctspan[x];
|
||||||
(*span)[0] = dc_yl;
|
(*span)[0] = dc_yl;
|
||||||
|
|
Loading…
Reference in a new issue