Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit1b270d8

Browse files
authored
Merge pull request#3170 from MyreMylar/rgb_rgba_add_sub_simd
SIMD versions of RGB_ADD, RGBA_ADD, RGB_MUL & RGBA_MUL
2 parents0544758 +03b5de0 commit1b270d8

File tree

4 files changed

+768
-0
lines changed

4 files changed

+768
-0
lines changed

‎src_c/alphablit.c‎

Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,10 +263,88 @@ SoftBlitPyGame(SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst,
263263
break;
264264
}
265265
casePYGAME_BLEND_ADD: {
266+
#ifSDL_BYTEORDER==SDL_LIL_ENDIAN
267+
if (src->format->BytesPerPixel==4&&
268+
dst->format->BytesPerPixel==4&&
269+
src->format->Rmask==dst->format->Rmask&&
270+
src->format->Gmask==dst->format->Gmask&&
271+
src->format->Bmask==dst->format->Bmask&&
272+
!(src->format->Amask!=0&&dst->format->Amask!=0&&
273+
src->format->Amask!=dst->format->Amask)&&
274+
SDL_HasAVX2()&& (src!=dst)) {
275+
blit_blend_rgb_add_avx2(&info);
276+
break;
277+
}
278+
#if defined(__SSE2__)
279+
if (src->format->BytesPerPixel==4&&
280+
dst->format->BytesPerPixel==4&&
281+
src->format->Rmask==dst->format->Rmask&&
282+
src->format->Gmask==dst->format->Gmask&&
283+
src->format->Bmask==dst->format->Bmask&&
284+
!(src->format->Amask!=0&&dst->format->Amask!=0&&
285+
src->format->Amask!=dst->format->Amask)&&
286+
SDL_HasSSE2()&& (src!=dst)) {
287+
blit_blend_rgb_add_sse2(&info);
288+
break;
289+
}
290+
#endif/* __SSE2__*/
291+
#ifPG_ENABLE_ARM_NEON
292+
if (src->format->BytesPerPixel==4&&
293+
dst->format->BytesPerPixel==4&&
294+
src->format->Rmask==dst->format->Rmask&&
295+
src->format->Gmask==dst->format->Gmask&&
296+
src->format->Bmask==dst->format->Bmask&&
297+
!(src->format->Amask!=0&&dst->format->Amask!=0&&
298+
src->format->Amask!=dst->format->Amask)&&
299+
SDL_HasNEON()&& (src!=dst)) {
300+
blit_blend_rgb_add_sse2(&info);
301+
break;
302+
}
303+
#endif/* PG_ENABLE_ARM_NEON */
304+
#endif/* SDL_BYTEORDER == SDL_LIL_ENDIAN */
266305
blit_blend_add(&info);
267306
break;
268307
}
269308
casePYGAME_BLEND_SUB: {
309+
#ifSDL_BYTEORDER==SDL_LIL_ENDIAN
310+
if (src->format->BytesPerPixel==4&&
311+
dst->format->BytesPerPixel==4&&
312+
src->format->Rmask==dst->format->Rmask&&
313+
src->format->Gmask==dst->format->Gmask&&
314+
src->format->Bmask==dst->format->Bmask&&
315+
!(src->format->Amask!=0&&dst->format->Amask!=0&&
316+
src->format->Amask!=dst->format->Amask)&&
317+
SDL_HasAVX2()&& (src!=dst)) {
318+
blit_blend_rgb_sub_avx2(&info);
319+
break;
320+
}
321+
#if defined(__SSE2__)
322+
if (src->format->BytesPerPixel==4&&
323+
dst->format->BytesPerPixel==4&&
324+
src->format->Rmask==dst->format->Rmask&&
325+
src->format->Gmask==dst->format->Gmask&&
326+
src->format->Bmask==dst->format->Bmask&&
327+
!(src->format->Amask!=0&&dst->format->Amask!=0&&
328+
src->format->Amask!=dst->format->Amask)&&
329+
SDL_HasSSE2()&& (src!=dst)) {
330+
blit_blend_rgb_sub_sse2(&info);
331+
break;
332+
}
333+
#endif/* __SSE2__*/
334+
#ifPG_ENABLE_ARM_NEON
335+
if (src->format->BytesPerPixel==4&&
336+
dst->format->BytesPerPixel==4&&
337+
src->format->Rmask==dst->format->Rmask&&
338+
src->format->Gmask==dst->format->Gmask&&
339+
src->format->Bmask==dst->format->Bmask&&
340+
!(src->format->Amask!=0&&dst->format->Amask!=0&&
341+
src->format->Amask!=dst->format->Amask)&&
342+
SDL_HasNEON()&& (src!=dst)) {
343+
blit_blend_rgb_sub_sse2(&info);
344+
break;
345+
}
346+
#endif/* PG_ENABLE_ARM_NEON */
347+
#endif/* SDL_BYTEORDER == SDL_LIL_ENDIAN */
270348
blit_blend_sub(&info);
271349
break;
272350
}
@@ -323,10 +401,82 @@ SoftBlitPyGame(SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst,
323401
}
324402

