mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-01-15 17:02:53 +08:00
1507 lines
62 KiB
C++
1507 lines
62 KiB
C++
/*
|
|
* Copyright (C) 2010-2021 Arm Limited or its affiliates. All rights reserved.
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the License); you may
|
|
* not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an AS IS BASIS, WITHOUT
|
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
/* ----------------------------------------------------------------------
|
|
* Project: Arm-2D Library
|
|
* Title: __arm_2d_alpha_blending_wrapper.inc
|
|
* Description: c code template for copy and fill like operations
|
|
*
|
|
* $Date: 06. Oct 2021
|
|
* $Revision: V.1.0.0
|
|
*
|
|
* -------------------------------------------------------------------- */
|
|
|
|
#ifndef __API_ABW_COLOUR
|
|
# error You have to define __API_ABW_COLOUR before using this c template
|
|
#endif
|
|
#ifndef __API_ABW_INT_TYPE
|
|
# error You have to define the __API_ABW_INT_TYPE before using this c template
|
|
#endif
|
|
#ifndef __API_ABW_INT_TYPE_BIT_NUM
|
|
# error You have to define the __API_ABW_INT_TYPE_BIT_NUM before using this c template
|
|
#endif
|
|
#ifndef __API_ABW_COLOUR_SZ
|
|
# error You have to define the __API_ABW_COLOUR_SZ before using this c template
|
|
#endif
|
|
|
|
#undef ____ABW_FUNC
|
|
#undef ___ABW_FUNC
|
|
#undef __ABW_FUNC
|
|
|
|
|
|
|
|
#ifndef __API_ABW_OP_NAME
|
|
# define ____ABW_FUNC(__NAME, __COLOUR) \
|
|
__arm_2d_##__COLOUR##_sw_##__NAME
|
|
# define ___ABW_FUNC(__NAME, __COLOUR) ____ABW_FUNC(__NAME, __COLOUR)
|
|
#else
|
|
# define _____ABW_FUNC(__OP_NAME, __NAME, __COLOUR) \
|
|
__arm_2d_##__COLOUR##_sw_##__OP_NAME##_##__NAME
|
|
# define ____ABW_FUNC(__OP_NAME, __NAME, __COLOUR) \
|
|
_____ABW_FUNC(__OP_NAME, __NAME, __COLOUR)
|
|
# define ___ABW_FUNC(__NAME, __COLOUR) \
|
|
____ABW_FUNC(__API_ABW_OP_NAME, __NAME, __COLOUR)
|
|
#endif
|
|
|
|
#define __ABW_FUNC(__NAME) ___ABW_FUNC(__NAME, __API_ABW_COLOUR)
|
|
|
|
|
|
|
|
|
|
#undef ____ABW_LL_FUNC
|
|
#undef ___ABW_LL_FUNC
|
|
#undef __ABW_LL_FUNC
|
|
|
|
|
|
|
|
#ifndef __API_ABW_LL_OP_NAME
|
|
# define ____ABW_LL_FUNC(__NAME, __COLOUR) \
|
|
__arm_2d_impl_##__COLOUR##_##__NAME
|
|
# define ___ABW_LL_FUNC(__NAME, __COLOUR) ____ABW_LL_FUNC(__NAME, __COLOUR)
|
|
#else
|
|
# define _____ABW_LL_FUNC(__OP_NAME, __NAME, __COLOUR) \
|
|
__arm_2d_impl_##__COLOUR##_##__OP_NAME##_##__NAME
|
|
# define ____ABW_LL_FUNC(__OP_NAME, __NAME, __COLOUR) \
|
|
_____ABW_LL_FUNC(__OP_NAME, __NAME, __COLOUR)
|
|
# define ___ABW_LL_FUNC(__NAME, __COLOUR) \
|
|
____ABW_LL_FUNC(__API_ABW_LL_OP_NAME, __NAME, __COLOUR)
|
|
#endif
|
|
|
|
#define __ABW_LL_FUNC(__NAME) ___ABW_LL_FUNC(__NAME, __API_ABW_COLOUR)
|
|
|
|
|
|
#undef ____ABW_TYPE
|
|
#undef ___ABW_TYPE
|
|
#undef __ABW_TYPE
|
|
|
|
#ifndef __API_ABW_OP_NAME
|
|
# define ____ABW_TYPE(__NAME, __COLOUR) arm_2d_##__COLOUR##_##__NAME
|
|
# define ___ABW_TYPE(__NAME, __COLOUR) ____ABW_TYPE(__NAME, __COLOUR)
|
|
#else
|
|
# define _____ABW_TYPE(__OP_NAME, __NAME, __COLOUR) \
|
|
arm_2d_##__COLOUR##_##__OP_NAME##_##__NAME
|
|
# define ____ABW_TYPE(__OP_NAME, __NAME, __COLOUR) \
|
|
_____ABW_TYPE(__OP_NAME, __NAME, __COLOUR)
|
|
# define ___ABW_TYPE(__NAME, __COLOUR) \
|
|
____ABW_TYPE(__API_ABW_OP_NAME, __NAME, __COLOUR)
|
|
#endif
|
|
|
|
|
|
#define __ABW_TYPE(__NAME) ___ABW_TYPE(__NAME, __API_ABW_COLOUR)
|
|
|
|
|
|
|
|
arm_fsm_rt_t __ABW_FUNC(tile_copy_with_src_mask)( __arm_2d_sub_task_t *ptTask)
|
|
{
|
|
ARM_2D_IMPL(arm_2d_op_cp_msk_t, ptTask->ptOP);
|
|
assert(__API_ABW_COLOUR_SZ == OP_CORE.ptOp->Info.Colour.u3ColourSZ);
|
|
|
|
//! this should not happen
|
|
assert(NULL != this.Mask.ptSourceSide);
|
|
|
|
if (ptTask->Param.tCopyMask.tSrcMask.bInvalid) {
|
|
return (arm_fsm_rt_t)ARM_2D_ERR_INVALID_PARAM;
|
|
}
|
|
|
|
uint32_t wMode = this.wMode;
|
|
|
|
|
|
if (ARM_2D_CHANNEL_8in32 == ptTask->Param.tCopyMask.tSrcMask.tColour.chScheme) {
|
|
|
|
#if __ARM_2D_CFG_SUPPORT_COLOUR_CHANNEL_ACCESS__
|
|
if (wMode & (ARM_2D_CP_MODE_Y_MIRROR | ARM_2D_CP_MODE_X_MIRROR)) {
|
|
__ABW_LL_FUNC(src_chn_msk_copy_mirror)(
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.iStride,
|
|
|
|
ptTask->Param.tCopyMask.tSrcMask.pBuffer,
|
|
ptTask->Param.tCopyMask.tSrcMask.iStride,
|
|
&ptTask->Param.tCopyMask.tSrcMask.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.iStride,
|
|
|
|
&ptTask->Param.tCopy.tCopySize,
|
|
wMode);
|
|
} else {
|
|
__ABW_LL_FUNC(src_chn_msk_copy)(
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.iStride,
|
|
|
|
ptTask->Param.tCopyMask.tSrcMask.pBuffer,
|
|
ptTask->Param.tCopyMask.tSrcMask.iStride,
|
|
&ptTask->Param.tCopyMask.tSrcMask.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.iStride,
|
|
|
|
&ptTask->Param.tCopy.tCopySize);
|
|
}
|
|
#else
|
|
return (arm_fsm_rt_t)ARM_2D_ERR_UNSUPPORTED_COLOUR;
|
|
#endif
|
|
} else {
|
|
assert( ARM_2D_COLOUR_8BIT
|
|
== ptTask->Param.tCopyMask.tSrcMask.tColour.chScheme);
|
|
|
|
if (wMode & (ARM_2D_CP_MODE_Y_MIRROR | ARM_2D_CP_MODE_X_MIRROR)) {
|
|
__ABW_LL_FUNC(src_msk_copy_mirror)(
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.iStride,
|
|
|
|
ptTask->Param.tCopyMask.tSrcMask.pBuffer,
|
|
ptTask->Param.tCopyMask.tSrcMask.iStride,
|
|
&ptTask->Param.tCopyMask.tSrcMask.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.iStride,
|
|
|
|
&ptTask->Param.tCopy.tCopySize,
|
|
wMode);
|
|
} else {
|
|
__ABW_LL_FUNC(src_msk_copy)(
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.iStride,
|
|
|
|
ptTask->Param.tCopyMask.tSrcMask.pBuffer,
|
|
ptTask->Param.tCopyMask.tSrcMask.iStride,
|
|
&ptTask->Param.tCopyMask.tSrcMask.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.iStride,
|
|
|
|
&ptTask->Param.tCopy.tCopySize);
|
|
}
|
|
}
|
|
|
|
return arm_fsm_rt_cpl;
|
|
}
|
|
|
|
arm_fsm_rt_t __ABW_FUNC(tile_copy_with_des_mask)( __arm_2d_sub_task_t *ptTask)
|
|
{
|
|
ARM_2D_IMPL(arm_2d_op_cp_msk_t, ptTask->ptOP);
|
|
assert(__API_ABW_COLOUR_SZ == OP_CORE.ptOp->Info.Colour.u3ColourSZ);
|
|
|
|
//! this should not happen
|
|
assert(NULL != this.Mask.ptTargetSide);
|
|
|
|
if (ptTask->Param.tCopyMask.tDesMask.bInvalid) {
|
|
return (arm_fsm_rt_t)ARM_2D_ERR_INVALID_PARAM;
|
|
}
|
|
|
|
uint32_t wMode = this.wMode;
|
|
|
|
|
|
if (ARM_2D_CHANNEL_8in32 == ptTask->Param.tCopyMask.tDesMask.tColour.chScheme) {
|
|
|
|
#if __ARM_2D_CFG_SUPPORT_COLOUR_CHANNEL_ACCESS__
|
|
/*! \note 1 horizontal line target mask in ARM_2D_CHANNEL_8in32 is not
|
|
*! supported when ptTask->Param.tCopy.tCopySize.iHeight is larger
|
|
*! than 1 line.
|
|
*/
|
|
|
|
assert ( ptTask->Param.tCopyMask.tDesMask.tValidRegion.tSize.iHeight
|
|
>= ptTask->Param.tCopy.tCopySize.iHeight);
|
|
|
|
if (wMode & (ARM_2D_CP_MODE_Y_MIRROR | ARM_2D_CP_MODE_X_MIRROR)) {
|
|
|
|
|
|
__ABW_LL_FUNC(des_chn_msk_copy_mirror)(
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.iStride,
|
|
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.iStride,
|
|
|
|
|
|
ptTask->Param.tCopyMask.tDesMask.pBuffer,
|
|
ptTask->Param.tCopyMask.tDesMask.iStride,
|
|
&ptTask->Param.tCopyMask.tDesMask.tValidRegion.tSize,
|
|
&ptTask->Param.tCopy.tCopySize,
|
|
wMode);
|
|
|
|
} else {
|
|
|
|
__ABW_LL_FUNC(des_chn_msk_copy)(
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.iStride,
|
|
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.iStride,
|
|
|
|
|
|
ptTask->Param.tCopyMask.tDesMask.pBuffer,
|
|
ptTask->Param.tCopyMask.tDesMask.iStride,
|
|
&ptTask->Param.tCopyMask.tDesMask.tValidRegion.tSize,
|
|
&ptTask->Param.tCopy.tCopySize);
|
|
}
|
|
#else
|
|
return (arm_fsm_rt_t)ARM_2D_ERR_UNSUPPORTED_COLOUR;
|
|
#endif
|
|
|
|
} else
|
|
|
|
|
|
{
|
|
assert( ARM_2D_COLOUR_8BIT
|
|
== ptTask->Param.tCopyMask.tDesMask.tColour.chScheme);
|
|
|
|
if (wMode & (ARM_2D_CP_MODE_Y_MIRROR | ARM_2D_CP_MODE_X_MIRROR)) {
|
|
|
|
if (ptTask->Param.tCopyMask.tDesMask.tValidRegion.tSize.iHeight > 1) {
|
|
__ABW_LL_FUNC(des_msk_copy_mirror)(
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.iStride,
|
|
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.iStride,
|
|
|
|
|
|
ptTask->Param.tCopyMask.tDesMask.pBuffer,
|
|
ptTask->Param.tCopyMask.tDesMask.iStride,
|
|
&ptTask->Param.tCopyMask.tDesMask.tValidRegion.tSize,
|
|
&ptTask->Param.tCopy.tCopySize,
|
|
wMode);
|
|
} else {
|
|
__ABW_LL_FUNC(1h_des_msk_copy_mirror)(
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.iStride,
|
|
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.iStride,
|
|
|
|
|
|
ptTask->Param.tCopyMask.tDesMask.pBuffer,
|
|
ptTask->Param.tCopyMask.tDesMask.iStride,
|
|
&ptTask->Param.tCopyMask.tDesMask.tValidRegion.tSize,
|
|
&ptTask->Param.tCopy.tCopySize,
|
|
wMode);
|
|
}
|
|
|
|
} else {
|
|
if (ptTask->Param.tCopyMask.tDesMask.tValidRegion.tSize.iHeight > 1) {
|
|
__ABW_LL_FUNC(des_msk_copy)(
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.iStride,
|
|
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.iStride,
|
|
|
|
|
|
ptTask->Param.tCopyMask.tDesMask.pBuffer,
|
|
ptTask->Param.tCopyMask.tDesMask.iStride,
|
|
&ptTask->Param.tCopyMask.tDesMask.tValidRegion.tSize,
|
|
&ptTask->Param.tCopy.tCopySize);
|
|
} else {
|
|
__ABW_LL_FUNC(1h_des_msk_copy)(
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.iStride,
|
|
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.iStride,
|
|
|
|
|
|
ptTask->Param.tCopyMask.tDesMask.pBuffer,
|
|
ptTask->Param.tCopyMask.tDesMask.iStride,
|
|
&ptTask->Param.tCopyMask.tDesMask.tValidRegion.tSize,
|
|
&ptTask->Param.tCopy.tCopySize);
|
|
}
|
|
}
|
|
}
|
|
|
|
return arm_fsm_rt_cpl;
|
|
}
|
|
|
|
|
|
arm_fsm_rt_t __ABW_FUNC(tile_copy_with_masks)( __arm_2d_sub_task_t *ptTask)
|
|
{
|
|
ARM_2D_IMPL(arm_2d_op_cp_msk_t, ptTask->ptOP);
|
|
assert(__API_ABW_COLOUR_SZ == OP_CORE.ptOp->Info.Colour.u3ColourSZ);
|
|
|
|
//! this should not happen
|
|
assert(!( (NULL == this.Mask.ptSourceSide)
|
|
&& (NULL == this.Mask.ptTargetSide)));
|
|
|
|
if ( (ptTask->Param.tCopyMask.tSrcMask.bInvalid)
|
|
|| (ptTask->Param.tCopyMask.tDesMask.bInvalid)) {
|
|
return (arm_fsm_rt_t)ARM_2D_ERR_INVALID_PARAM;
|
|
}
|
|
|
|
|
|
uint32_t wMode = this.wMode;
|
|
|
|
if ( ( ARM_2D_CHANNEL_8in32
|
|
== ptTask->Param.tCopyMask.tSrcMask.tColour.chScheme)
|
|
&& ( ARM_2D_CHANNEL_8in32
|
|
== ptTask->Param.tCopyMask.tDesMask.tColour.chScheme)) {
|
|
#if __ARM_2D_CFG_SUPPORT_COLOUR_CHANNEL_ACCESS__
|
|
/*! \note both masks use ARM_2D_CHANNEL_8in32 format
|
|
*!
|
|
*! \note 1 horizontal line target mask in ARM_2D_CHANNEL_8in32 is not
|
|
*! supported when ptTask->Param.tCopy.tCopySize.iHeight is larger
|
|
*! than 1 line.
|
|
*/
|
|
|
|
assert ( ptTask->Param.tCopyMask.tDesMask.tValidRegion.tSize.iHeight
|
|
>= ptTask->Param.tCopy.tCopySize.iHeight);
|
|
|
|
if (wMode & (ARM_2D_CP_MODE_Y_MIRROR | ARM_2D_CP_MODE_X_MIRROR)) {
|
|
|
|
__ABW_LL_FUNC(src_chn_msk_des_chn_msk_copy_mirror)(
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.iStride,
|
|
|
|
ptTask->Param.tCopyMask.tSrcMask.pBuffer,
|
|
ptTask->Param.tCopyMask.tSrcMask.iStride,
|
|
&ptTask->Param.tCopyMask.tSrcMask.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.iStride,
|
|
|
|
|
|
ptTask->Param.tCopyMask.tDesMask.pBuffer,
|
|
ptTask->Param.tCopyMask.tDesMask.iStride,
|
|
&ptTask->Param.tCopyMask.tDesMask.tValidRegion.tSize,
|
|
&ptTask->Param.tCopy.tCopySize,
|
|
wMode);
|
|
|
|
} else {
|
|
|
|
__ABW_LL_FUNC(src_chn_msk_des_chn_msk_copy)(
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.iStride,
|
|
|
|
ptTask->Param.tCopyMask.tSrcMask.pBuffer,
|
|
ptTask->Param.tCopyMask.tSrcMask.iStride,
|
|
&ptTask->Param.tCopyMask.tSrcMask.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.iStride,
|
|
|
|
|
|
ptTask->Param.tCopyMask.tDesMask.pBuffer,
|
|
ptTask->Param.tCopyMask.tDesMask.iStride,
|
|
&ptTask->Param.tCopyMask.tDesMask.tValidRegion.tSize,
|
|
&ptTask->Param.tCopy.tCopySize);
|
|
}
|
|
#else
|
|
return (arm_fsm_rt_t)ARM_2D_ERR_UNSUPPORTED_COLOUR;
|
|
#endif
|
|
|
|
} else if ( ( ARM_2D_CHANNEL_8in32
|
|
== ptTask->Param.tCopyMask.tSrcMask.tColour.chScheme)
|
|
&& ( ARM_2D_CHANNEL_8in32
|
|
!= ptTask->Param.tCopyMask.tDesMask.tColour.chScheme)) {
|
|
|
|
#if __ARM_2D_CFG_SUPPORT_COLOUR_CHANNEL_ACCESS__
|
|
/*! only the source mask uses ARM_2D_CHANNEL_8in32 format */
|
|
if (wMode & (ARM_2D_CP_MODE_Y_MIRROR | ARM_2D_CP_MODE_X_MIRROR)) {
|
|
if (ptTask->Param.tCopyMask.tDesMask.tValidRegion.tSize.iHeight > 1) {
|
|
__ABW_LL_FUNC(src_chn_msk_des_msk_copy_mirror)(
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.iStride,
|
|
|
|
ptTask->Param.tCopyMask.tSrcMask.pBuffer,
|
|
ptTask->Param.tCopyMask.tSrcMask.iStride,
|
|
&ptTask->Param.tCopyMask.tSrcMask.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.iStride,
|
|
|
|
|
|
ptTask->Param.tCopyMask.tDesMask.pBuffer,
|
|
ptTask->Param.tCopyMask.tDesMask.iStride,
|
|
&ptTask->Param.tCopyMask.tDesMask.tValidRegion.tSize,
|
|
&ptTask->Param.tCopy.tCopySize,
|
|
wMode);
|
|
} else {
|
|
__ABW_LL_FUNC(src_chn_msk_1h_des_msk_copy_mirror)(
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.iStride,
|
|
|
|
ptTask->Param.tCopyMask.tSrcMask.pBuffer,
|
|
ptTask->Param.tCopyMask.tSrcMask.iStride,
|
|
&ptTask->Param.tCopyMask.tSrcMask.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.iStride,
|
|
|
|
|
|
ptTask->Param.tCopyMask.tDesMask.pBuffer,
|
|
ptTask->Param.tCopyMask.tDesMask.iStride,
|
|
&ptTask->Param.tCopyMask.tDesMask.tValidRegion.tSize,
|
|
&ptTask->Param.tCopy.tCopySize,
|
|
wMode);
|
|
}
|
|
|
|
} else {
|
|
if (ptTask->Param.tCopyMask.tDesMask.tValidRegion.tSize.iHeight > 1) {
|
|
__ABW_LL_FUNC(src_chn_msk_des_msk_copy)(
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.iStride,
|
|
|
|
ptTask->Param.tCopyMask.tSrcMask.pBuffer,
|
|
ptTask->Param.tCopyMask.tSrcMask.iStride,
|
|
&ptTask->Param.tCopyMask.tSrcMask.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.iStride,
|
|
|
|
|
|
ptTask->Param.tCopyMask.tDesMask.pBuffer,
|
|
ptTask->Param.tCopyMask.tDesMask.iStride,
|
|
&ptTask->Param.tCopyMask.tDesMask.tValidRegion.tSize,
|
|
&ptTask->Param.tCopy.tCopySize);
|
|
} else {
|
|
__ABW_LL_FUNC(src_chn_msk_1h_des_msk_copy)(
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.iStride,
|
|
|
|
ptTask->Param.tCopyMask.tSrcMask.pBuffer,
|
|
ptTask->Param.tCopyMask.tSrcMask.iStride,
|
|
&ptTask->Param.tCopyMask.tSrcMask.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.iStride,
|
|
|
|
|
|
ptTask->Param.tCopyMask.tDesMask.pBuffer,
|
|
ptTask->Param.tCopyMask.tDesMask.iStride,
|
|
&ptTask->Param.tCopyMask.tDesMask.tValidRegion.tSize,
|
|
&ptTask->Param.tCopy.tCopySize);
|
|
}
|
|
}
|
|
#else
|
|
return (arm_fsm_rt_t)ARM_2D_ERR_UNSUPPORTED_COLOUR;
|
|
#endif
|
|
|
|
} else if ( ( ARM_2D_CHANNEL_8in32
|
|
!= ptTask->Param.tCopyMask.tSrcMask.tColour.chScheme)
|
|
&& ( ARM_2D_CHANNEL_8in32
|
|
== ptTask->Param.tCopyMask.tDesMask.tColour.chScheme)) {
|
|
|
|
#if __ARM_2D_CFG_SUPPORT_COLOUR_CHANNEL_ACCESS__
|
|
/*! \note only the target mask uses ARM_2D_CHANNEL_8in32 format
|
|
*!
|
|
*! \note 1 horizontal line target mask in ARM_2D_CHANNEL_8in32 is not
|
|
*! supported when ptTask->Param.tCopy.tCopySize.iHeight is larger
|
|
*! than 1 line.
|
|
*/
|
|
|
|
assert ( ptTask->Param.tCopyMask.tDesMask.tValidRegion.tSize.iHeight
|
|
>= ptTask->Param.tCopy.tCopySize.iHeight);
|
|
|
|
if (wMode & (ARM_2D_CP_MODE_Y_MIRROR | ARM_2D_CP_MODE_X_MIRROR)) {
|
|
|
|
__ABW_LL_FUNC(masks_copy_mirror)(
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.iStride,
|
|
|
|
ptTask->Param.tCopyMask.tSrcMask.pBuffer,
|
|
ptTask->Param.tCopyMask.tSrcMask.iStride,
|
|
&ptTask->Param.tCopyMask.tSrcMask.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.iStride,
|
|
|
|
|
|
ptTask->Param.tCopyMask.tDesMask.pBuffer,
|
|
ptTask->Param.tCopyMask.tDesMask.iStride,
|
|
&ptTask->Param.tCopyMask.tDesMask.tValidRegion.tSize,
|
|
&ptTask->Param.tCopy.tCopySize,
|
|
wMode);
|
|
|
|
} else {
|
|
|
|
__ABW_LL_FUNC(masks_copy)(
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.iStride,
|
|
|
|
ptTask->Param.tCopyMask.tSrcMask.pBuffer,
|
|
ptTask->Param.tCopyMask.tSrcMask.iStride,
|
|
&ptTask->Param.tCopyMask.tSrcMask.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.iStride,
|
|
|
|
|
|
ptTask->Param.tCopyMask.tDesMask.pBuffer,
|
|
ptTask->Param.tCopyMask.tDesMask.iStride,
|
|
&ptTask->Param.tCopyMask.tDesMask.tValidRegion.tSize,
|
|
&ptTask->Param.tCopy.tCopySize);
|
|
|
|
}
|
|
#else
|
|
return (arm_fsm_rt_t)ARM_2D_ERR_UNSUPPORTED_COLOUR;
|
|
#endif
|
|
|
|
} else {
|
|
assert( ARM_2D_COLOUR_8BIT
|
|
== ptTask->Param.tCopyMask.tSrcMask.tColour.chScheme);
|
|
assert( ARM_2D_COLOUR_8BIT
|
|
== ptTask->Param.tCopyMask.tDesMask.tColour.chScheme);
|
|
|
|
if (wMode & (ARM_2D_CP_MODE_Y_MIRROR | ARM_2D_CP_MODE_X_MIRROR)) {
|
|
if (ptTask->Param.tCopyMask.tDesMask.tValidRegion.tSize.iHeight > 1) {
|
|
__ABW_LL_FUNC(masks_copy_mirror)(
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.iStride,
|
|
|
|
ptTask->Param.tCopyMask.tSrcMask.pBuffer,
|
|
ptTask->Param.tCopyMask.tSrcMask.iStride,
|
|
&ptTask->Param.tCopyMask.tSrcMask.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.iStride,
|
|
|
|
|
|
ptTask->Param.tCopyMask.tDesMask.pBuffer,
|
|
ptTask->Param.tCopyMask.tDesMask.iStride,
|
|
&ptTask->Param.tCopyMask.tDesMask.tValidRegion.tSize,
|
|
&ptTask->Param.tCopy.tCopySize,
|
|
wMode);
|
|
} else {
|
|
__ABW_LL_FUNC(src_msk_1h_des_msk_copy_mirror)(
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.iStride,
|
|
|
|
ptTask->Param.tCopyMask.tSrcMask.pBuffer,
|
|
ptTask->Param.tCopyMask.tSrcMask.iStride,
|
|
&ptTask->Param.tCopyMask.tSrcMask.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.iStride,
|
|
|
|
|
|
ptTask->Param.tCopyMask.tDesMask.pBuffer,
|
|
ptTask->Param.tCopyMask.tDesMask.iStride,
|
|
&ptTask->Param.tCopyMask.tDesMask.tValidRegion.tSize,
|
|
&ptTask->Param.tCopy.tCopySize,
|
|
wMode);
|
|
}
|
|
} else {
|
|
if (ptTask->Param.tCopyMask.tDesMask.tValidRegion.tSize.iHeight > 1) {
|
|
__ABW_LL_FUNC(masks_copy)(
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.iStride,
|
|
|
|
ptTask->Param.tCopyMask.tSrcMask.pBuffer,
|
|
ptTask->Param.tCopyMask.tSrcMask.iStride,
|
|
&ptTask->Param.tCopyMask.tSrcMask.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.iStride,
|
|
|
|
|
|
ptTask->Param.tCopyMask.tDesMask.pBuffer,
|
|
ptTask->Param.tCopyMask.tDesMask.iStride,
|
|
&ptTask->Param.tCopyMask.tDesMask.tValidRegion.tSize,
|
|
&ptTask->Param.tCopy.tCopySize);
|
|
} else {
|
|
__ABW_LL_FUNC(src_msk_1h_des_msk_copy)(
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tSource.iStride,
|
|
|
|
ptTask->Param.tCopyMask.tSrcMask.pBuffer,
|
|
ptTask->Param.tCopyMask.tSrcMask.iStride,
|
|
&ptTask->Param.tCopyMask.tSrcMask.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.pBuffer,
|
|
ptTask->Param.tCopyMask
|
|
.use_as____arm_2d_param_copy_t.tTarget.iStride,
|
|
|
|
|
|
ptTask->Param.tCopyMask.tDesMask.pBuffer,
|
|
ptTask->Param.tCopyMask.tDesMask.iStride,
|
|
&ptTask->Param.tCopyMask.tDesMask.tValidRegion.tSize,
|
|
&ptTask->Param.tCopy.tCopySize);
|
|
}
|
|
}
|
|
}
|
|
|
|
return arm_fsm_rt_cpl;
|
|
}
|
|
|
|
#if 0 /*! smart leads to larger code size */
|
|
arm_fsm_rt_t __ABW_FUNC(tile_copy_with_mask)( __arm_2d_sub_task_t *ptTask)
|
|
{
|
|
ARM_2D_IMPL(arm_2d_op_cp_msk_t, ptTask->ptOP);
|
|
assert(__API_ABW_COLOUR_SZ == OP_CORE.ptOp->Info.Colour.u3ColourSZ);
|
|
|
|
//! this should not happen
|
|
assert(!( (NULL == this.Mask.ptSourceSide)
|
|
&& (NULL == this.Mask.ptTargetSide)));
|
|
|
|
if ( (!ptTask->Param.tCopyMask.tSrcMask.bInvalid)
|
|
&& (ptTask->Param.tCopyMask.tDesMask.bInvalid)) {
|
|
//! it only contains a mask on the source side
|
|
return __ABW_FUNC(tile_copy_with_src_mask)(ptTask);
|
|
} else if ( (ptTask->Param.tCopyMask.tSrcMask.bInvalid)
|
|
&& (!ptTask->Param.tCopyMask.tDesMask.bInvalid)) {
|
|
//! it only contains a mask on the target side
|
|
return __ABW_FUNC(tile_copy_with_des_mask)(ptTask);
|
|
} else if ( (!ptTask->Param.tCopyMask.tSrcMask.bInvalid)
|
|
&& (!ptTask->Param.tCopyMask.tDesMask.bInvalid)) {
|
|
//! it contains masks on both sides
|
|
return __ABW_FUNC(tile_copy_with_masks)(ptTask);
|
|
} else {
|
|
//! it contains no mask
|
|
return (arm_fsm_rt_t)ARM_2D_ERR_INVALID_PARAM;
|
|
}
|
|
|
|
//return arm_fsm_rt_cpl;
|
|
}
|
|
#endif
|
|
|
|
|
|
arm_fsm_rt_t __ABW_FUNC(tile_fill_with_src_mask)( __arm_2d_sub_task_t *ptTask)
|
|
{
|
|
ARM_2D_IMPL(arm_2d_op_cp_msk_t, ptTask->ptOP);
|
|
assert(__API_ABW_COLOUR_SZ == OP_CORE.ptOp->Info.Colour.u3ColourSZ);
|
|
|
|
//! this should not happen
|
|
assert(NULL != this.Mask.ptSourceSide);
|
|
|
|
if (ptTask->Param.tFillMask.tSrcMask.bInvalid) {
|
|
return (arm_fsm_rt_t)ARM_2D_ERR_INVALID_PARAM;
|
|
}
|
|
|
|
uint32_t wMode = this.wMode;
|
|
|
|
|
|
|
|
if ( ARM_2D_CHANNEL_8in32
|
|
== ptTask->Param.tFillMask.tSrcMask.tColour.chScheme) {
|
|
|
|
#if __ARM_2D_CFG_SUPPORT_COLOUR_CHANNEL_ACCESS__
|
|
if (wMode & (ARM_2D_CP_MODE_Y_MIRROR | ARM_2D_CP_MODE_X_MIRROR)) {
|
|
|
|
__ABW_LL_FUNC(src_chn_msk_fill_mirror)(
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tFillMask.tSrcMask.pBuffer,
|
|
ptTask->Param.tFillMask.tSrcMask.iStride,
|
|
&ptTask->Param.tFillMask.tSrcMask.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.tValidRegion.tSize,
|
|
wMode);
|
|
|
|
|
|
} else {
|
|
__ABW_LL_FUNC(src_chn_msk_fill)(
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tFillMask.tSrcMask.pBuffer,
|
|
ptTask->Param.tFillMask.tSrcMask.iStride,
|
|
&ptTask->Param.tFillMask.tSrcMask.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.tValidRegion.tSize);
|
|
}
|
|
#else
|
|
return (arm_fsm_rt_t)ARM_2D_ERR_UNSUPPORTED_COLOUR;
|
|
#endif
|
|
|
|
} else {
|
|
assert( ARM_2D_COLOUR_8BIT
|
|
== ptTask->Param.tFillMask.tSrcMask.tColour.chScheme);
|
|
|
|
if (wMode & (ARM_2D_CP_MODE_Y_MIRROR | ARM_2D_CP_MODE_X_MIRROR)) {
|
|
|
|
__ABW_LL_FUNC(src_msk_fill_mirror)(
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tFillMask.tSrcMask.pBuffer,
|
|
ptTask->Param.tFillMask.tSrcMask.iStride,
|
|
&ptTask->Param.tFillMask.tSrcMask.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.tValidRegion.tSize,
|
|
wMode);
|
|
|
|
|
|
} else {
|
|
__ABW_LL_FUNC(src_msk_fill)(
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tFillMask.tSrcMask.pBuffer,
|
|
ptTask->Param.tFillMask.tSrcMask.iStride,
|
|
&ptTask->Param.tFillMask.tSrcMask.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.tValidRegion.tSize);
|
|
}
|
|
}
|
|
|
|
|
|
return arm_fsm_rt_cpl;
|
|
}
|
|
|
|
arm_fsm_rt_t __ABW_FUNC(tile_fill_with_des_mask)( __arm_2d_sub_task_t *ptTask)
|
|
{
|
|
ARM_2D_IMPL(arm_2d_op_cp_msk_t, ptTask->ptOP);
|
|
assert(__API_ABW_COLOUR_SZ == OP_CORE.ptOp->Info.Colour.u3ColourSZ);
|
|
|
|
//! this should not happen
|
|
assert(NULL != this.Mask.ptTargetSide);
|
|
|
|
if (ptTask->Param.tFillMask.tDesMask.bInvalid) {
|
|
return (arm_fsm_rt_t)ARM_2D_ERR_INVALID_PARAM;
|
|
}
|
|
|
|
uint32_t wMode = this.wMode;
|
|
|
|
if ( ARM_2D_CHANNEL_8in32
|
|
== ptTask->Param.tFillMask.tDesMask.tColour.chScheme) {
|
|
|
|
#if __ARM_2D_CFG_SUPPORT_COLOUR_CHANNEL_ACCESS__
|
|
/*! \note 1 horizontal line target mask in ARM_2D_CHANNEL_8in32 is not
|
|
*! supported when ptTask->Param.tCopy.tCopySize.iHeight is larger
|
|
*! than 1 line.
|
|
*/
|
|
|
|
assert ( ptTask->Param.tFillMask.tDesMask.tValidRegion.tSize.iHeight
|
|
>= ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t
|
|
.tTarget.tValidRegion.tSize.iHeight);
|
|
|
|
if (wMode & (ARM_2D_CP_MODE_Y_MIRROR | ARM_2D_CP_MODE_X_MIRROR)) {
|
|
|
|
__ABW_LL_FUNC(des_chn_msk_fill_mirror)(
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.tValidRegion.tSize,
|
|
|
|
|
|
ptTask->Param.tFillMask.tDesMask.pBuffer,
|
|
ptTask->Param.tFillMask.tDesMask.iStride,
|
|
&ptTask->Param.tFillMask.tDesMask.tValidRegion.tSize,
|
|
wMode);
|
|
|
|
|
|
} else {
|
|
|
|
__ABW_LL_FUNC(des_chn_msk_fill)(
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.tValidRegion.tSize,
|
|
|
|
|
|
ptTask->Param.tFillMask.tDesMask.pBuffer,
|
|
ptTask->Param.tFillMask.tDesMask.iStride,
|
|
&ptTask->Param.tFillMask.tDesMask.tValidRegion.tSize);
|
|
|
|
}
|
|
#else
|
|
return (arm_fsm_rt_t)ARM_2D_ERR_UNSUPPORTED_COLOUR;
|
|
#endif
|
|
|
|
} else {
|
|
assert( ARM_2D_COLOUR_8BIT
|
|
== ptTask->Param.tFillMask.tDesMask.tColour.chScheme);
|
|
|
|
if (wMode & (ARM_2D_CP_MODE_Y_MIRROR | ARM_2D_CP_MODE_X_MIRROR)) {
|
|
|
|
if (ptTask->Param.tFillMask.tDesMask.tValidRegion.tSize.iHeight > 1) {
|
|
__ABW_LL_FUNC(des_msk_fill_mirror)(
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.tValidRegion.tSize,
|
|
|
|
|
|
ptTask->Param.tFillMask.tDesMask.pBuffer,
|
|
ptTask->Param.tFillMask.tDesMask.iStride,
|
|
&ptTask->Param.tFillMask.tDesMask.tValidRegion.tSize,
|
|
wMode);
|
|
} else {
|
|
__ABW_LL_FUNC(1h_des_msk_fill_mirror)(
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.tValidRegion.tSize,
|
|
|
|
|
|
ptTask->Param.tFillMask.tDesMask.pBuffer,
|
|
ptTask->Param.tFillMask.tDesMask.iStride,
|
|
&ptTask->Param.tFillMask.tDesMask.tValidRegion.tSize,
|
|
wMode);
|
|
}
|
|
|
|
} else {
|
|
if (ptTask->Param.tFillMask.tDesMask.tValidRegion.tSize.iHeight > 1) {
|
|
__ABW_LL_FUNC(des_msk_fill)(
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.tValidRegion.tSize,
|
|
|
|
|
|
ptTask->Param.tFillMask.tDesMask.pBuffer,
|
|
ptTask->Param.tFillMask.tDesMask.iStride,
|
|
&ptTask->Param.tFillMask.tDesMask.tValidRegion.tSize);
|
|
} else {
|
|
__ABW_LL_FUNC(1h_des_msk_fill)(
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.tValidRegion.tSize,
|
|
|
|
|
|
ptTask->Param.tFillMask.tDesMask.pBuffer,
|
|
ptTask->Param.tFillMask.tDesMask.iStride,
|
|
&ptTask->Param.tFillMask.tDesMask.tValidRegion.tSize);
|
|
}
|
|
}
|
|
}
|
|
|
|
return arm_fsm_rt_cpl;
|
|
}
|
|
|
|
arm_fsm_rt_t __ABW_FUNC(tile_fill_with_masks)( __arm_2d_sub_task_t *ptTask)
|
|
{
|
|
ARM_2D_IMPL(arm_2d_op_cp_msk_t, ptTask->ptOP);
|
|
assert(__API_ABW_COLOUR_SZ == OP_CORE.ptOp->Info.Colour.u3ColourSZ);
|
|
|
|
//! this should not happen
|
|
assert(!( (NULL == this.Mask.ptSourceSide)
|
|
&& (NULL == this.Mask.ptTargetSide)));
|
|
|
|
if ( (ptTask->Param.tFillMask.tSrcMask.bInvalid)
|
|
|| (ptTask->Param.tFillMask.tDesMask.bInvalid)) {
|
|
return (arm_fsm_rt_t)ARM_2D_ERR_INVALID_PARAM;
|
|
}
|
|
|
|
uint32_t wMode = this.wMode;
|
|
|
|
|
|
if ( ( ARM_2D_CHANNEL_8in32
|
|
== ptTask->Param.tFillMask.tSrcMask.tColour.chScheme)
|
|
&& ( ARM_2D_CHANNEL_8in32
|
|
== ptTask->Param.tFillMask.tDesMask.tColour.chScheme)) {
|
|
|
|
#if __ARM_2D_CFG_SUPPORT_COLOUR_CHANNEL_ACCESS__
|
|
/*! \note both masks use ARM_2D_CHANNEL_8in32 format
|
|
*!
|
|
*! \note 1 horizontal line target mask in ARM_2D_CHANNEL_8in32 is not
|
|
*! supported when
|
|
*! ptTask->Param.tFillMask
|
|
*! .use_as____arm_2d_param_fill_t
|
|
*! .tTarget.tValidRegion.tSize.iHeight
|
|
*! is larger
|
|
*! than 1 line.
|
|
*/
|
|
assert ( ptTask->Param.tFillMask.tDesMask.tValidRegion.tSize.iHeight
|
|
>= ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t
|
|
.tTarget.tValidRegion.tSize.iHeight);
|
|
|
|
if (wMode & (ARM_2D_CP_MODE_Y_MIRROR | ARM_2D_CP_MODE_X_MIRROR)) {
|
|
|
|
__ABW_LL_FUNC(src_chn_msk_des_chn_msk_fill_mirror)(
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tFillMask.tSrcMask.pBuffer,
|
|
ptTask->Param.tFillMask.tSrcMask.iStride,
|
|
&ptTask->Param.tFillMask.tSrcMask.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.tValidRegion.tSize,
|
|
|
|
|
|
ptTask->Param.tFillMask.tDesMask.pBuffer,
|
|
ptTask->Param.tFillMask.tDesMask.iStride,
|
|
&ptTask->Param.tFillMask.tDesMask.tValidRegion.tSize,
|
|
wMode);
|
|
|
|
} else {
|
|
|
|
__ABW_LL_FUNC(src_chn_msk_des_chn_msk_fill)(
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tFillMask.tSrcMask.pBuffer,
|
|
ptTask->Param.tFillMask.tSrcMask.iStride,
|
|
&ptTask->Param.tFillMask.tSrcMask.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.tValidRegion.tSize,
|
|
|
|
|
|
ptTask->Param.tFillMask.tDesMask.pBuffer,
|
|
ptTask->Param.tFillMask.tDesMask.iStride,
|
|
&ptTask->Param.tFillMask.tDesMask.tValidRegion.tSize);
|
|
|
|
}
|
|
#else
|
|
return (arm_fsm_rt_t)ARM_2D_ERR_UNSUPPORTED_COLOUR;
|
|
#endif
|
|
|
|
} else if ( ( ARM_2D_CHANNEL_8in32
|
|
== ptTask->Param.tFillMask.tSrcMask.tColour.chScheme)
|
|
&& ( ARM_2D_CHANNEL_8in32
|
|
!= ptTask->Param.tFillMask.tDesMask.tColour.chScheme)) {
|
|
|
|
#if __ARM_2D_CFG_SUPPORT_COLOUR_CHANNEL_ACCESS__
|
|
/*! \note only the source mask uses ARM_2D_CHANNEL_8in32 format
|
|
*/
|
|
|
|
if (wMode & (ARM_2D_CP_MODE_Y_MIRROR | ARM_2D_CP_MODE_X_MIRROR)) {
|
|
if (ptTask->Param.tFillMask.tDesMask.tValidRegion.tSize.iHeight > 1) {
|
|
__ABW_LL_FUNC(src_chn_msk_des_msk_fill_mirror)(
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tFillMask.tSrcMask.pBuffer,
|
|
ptTask->Param.tFillMask.tSrcMask.iStride,
|
|
&ptTask->Param.tFillMask.tSrcMask.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.tValidRegion.tSize,
|
|
|
|
|
|
ptTask->Param.tFillMask.tDesMask.pBuffer,
|
|
ptTask->Param.tFillMask.tDesMask.iStride,
|
|
&ptTask->Param.tFillMask.tDesMask.tValidRegion.tSize,
|
|
wMode);
|
|
} else {
|
|
__ABW_LL_FUNC(src_chn_msk_1h_des_msk_fill_mirror)(
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tFillMask.tSrcMask.pBuffer,
|
|
ptTask->Param.tFillMask.tSrcMask.iStride,
|
|
&ptTask->Param.tFillMask.tSrcMask.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.tValidRegion.tSize,
|
|
|
|
|
|
ptTask->Param.tFillMask.tDesMask.pBuffer,
|
|
ptTask->Param.tFillMask.tDesMask.iStride,
|
|
&ptTask->Param.tFillMask.tDesMask.tValidRegion.tSize,
|
|
wMode);
|
|
}
|
|
} else {
|
|
if (ptTask->Param.tFillMask.tDesMask.tValidRegion.tSize.iHeight > 1) {
|
|
__ABW_LL_FUNC(src_chn_msk_des_msk_fill)(
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tFillMask.tSrcMask.pBuffer,
|
|
ptTask->Param.tFillMask.tSrcMask.iStride,
|
|
&ptTask->Param.tFillMask.tSrcMask.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.tValidRegion.tSize,
|
|
|
|
|
|
ptTask->Param.tFillMask.tDesMask.pBuffer,
|
|
ptTask->Param.tFillMask.tDesMask.iStride,
|
|
&ptTask->Param.tFillMask.tDesMask.tValidRegion.tSize);
|
|
} else {
|
|
__ABW_LL_FUNC(src_chn_msk_1h_des_msk_fill)(
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tFillMask.tSrcMask.pBuffer,
|
|
ptTask->Param.tFillMask.tSrcMask.iStride,
|
|
&ptTask->Param.tFillMask.tSrcMask.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.tValidRegion.tSize,
|
|
|
|
|
|
ptTask->Param.tFillMask.tDesMask.pBuffer,
|
|
ptTask->Param.tFillMask.tDesMask.iStride,
|
|
&ptTask->Param.tFillMask.tDesMask.tValidRegion.tSize);
|
|
}
|
|
}
|
|
#else
|
|
return (arm_fsm_rt_t)ARM_2D_ERR_UNSUPPORTED_COLOUR;
|
|
#endif
|
|
} else if ( ( ARM_2D_CHANNEL_8in32
|
|
!= ptTask->Param.tFillMask.tSrcMask.tColour.chScheme)
|
|
&& ( ARM_2D_CHANNEL_8in32
|
|
== ptTask->Param.tFillMask.tDesMask.tColour.chScheme)) {
|
|
|
|
#if __ARM_2D_CFG_SUPPORT_COLOUR_CHANNEL_ACCESS__
|
|
/*! \note only the target mask uses ARM_2D_CHANNEL_8in32 format
|
|
*!
|
|
*! \note 1 horizontal line target mask in ARM_2D_CHANNEL_8in32 is not
|
|
*! supported when
|
|
*! ptTask->Param.tFillMask
|
|
*! .use_as____arm_2d_param_fill_t
|
|
*! .tTarget.tValidRegion.tSize.iHeight
|
|
*! is larger
|
|
*! than 1 line.
|
|
*/
|
|
assert ( ptTask->Param.tFillMask.tDesMask.tValidRegion.tSize.iHeight
|
|
>= ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t
|
|
.tTarget.tValidRegion.tSize.iHeight);
|
|
|
|
if (wMode & (ARM_2D_CP_MODE_Y_MIRROR | ARM_2D_CP_MODE_X_MIRROR)) {
|
|
|
|
__ABW_LL_FUNC(src_msk_des_chn_msk_fill_mirror)(
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tFillMask.tSrcMask.pBuffer,
|
|
ptTask->Param.tFillMask.tSrcMask.iStride,
|
|
&ptTask->Param.tFillMask.tSrcMask.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.tValidRegion.tSize,
|
|
|
|
|
|
ptTask->Param.tFillMask.tDesMask.pBuffer,
|
|
ptTask->Param.tFillMask.tDesMask.iStride,
|
|
&ptTask->Param.tFillMask.tDesMask.tValidRegion.tSize,
|
|
wMode);
|
|
|
|
} else {
|
|
|
|
__ABW_LL_FUNC(src_msk_des_chn_msk_fill)(
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tFillMask.tSrcMask.pBuffer,
|
|
ptTask->Param.tFillMask.tSrcMask.iStride,
|
|
&ptTask->Param.tFillMask.tSrcMask.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.tValidRegion.tSize,
|
|
|
|
|
|
ptTask->Param.tFillMask.tDesMask.pBuffer,
|
|
ptTask->Param.tFillMask.tDesMask.iStride,
|
|
&ptTask->Param.tFillMask.tDesMask.tValidRegion.tSize);
|
|
|
|
}
|
|
#else
|
|
return (arm_fsm_rt_t)ARM_2D_ERR_UNSUPPORTED_COLOUR;
|
|
#endif
|
|
|
|
} else {
|
|
if (wMode & (ARM_2D_CP_MODE_Y_MIRROR | ARM_2D_CP_MODE_X_MIRROR)) {
|
|
if (ptTask->Param.tFillMask.tDesMask.tValidRegion.tSize.iHeight > 1) {
|
|
__ABW_LL_FUNC(masks_fill_mirror)(
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tFillMask.tSrcMask.pBuffer,
|
|
ptTask->Param.tFillMask.tSrcMask.iStride,
|
|
&ptTask->Param.tFillMask.tSrcMask.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.tValidRegion.tSize,
|
|
|
|
|
|
ptTask->Param.tFillMask.tDesMask.pBuffer,
|
|
ptTask->Param.tFillMask.tDesMask.iStride,
|
|
&ptTask->Param.tFillMask.tDesMask.tValidRegion.tSize,
|
|
wMode);
|
|
} else {
|
|
__ABW_LL_FUNC(src_msk_1h_des_msk_fill_mirror)(
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tFillMask.tSrcMask.pBuffer,
|
|
ptTask->Param.tFillMask.tSrcMask.iStride,
|
|
&ptTask->Param.tFillMask.tSrcMask.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.tValidRegion.tSize,
|
|
|
|
|
|
ptTask->Param.tFillMask.tDesMask.pBuffer,
|
|
ptTask->Param.tFillMask.tDesMask.iStride,
|
|
&ptTask->Param.tFillMask.tDesMask.tValidRegion.tSize,
|
|
wMode);
|
|
}
|
|
} else {
|
|
if (ptTask->Param.tFillMask.tDesMask.tValidRegion.tSize.iHeight > 1) {
|
|
__ABW_LL_FUNC(masks_fill)(
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tFillMask.tSrcMask.pBuffer,
|
|
ptTask->Param.tFillMask.tSrcMask.iStride,
|
|
&ptTask->Param.tFillMask.tSrcMask.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.tValidRegion.tSize,
|
|
|
|
|
|
ptTask->Param.tFillMask.tDesMask.pBuffer,
|
|
ptTask->Param.tFillMask.tDesMask.iStride,
|
|
&ptTask->Param.tFillMask.tDesMask.tValidRegion.tSize);
|
|
} else {
|
|
__ABW_LL_FUNC(src_msk_1h_des_msk_fill)(
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tSource.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tFillMask.tSrcMask.pBuffer,
|
|
ptTask->Param.tFillMask.tSrcMask.iStride,
|
|
&ptTask->Param.tFillMask.tSrcMask.tValidRegion.tSize,
|
|
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.pBuffer,
|
|
ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.iStride,
|
|
&ptTask->Param.tFillMask
|
|
.use_as____arm_2d_param_fill_t.tTarget.tValidRegion.tSize,
|
|
|
|
|
|
ptTask->Param.tFillMask.tDesMask.pBuffer,
|
|
ptTask->Param.tFillMask.tDesMask.iStride,
|
|
&ptTask->Param.tFillMask.tDesMask.tValidRegion.tSize);
|
|
}
|
|
}
|
|
|
|
}
|
|
return arm_fsm_rt_cpl;
|
|
}
|
|
|
|
#if 0 //! smart detection comes with 50% more code size...
|
|
arm_fsm_rt_t __ABW_FUNC(tile_fill_with_mask)( __arm_2d_sub_task_t *ptTask)
|
|
{
|
|
ARM_2D_IMPL(arm_2d_op_cp_msk_t, ptTask->ptOP);
|
|
assert(__API_ABW_COLOUR_SZ == OP_CORE.ptOp->Info.Colour.u3ColourSZ);
|
|
|
|
//! this should not happen
|
|
assert(!( (NULL == this.Mask.ptSourceSide)
|
|
&& (NULL == this.Mask.ptTargetSide)));
|
|
|
|
|
|
if ( (!ptTask->Param.tFillMask.tSrcMask.bInvalid)
|
|
&& (ptTask->Param.tFillMask.tDesMask.bInvalid)) {
|
|
//! it only contains a mask on the source side
|
|
return __ABW_FUNC(tile_fill_with_src_mask)(ptTask);
|
|
} else if ( (ptTask->Param.tFillMask.tSrcMask.bInvalid)
|
|
&& (!ptTask->Param.tFillMask.tDesMask.bInvalid)) {
|
|
//! it only contains a mask on the target side
|
|
return __ABW_FUNC(tile_fill_with_des_mask)(ptTask);
|
|
} else if ( (!ptTask->Param.tFillMask.tSrcMask.bInvalid)
|
|
&& (!ptTask->Param.tFillMask.tDesMask.bInvalid)) {
|
|
//! it contains masks on both sides
|
|
return __ABW_FUNC(tile_fill_with_masks)(ptTask);
|
|
} else {
|
|
//! it contains no mask
|
|
return (arm_fsm_rt_t)ARM_2D_ERR_INVALID_PARAM;
|
|
}
|
|
|
|
|
|
//return arm_fsm_rt_cpl;
|
|
|
|
}
|
|
#endif
|
|
|
|
|
|
|
|
#undef __API_ABW_COPY_LIKE_OP_NAME
|
|
#undef __API_ABW_COLOUR_SZ
|
|
#undef __API_ABW_OP_NAME
|
|
#undef ____ABW_FUNC
|
|
#undef ___ABW_FUNC
|
|
#undef __ABW_FUNC
|
|
#undef __API_ABW_LL_OP_NAME
|
|
#undef ____ABW_LL_FUNC
|
|
#undef ___ABW_LL_FUNC
|
|
#undef __ABW_LL_FUNC
|
|
#undef __API_ABW_COLOUR
|
|
#undef __API_ABW_INT_TYPE
|
|
#undef __API_ABW_INT_TYPE_BIT_NUM
|
|
#undef ____ABW_TYPE
|
|
#undef ___ABW_TYPE
|
|
#undef __ABW_TYPE
|