mirror of
https://github.com/FreeRDP/FreeRDP.git
synced 2025-06-03 00:00:20 +00:00
[primitives,copy] add fallback path
color format conversions that do not have an accelerated implementation are now handled by generic pixel copy
This commit is contained in:
parent
bcd663b7d9
commit
eedb5590b2
@ -296,6 +296,10 @@ static INLINE pstatus_t generic_image_copy_no_overlap_dst_alpha(
|
|||||||
return generic_image_copy_bgrx32_bgrx32(
|
return generic_image_copy_bgrx32_bgrx32(
|
||||||
pDstData, nDstStep, nXDst, nYDst, nWidth, nHeight, pSrcData, nSrcStep,
|
pDstData, nDstStep, nXDst, nYDst, nWidth, nHeight, pSrcData, nSrcStep,
|
||||||
nXSrc, nYSrc, srcVMultiplier, srcVOffset, dstVMultiplier, dstVOffset);
|
nXSrc, nYSrc, srcVMultiplier, srcVOffset, dstVMultiplier, dstVOffset);
|
||||||
|
case PIXEL_FORMAT_BGR24:
|
||||||
|
return generic_image_copy_bgr24_bgrx32(
|
||||||
|
pDstData, nDstStep, nXDst, nYDst, nWidth, nHeight, pSrcData, nSrcStep,
|
||||||
|
nXSrc, nYSrc, srcVMultiplier, srcVOffset, dstVMultiplier, dstVOffset);
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -34,6 +34,12 @@
|
|||||||
#include <emmintrin.h>
|
#include <emmintrin.h>
|
||||||
#include <immintrin.h>
|
#include <immintrin.h>
|
||||||
|
|
||||||
|
static INLINE pstatus_t avx2_image_copy_no_overlap_convert(
|
||||||
|
BYTE* WINPR_RESTRICT pDstData, DWORD DstFormat, UINT32 nDstStep, UINT32 nXDst, UINT32 nYDst,
|
||||||
|
UINT32 nWidth, UINT32 nHeight, const BYTE* WINPR_RESTRICT pSrcData, DWORD SrcFormat,
|
||||||
|
UINT32 nSrcStep, UINT32 nXSrc, UINT32 nYSrc, const gdiPalette* WINPR_RESTRICT palette,
|
||||||
|
SSIZE_T srcVMultiplier, SSIZE_T srcVOffset, SSIZE_T dstVMultiplier, SSIZE_T dstVOffset);
|
||||||
|
|
||||||
static INLINE pstatus_t avx2_image_copy_bgr24_bgrx32(BYTE* WINPR_RESTRICT pDstData, UINT32 nDstStep,
|
static INLINE pstatus_t avx2_image_copy_bgr24_bgrx32(BYTE* WINPR_RESTRICT pDstData, UINT32 nDstStep,
|
||||||
UINT32 nXDst, UINT32 nYDst, UINT32 nWidth,
|
UINT32 nXDst, UINT32 nYDst, UINT32 nWidth,
|
||||||
UINT32 nHeight,
|
UINT32 nHeight,
|
||||||
@ -169,12 +175,12 @@ static pstatus_t avx2_image_copy_no_overlap_dst_alpha(
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
WLog_DBG(TAG, "unsupported format src %s --> dst %s", FreeRDPGetColorFormatName(SrcFormat),
|
return avx2_image_copy_no_overlap_convert(
|
||||||
FreeRDPGetColorFormatName(DstFormat));
|
pDstData, DstFormat, nDstStep, nXDst, nYDst, nWidth, nHeight, pSrcData, SrcFormat, nSrcStep,
|
||||||
return -1;
|
nXSrc, nYSrc, palette, srcVMultiplier, srcVOffset, dstVMultiplier, dstVOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
static INLINE pstatus_t avx2_image_copy_no_overlap_convert(
|
pstatus_t avx2_image_copy_no_overlap_convert(
|
||||||
BYTE* WINPR_RESTRICT pDstData, DWORD DstFormat, UINT32 nDstStep, UINT32 nXDst, UINT32 nYDst,
|
BYTE* WINPR_RESTRICT pDstData, DWORD DstFormat, UINT32 nDstStep, UINT32 nXDst, UINT32 nYDst,
|
||||||
UINT32 nWidth, UINT32 nHeight, const BYTE* WINPR_RESTRICT pSrcData, DWORD SrcFormat,
|
UINT32 nWidth, UINT32 nHeight, const BYTE* WINPR_RESTRICT pSrcData, DWORD SrcFormat,
|
||||||
UINT32 nSrcStep, UINT32 nXSrc, UINT32 nYSrc, const gdiPalette* WINPR_RESTRICT palette,
|
UINT32 nSrcStep, UINT32 nXSrc, UINT32 nYSrc, const gdiPalette* WINPR_RESTRICT palette,
|
||||||
|
@ -34,6 +34,12 @@
|
|||||||
#include <emmintrin.h>
|
#include <emmintrin.h>
|
||||||
#include <immintrin.h>
|
#include <immintrin.h>
|
||||||
|
|
||||||
|
static INLINE pstatus_t sse_image_copy_no_overlap_convert(
|
||||||
|
BYTE* WINPR_RESTRICT pDstData, DWORD DstFormat, UINT32 nDstStep, UINT32 nXDst, UINT32 nYDst,
|
||||||
|
UINT32 nWidth, UINT32 nHeight, const BYTE* WINPR_RESTRICT pSrcData, DWORD SrcFormat,
|
||||||
|
UINT32 nSrcStep, UINT32 nXSrc, UINT32 nYSrc, const gdiPalette* WINPR_RESTRICT palette,
|
||||||
|
SSIZE_T srcVMultiplier, SSIZE_T srcVOffset, SSIZE_T dstVMultiplier, SSIZE_T dstVOffset);
|
||||||
|
|
||||||
static INLINE pstatus_t sse_image_copy_bgr24_bgrx32(BYTE* WINPR_RESTRICT pDstData, UINT32 nDstStep,
|
static INLINE pstatus_t sse_image_copy_bgr24_bgrx32(BYTE* WINPR_RESTRICT pDstData, UINT32 nDstStep,
|
||||||
UINT32 nXDst, UINT32 nYDst, UINT32 nWidth,
|
UINT32 nXDst, UINT32 nYDst, UINT32 nWidth,
|
||||||
UINT32 nHeight,
|
UINT32 nHeight,
|
||||||
@ -167,12 +173,13 @@ static pstatus_t sse_image_copy_no_overlap_dst_alpha(
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
WLog_DBG(TAG, "unsupported format src %s --> dst %s", FreeRDPGetColorFormatName(SrcFormat),
|
/* Fall back to pixel copy */
|
||||||
FreeRDPGetColorFormatName(DstFormat));
|
return sse_image_copy_no_overlap_convert(
|
||||||
return -1;
|
pDstData, DstFormat, nDstStep, nXDst, nYDst, nWidth, nHeight, pSrcData, SrcFormat, nSrcStep,
|
||||||
|
nXSrc, nYSrc, palette, srcVMultiplier, srcVOffset, dstVMultiplier, dstVOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
static INLINE pstatus_t sse_image_copy_no_overlap_convert(
|
pstatus_t sse_image_copy_no_overlap_convert(
|
||||||
BYTE* WINPR_RESTRICT pDstData, DWORD DstFormat, UINT32 nDstStep, UINT32 nXDst, UINT32 nYDst,
|
BYTE* WINPR_RESTRICT pDstData, DWORD DstFormat, UINT32 nDstStep, UINT32 nXDst, UINT32 nYDst,
|
||||||
UINT32 nWidth, UINT32 nHeight, const BYTE* WINPR_RESTRICT pSrcData, DWORD SrcFormat,
|
UINT32 nWidth, UINT32 nHeight, const BYTE* WINPR_RESTRICT pSrcData, DWORD SrcFormat,
|
||||||
UINT32 nSrcStep, UINT32 nXSrc, UINT32 nYSrc, const gdiPalette* WINPR_RESTRICT palette,
|
UINT32 nSrcStep, UINT32 nXSrc, UINT32 nYSrc, const gdiPalette* WINPR_RESTRICT palette,
|
||||||
|
Loading…
Reference in New Issue
Block a user