325403
casePYGAME_BLEND_RGBA_ADD: {
404+
#ifSDL_BYTEORDER==SDL_LIL_ENDIAN
405+
if (src->format->BytesPerPixel==4&&
406+
dst->format->BytesPerPixel==4&&
407+
src->format->Rmask==dst->format->Rmask&&
408+
src->format->Gmask==dst->format->Gmask&&
409+
src->format->Bmask==dst->format->Bmask&&
410+
info.src_blend!=SDL_BLENDMODE_NONE&&
411+
SDL_HasAVX2()&& (src!=dst)) {
412+
blit_blend_rgba_add_avx2(&info);
413+
break;
414+
}
415+
#if defined(__SSE2__)
416+
if (src->format->BytesPerPixel==4&&
417+
dst->format->BytesPerPixel==4&&
418+
src->format->Rmask==dst->format->Rmask&&
419+
src->format->Gmask==dst->format->Gmask&&
420+
src->format->Bmask==dst->format->Bmask&&
421+
info.src_blend!=SDL_BLENDMODE_NONE&&
422+
SDL_HasSSE2()&& (src!=dst)) {
423+
blit_blend_rgba_add_sse2(&info);
424+
break;
425+
}
426+
#endif/* __SSE2__*/
427+
#ifPG_ENABLE_ARM_NEON
428+
if (src->format->BytesPerPixel==4&&
429+
dst->format->BytesPerPixel==4&&
430+
src->format->Rmask==dst->format->Rmask&&
431+
src->format->Gmask==dst->format->Gmask&&
432+
src->format->Bmask==dst->format->Bmask&&
433+
info.src_blend!=SDL_BLENDMODE_NONE&&
434+
SDL_HasNEON()&& (src!=dst)) {
435+
blit_blend_rgba_add_sse2(&info);
436+
break;
437+
}
438+
#endif/* PG_ENABLE_ARM_NEON */
439+
#endif/* SDL_BYTEORDER == SDL_LIL_ENDIAN */
326440
blit_blend_rgba_add(&info);
327441
break;
328442
}
329443
casePYGAME_BLEND_RGBA_SUB: {
444+
#ifSDL_BYTEORDER==SDL_LIL_ENDIAN
445+
if (src->format->BytesPerPixel==4&&
446+
dst->format->BytesPerPixel==4&&
447+
src->format->Rmask==dst->format->Rmask&&
448+
src->format->Gmask==dst->format->Gmask&&
449+
src->format->Bmask==dst->format->Bmask&&
450+
info.src_blend!=SDL_BLENDMODE_NONE&&
451+
SDL_HasAVX2()&& (src!=dst)) {
452+
blit_blend_rgba_sub_avx2(&info);
453+
break;
454+
}
455+
#if defined(__SSE2__)
456+
if (src->format->BytesPerPixel==4&&
457+
dst->format->BytesPerPixel==4&&
458+
src->format->Rmask==dst->format->Rmask&&
459+
src->format->Gmask==dst->format->Gmask&&
460+
src->format->Bmask==dst->format->Bmask&&
461+
info.src_blend!=SDL_BLENDMODE_NONE&&
462+
SDL_HasSSE2()&& (src!=dst)) {
463+
blit_blend_rgba_sub_sse2(&info);
464+
break;
465+
}
466+
#endif/* __SSE2__*/
467+
#ifPG_ENABLE_ARM_NEON
468+
if (src->format->BytesPerPixel==4&&
469+
dst->format->BytesPerPixel==4&&
470+
src->format->Rmask==dst->format->Rmask&&
471+
src->format->Gmask==dst->format->Gmask&&
472+
src->format->Bmask==dst->format->Bmask&&
473+
info.src_blend!=SDL_BLENDMODE_NONE&&
474+
SDL_HasNEON()&& (src!=dst)) {
475+
blit_blend_rgba_sub_sse2(&info);
476+
break;
477+
}
478+
#endif/* PG_ENABLE_ARM_NEON */
479+
#endif/* SDL_BYTEORDER == SDL_LIL_ENDIAN */
330480
blit_blend_rgba_sub(&info);
331481
break;
332482
}

‎src_c/simd_blitters.h‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,25 @@ void
1313
blit_blend_rgba_mul_sse2(SDL_BlitInfo*info);
1414
void
1515
blit_blend_rgb_mul_sse2(SDL_BlitInfo*info);
16+
void
17+
blit_blend_rgba_add_sse2(SDL_BlitInfo*info);
18+
void
19+
blit_blend_rgb_add_sse2(SDL_BlitInfo*info);
20+
void
21+
blit_blend_rgba_sub_sse2(SDL_BlitInfo*info);
22+
void
23+
blit_blend_rgb_sub_sse2(SDL_BlitInfo*info);
1624
#endif/* (defined(__SSE2__) || defined(PG_ENABLE_ARM_NEON)) */
1725

1826
void
1927
blit_blend_rgba_mul_avx2(SDL_BlitInfo*info);
2028
void
2129
blit_blend_rgb_mul_avx2(SDL_BlitInfo*info);
30+
void
31+
blit_blend_rgba_add_avx2(SDL_BlitInfo*info);
32+
void
33+
blit_blend_rgb_add_avx2(SDL_BlitInfo*info);
34+
void
35+
blit_blend_rgba_sub_avx2(SDL_BlitInfo*info);
36+
void
37+
blit_blend_rgb_sub_avx2(SDL_BlitInfo*info);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp