mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1186111 - Implemented pack unpremultiply for 16f formats. r=jgilbert
This commit is contained in:
parent
236aa9654e
commit
3e88efc8dd
@ -890,6 +890,16 @@ pack<WebGLTexelFormat::RGB16F, WebGLTexelPremultiplicationOp::Premultiply, uint1
|
|||||||
dst[2] = packToFloat16(unpackFromFloat16(src[2]) * scaleFactor);
|
dst[2] = packToFloat16(unpackFromFloat16(src[2]) * scaleFactor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<> MOZ_ALWAYS_INLINE void
|
||||||
|
pack<WebGLTexelFormat::RGB16F, WebGLTexelPremultiplicationOp::Unpremultiply, uint16_t, uint16_t>(const uint16_t* __restrict src, uint16_t* __restrict dst)
|
||||||
|
{
|
||||||
|
float unpackedAlpha = unpackFromFloat16(src[3]);
|
||||||
|
float scaleFactor = unpackedAlpha ? 1.0f / unpackedAlpha : 1.0f;
|
||||||
|
dst[0] = packToFloat16(unpackFromFloat16(src[0]) * scaleFactor);
|
||||||
|
dst[1] = packToFloat16(unpackFromFloat16(src[1]) * scaleFactor);
|
||||||
|
dst[2] = packToFloat16(unpackFromFloat16(src[2]) * scaleFactor);
|
||||||
|
}
|
||||||
|
|
||||||
template<> MOZ_ALWAYS_INLINE void
|
template<> MOZ_ALWAYS_INLINE void
|
||||||
pack<WebGLTexelFormat::RGBA16F, WebGLTexelPremultiplicationOp::None, uint16_t, uint16_t>(const uint16_t* __restrict src, uint16_t* __restrict dst)
|
pack<WebGLTexelFormat::RGBA16F, WebGLTexelPremultiplicationOp::None, uint16_t, uint16_t>(const uint16_t* __restrict src, uint16_t* __restrict dst)
|
||||||
{
|
{
|
||||||
@ -909,6 +919,17 @@ pack<WebGLTexelFormat::RGBA16F, WebGLTexelPremultiplicationOp::Premultiply, uint
|
|||||||
dst[3] = src[3];
|
dst[3] = src[3];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<> MOZ_ALWAYS_INLINE void
|
||||||
|
pack<WebGLTexelFormat::RGBA16F, WebGLTexelPremultiplicationOp::Unpremultiply, uint16_t, uint16_t>(const uint16_t* __restrict src, uint16_t* __restrict dst)
|
||||||
|
{
|
||||||
|
float unpackedAlpha = unpackFromFloat16(src[3]);
|
||||||
|
float scaleFactor = unpackedAlpha ? 1.0f / unpackedAlpha : 1.0f;
|
||||||
|
dst[0] = packToFloat16(unpackFromFloat16(src[0]) * scaleFactor);
|
||||||
|
dst[1] = packToFloat16(unpackFromFloat16(src[1]) * scaleFactor);
|
||||||
|
dst[2] = packToFloat16(unpackFromFloat16(src[2]) * scaleFactor);
|
||||||
|
dst[3] = src[3];
|
||||||
|
}
|
||||||
|
|
||||||
template<> MOZ_ALWAYS_INLINE void
|
template<> MOZ_ALWAYS_INLINE void
|
||||||
pack<WebGLTexelFormat::A16F, WebGLTexelPremultiplicationOp::None, uint16_t, uint16_t>(const uint16_t* __restrict src, uint16_t* __restrict dst)
|
pack<WebGLTexelFormat::A16F, WebGLTexelPremultiplicationOp::None, uint16_t, uint16_t>(const uint16_t* __restrict src, uint16_t* __restrict dst)
|
||||||
{
|
{
|
||||||
@ -921,6 +942,12 @@ pack<WebGLTexelFormat::A16F, WebGLTexelPremultiplicationOp::Premultiply, uint16_
|
|||||||
dst[0] = src[3];
|
dst[0] = src[3];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<> MOZ_ALWAYS_INLINE void
|
||||||
|
pack<WebGLTexelFormat::A16F, WebGLTexelPremultiplicationOp::Unpremultiply, uint16_t, uint16_t>(const uint16_t* __restrict src, uint16_t* __restrict dst)
|
||||||
|
{
|
||||||
|
dst[0] = src[3];
|
||||||
|
}
|
||||||
|
|
||||||
template<> MOZ_ALWAYS_INLINE void
|
template<> MOZ_ALWAYS_INLINE void
|
||||||
pack<WebGLTexelFormat::R16F, WebGLTexelPremultiplicationOp::None, uint16_t, uint16_t>(const uint16_t* __restrict src, uint16_t* __restrict dst)
|
pack<WebGLTexelFormat::R16F, WebGLTexelPremultiplicationOp::None, uint16_t, uint16_t>(const uint16_t* __restrict src, uint16_t* __restrict dst)
|
||||||
{
|
{
|
||||||
@ -934,6 +961,14 @@ pack<WebGLTexelFormat::R16F, WebGLTexelPremultiplicationOp::Premultiply, uint16_
|
|||||||
dst[0] = packToFloat16(unpackFromFloat16(src[0]) * scaleFactor);
|
dst[0] = packToFloat16(unpackFromFloat16(src[0]) * scaleFactor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<> MOZ_ALWAYS_INLINE void
|
||||||
|
pack<WebGLTexelFormat::R16F, WebGLTexelPremultiplicationOp::Unpremultiply, uint16_t, uint16_t>(const uint16_t* __restrict src, uint16_t* __restrict dst)
|
||||||
|
{
|
||||||
|
float unpackedAlpha = unpackFromFloat16(src[3]);
|
||||||
|
float scaleFactor = unpackedAlpha ? 1.0f / unpackedAlpha : 1.0f;
|
||||||
|
dst[0] = packToFloat16(unpackFromFloat16(src[0]) * scaleFactor);
|
||||||
|
}
|
||||||
|
|
||||||
template<> MOZ_ALWAYS_INLINE void
|
template<> MOZ_ALWAYS_INLINE void
|
||||||
pack<WebGLTexelFormat::RA16F, WebGLTexelPremultiplicationOp::None, uint16_t, uint16_t>(const uint16_t* __restrict src, uint16_t* __restrict dst)
|
pack<WebGLTexelFormat::RA16F, WebGLTexelPremultiplicationOp::None, uint16_t, uint16_t>(const uint16_t* __restrict src, uint16_t* __restrict dst)
|
||||||
{
|
{
|
||||||
@ -949,6 +984,15 @@ pack<WebGLTexelFormat::RA16F, WebGLTexelPremultiplicationOp::Premultiply, uint16
|
|||||||
dst[1] = scaleFactor;
|
dst[1] = scaleFactor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<> MOZ_ALWAYS_INLINE void
|
||||||
|
pack<WebGLTexelFormat::RA16F, WebGLTexelPremultiplicationOp::Unpremultiply, uint16_t, uint16_t>(const uint16_t* __restrict src, uint16_t* __restrict dst)
|
||||||
|
{
|
||||||
|
float unpackedAlpha = unpackFromFloat16(src[3]);
|
||||||
|
float scaleFactor = unpackedAlpha ? 1.0f / unpackedAlpha : 1.0f;
|
||||||
|
dst[0] = packToFloat16(unpackFromFloat16(src[0]) * scaleFactor);
|
||||||
|
dst[1] = src[3];
|
||||||
|
}
|
||||||
|
|
||||||
/****** END CODE SHARED WITH WEBKIT ******/
|
/****** END CODE SHARED WITH WEBKIT ******/
|
||||||
|
|
||||||
template<typename SrcType, typename DstType> MOZ_ALWAYS_INLINE void
|
template<typename SrcType, typename DstType> MOZ_ALWAYS_INLINE void
|
||||||
|
Loading…
Reference in New Issue
Block a user