consistency
This commit is contained in:
parent
a007baf947
commit
136e1d025c
72
src/external/rlsw.h
vendored
72
src/external/rlsw.h
vendored
|
|
@ -1104,14 +1104,14 @@ static inline void sw_float_from_unorm8_simd(float dst[4], const uint8_t src[4])
|
||||||
uint32x4_t ints = vmovl_u16(vget_low_u16(bytes16));
|
uint32x4_t ints = vmovl_u16(vget_low_u16(bytes16));
|
||||||
|
|
||||||
float32x4_t floats = vcvtq_f32_u32(ints);
|
float32x4_t floats = vcvtq_f32_u32(ints);
|
||||||
floats = vmulq_n_f32(floats, 1.0f / 255.0f);
|
floats = vmulq_n_f32(floats, 1.0f/255.0f);
|
||||||
vst1q_f32(dst, floats);
|
vst1q_f32(dst, floats);
|
||||||
|
|
||||||
#elif defined(SW_HAS_SSE41)
|
#elif defined(SW_HAS_SSE41)
|
||||||
__m128i bytes = _mm_cvtsi32_si128(*(const uint32_t*)src);
|
__m128i bytes = _mm_cvtsi32_si128(*(const uint32_t*)src);
|
||||||
__m128i ints = _mm_cvtepu8_epi32(bytes);
|
__m128i ints = _mm_cvtepu8_epi32(bytes);
|
||||||
__m128 floats = _mm_cvtepi32_ps(ints);
|
__m128 floats = _mm_cvtepi32_ps(ints);
|
||||||
floats = _mm_mul_ps(floats, _mm_set1_ps(1.0f / 255.0f));
|
floats = _mm_mul_ps(floats, _mm_set1_ps(1.0f/255.0f));
|
||||||
_mm_storeu_ps(dst, floats);
|
_mm_storeu_ps(dst, floats);
|
||||||
|
|
||||||
#elif defined(SW_HAS_SSE2)
|
#elif defined(SW_HAS_SSE2)
|
||||||
|
|
@ -1119,7 +1119,7 @@ static inline void sw_float_from_unorm8_simd(float dst[4], const uint8_t src[4])
|
||||||
bytes = _mm_unpacklo_epi8(bytes, _mm_setzero_si128());
|
bytes = _mm_unpacklo_epi8(bytes, _mm_setzero_si128());
|
||||||
__m128i ints = _mm_unpacklo_epi16(bytes, _mm_setzero_si128());
|
__m128i ints = _mm_unpacklo_epi16(bytes, _mm_setzero_si128());
|
||||||
__m128 floats = _mm_cvtepi32_ps(ints);
|
__m128 floats = _mm_cvtepi32_ps(ints);
|
||||||
floats = _mm_mul_ps(floats, _mm_set1_ps(1.0f / 255.0f));
|
floats = _mm_mul_ps(floats, _mm_set1_ps(1.0f/255.0f));
|
||||||
_mm_storeu_ps(dst, floats);
|
_mm_storeu_ps(dst, floats);
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
@ -1806,9 +1806,9 @@ static inline void sw_get_pixel(uint8_t *color, const void *pixels, uint32_t off
|
||||||
case SW_PIXELFORMAT_UNCOMPRESSED_R5G6B5:
|
case SW_PIXELFORMAT_UNCOMPRESSED_R5G6B5:
|
||||||
{
|
{
|
||||||
uint16_t pixel = ((const uint16_t*)pixels)[offset];
|
uint16_t pixel = ((const uint16_t*)pixels)[offset];
|
||||||
color[0] = ((pixel >> 11) & 0x1F)*255 / 31; // R (5 bits)
|
color[0] = ((pixel >> 11) & 0x1F)*255/31; // R (5 bits)
|
||||||
color[1] = ((pixel >> 5) & 0x3F)*255 / 63; // G (6 bits)
|
color[1] = ((pixel >> 5) & 0x3F)*255/63; // G (6 bits)
|
||||||
color[2] = (pixel & 0x1F)*255 / 31; // B (5 bits)
|
color[2] = (pixel & 0x1F)*255/31; // B (5 bits)
|
||||||
color[3] = 255;
|
color[3] = 255;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -1824,19 +1824,19 @@ static inline void sw_get_pixel(uint8_t *color, const void *pixels, uint32_t off
|
||||||
case SW_PIXELFORMAT_UNCOMPRESSED_R5G5B5A1:
|
case SW_PIXELFORMAT_UNCOMPRESSED_R5G5B5A1:
|
||||||
{
|
{
|
||||||
uint16_t pixel = ((const uint16_t*)pixels)[offset];
|
uint16_t pixel = ((const uint16_t*)pixels)[offset];
|
||||||
color[0] = ((pixel >> 11) & 0x1F)*255 / 31; // R (5 bits)
|
color[0] = ((pixel >> 11) & 0x1F)*255/31; // R (5 bits)
|
||||||
color[1] = ((pixel >> 6) & 0x1F)*255 / 31; // G (5 bits)
|
color[1] = ((pixel >> 6) & 0x1F)*255/31; // G (5 bits)
|
||||||
color[2] = ((pixel >> 1) & 0x1F)*255 / 31; // B (5 bits)
|
color[2] = ((pixel >> 1) & 0x1F)*255/31; // B (5 bits)
|
||||||
color[3] = (pixel & 0x01)*255; // A (1 bit)
|
color[3] = (pixel & 0x01)*255; // A (1 bit)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SW_PIXELFORMAT_UNCOMPRESSED_R4G4B4A4:
|
case SW_PIXELFORMAT_UNCOMPRESSED_R4G4B4A4:
|
||||||
{
|
{
|
||||||
uint16_t pixel = ((const uint16_t*)pixels)[offset];
|
uint16_t pixel = ((const uint16_t*)pixels)[offset];
|
||||||
color[0] = ((pixel >> 12) & 0x0F)*255 / 15; // R (4 bits)
|
color[0] = ((pixel >> 12) & 0x0F)*255/15; // R (4 bits)
|
||||||
color[1] = ((pixel >> 8) & 0x0F)*255 / 15; // G (4 bits)
|
color[1] = ((pixel >> 8) & 0x0F)*255/15; // G (4 bits)
|
||||||
color[2] = ((pixel >> 4) & 0x0F)*255 / 15; // B (4 bits)
|
color[2] = ((pixel >> 4) & 0x0F)*255/15; // B (4 bits)
|
||||||
color[3] = (pixel & 0x0F)*255 / 15; // A (4 bits)
|
color[3] = (pixel & 0x0F)*255/15; // A (4 bits)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SW_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8:
|
case SW_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8:
|
||||||
|
|
@ -2274,23 +2274,23 @@ static inline void sw_triangle_clip_and_project(void)
|
||||||
|
|
||||||
// Calculation of the reciprocal of W for normalization
|
// Calculation of the reciprocal of W for normalization
|
||||||
// as well as perspective-correct attributes
|
// as well as perspective-correct attributes
|
||||||
const float invW = 1.0f/v->homogeneous[3];
|
const float wRcp = 1.0f/v->homogeneous[3];
|
||||||
v->homogeneous[3] = invW;
|
v->homogeneous[3] = wRcp;
|
||||||
|
|
||||||
// Division of XYZ coordinates by weight
|
// Division of XYZ coordinates by weight
|
||||||
v->homogeneous[0] *= invW;
|
v->homogeneous[0] *= wRcp;
|
||||||
v->homogeneous[1] *= invW;
|
v->homogeneous[1] *= wRcp;
|
||||||
v->homogeneous[2] *= invW;
|
v->homogeneous[2] *= wRcp;
|
||||||
|
|
||||||
// Division of texture coordinates (perspective-correct)
|
// Division of texture coordinates (perspective-correct)
|
||||||
v->texcoord[0] *= invW;
|
v->texcoord[0] *= wRcp;
|
||||||
v->texcoord[1] *= invW;
|
v->texcoord[1] *= wRcp;
|
||||||
|
|
||||||
// Division of colors (perspective-correct)
|
// Division of colors (perspective-correct)
|
||||||
v->color[0] *= invW;
|
v->color[0] *= wRcp;
|
||||||
v->color[1] *= invW;
|
v->color[1] *= wRcp;
|
||||||
v->color[2] *= invW;
|
v->color[2] *= wRcp;
|
||||||
v->color[3] *= invW;
|
v->color[3] *= wRcp;
|
||||||
|
|
||||||
// Transformation to screen space
|
// Transformation to screen space
|
||||||
sw_project_ndc_to_screen(v->screen, v->homogeneous);
|
sw_project_ndc_to_screen(v->screen, v->homogeneous);
|
||||||
|
|
@ -2616,23 +2616,23 @@ static inline void sw_quad_clip_and_project(void)
|
||||||
|
|
||||||
// Calculation of the reciprocal of W for normalization
|
// Calculation of the reciprocal of W for normalization
|
||||||
// as well as perspective-correct attributes
|
// as well as perspective-correct attributes
|
||||||
const float invW = 1.0f/v->homogeneous[3];
|
const float wRcp = 1.0f/v->homogeneous[3];
|
||||||
v->homogeneous[3] = invW;
|
v->homogeneous[3] = wRcp;
|
||||||
|
|
||||||
// Division of XYZ coordinates by weight
|
// Division of XYZ coordinates by weight
|
||||||
v->homogeneous[0] *= invW;
|
v->homogeneous[0] *= wRcp;
|
||||||
v->homogeneous[1] *= invW;
|
v->homogeneous[1] *= wRcp;
|
||||||
v->homogeneous[2] *= invW;
|
v->homogeneous[2] *= wRcp;
|
||||||
|
|
||||||
// Division of texture coordinates (perspective-correct)
|
// Division of texture coordinates (perspective-correct)
|
||||||
v->texcoord[0] *= invW;
|
v->texcoord[0] *= wRcp;
|
||||||
v->texcoord[1] *= invW;
|
v->texcoord[1] *= wRcp;
|
||||||
|
|
||||||
// Division of colors (perspective-correct)
|
// Division of colors (perspective-correct)
|
||||||
v->color[0] *= invW;
|
v->color[0] *= wRcp;
|
||||||
v->color[1] *= invW;
|
v->color[1] *= wRcp;
|
||||||
v->color[2] *= invW;
|
v->color[2] *= wRcp;
|
||||||
v->color[3] *= invW;
|
v->color[3] *= wRcp;
|
||||||
|
|
||||||
// Transformation to screen space
|
// Transformation to screen space
|
||||||
sw_project_ndc_to_screen(v->screen, v->homogeneous);
|
sw_project_ndc_to_screen(v->screen, v->homogeneous);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user