void MDP_FNCALL mdp_render_2x_cpp(MDP_Render_Info_t *renderInfo) { if (!renderInfo) return; if (renderInfo->bpp == 16 || renderInfo->bpp == 15) { #ifdef GENS_X86_ASM if (renderInfo->cpuFlags & MDP_CPUFLAG_MMX) { mdp_render_2x_16_x86_mmx( (uint16_t*)renderInfo->destScreen, (uint16_t*)renderInfo->mdScreen, renderInfo->destPitch, renderInfo->srcPitch, renderInfo->width, renderInfo->height); } else { mdp_render_2x_16_x86( (uint16_t*)renderInfo->destScreen, (uint16_t*)renderInfo->mdScreen, renderInfo->destPitch, renderInfo->srcPitch, renderInfo->width, renderInfo->height); } #else /* !GENS_X86_ASM */ T_mdp_render_2x_cpp( (uint16_t*)renderInfo->destScreen, (uint16_t*)renderInfo->mdScreen, renderInfo->destPitch, renderInfo->srcPitch, renderInfo->width, renderInfo->height); #endif /* GENS_X86_ASM */ } else { #ifdef GENS_X86_ASM if (renderInfo->cpuFlags & MDP_CPUFLAG_MMX) { mdp_render_2x_32_x86_mmx( (uint32_t*)renderInfo->destScreen, (uint32_t*)renderInfo->mdScreen, renderInfo->destPitch, renderInfo->srcPitch, renderInfo->width, renderInfo->height); } else { mdp_render_2x_32_x86( (uint32_t*)renderInfo->destScreen, (uint32_t*)renderInfo->mdScreen, renderInfo->destPitch, renderInfo->srcPitch, renderInfo->width, renderInfo->height); } #else /* !GENS_X86_ASM */ T_mdp_render_2x_cpp( (uint32_t*)renderInfo->destScreen, (uint32_t*)renderInfo->mdScreen, renderInfo->destPitch, renderInfo->srcPitch, renderInfo->width, renderInfo->height); #endif /* GENS_X86_ASM */ } }
int MDP_FNCALL mdp_render_2x_cpp(const mdp_render_info_t *render_info) { if (!render_info) return -MDP_ERR_RENDER_INVALID_RENDERINFO; if (MDP_RENDER_VMODE_GET_SRC(render_info->vmodeFlags) != MDP_RENDER_VMODE_GET_DST(render_info->vmodeFlags)) { // Renderer only supports identical src/dst modes. return -MDP_ERR_RENDER_UNSUPPORTED_VMODE; } switch (MDP_RENDER_VMODE_GET_SRC(render_info->vmodeFlags)) { case MDP_RENDER_VMODE_RGB_555: case MDP_RENDER_VMODE_RGB_565: #ifdef GENS_X86_ASM if (render_info->cpuFlags & MDP_CPUFLAG_X86_MMX) { mdp_render_2x_16_x86_mmx( (uint16_t*)render_info->destScreen, (uint16_t*)render_info->mdScreen, render_info->destPitch, render_info->srcPitch, render_info->width, render_info->height); } else { mdp_render_2x_16_x86( (uint16_t*)render_info->destScreen, (uint16_t*)render_info->mdScreen, render_info->destPitch, render_info->srcPitch, render_info->width, render_info->height); } #else /* !GENS_X86_ASM */ T_mdp_render_2x_cpp( (uint16_t*)render_info->destScreen, (uint16_t*)render_info->mdScreen, render_info->destPitch, render_info->srcPitch, render_info->width, render_info->height); #endif /* GENS_X86_ASM */ break; case MDP_RENDER_VMODE_RGB_888: #ifdef GENS_X86_ASM if (render_info->cpuFlags & MDP_CPUFLAG_X86_MMX) { mdp_render_2x_32_x86_mmx( (uint32_t*)render_info->destScreen, (uint32_t*)render_info->mdScreen, render_info->destPitch, render_info->srcPitch, render_info->width, render_info->height); } else { mdp_render_2x_32_x86( (uint32_t*)render_info->destScreen, (uint32_t*)render_info->mdScreen, render_info->destPitch, render_info->srcPitch, render_info->width, render_info->height); } #else /* !GENS_X86_ASM */ T_mdp_render_2x_cpp( (uint32_t*)render_info->destScreen, (uint32_t*)render_info->mdScreen, render_info->destPitch, render_info->srcPitch, render_info->width, render_info->height); #endif /* GENS_X86_ASM */ break; default: // Unsupported video mode. return -MDP_ERR_RENDER_UNSUPPORTED_VMODE; } return MDP_ERR_OK; }