Previous 199869 Revisions Next

r29561 Saturday 12th April, 2014 at 13:01:16 UTC by R. Belmont
Fixes for PowerPC AltiVec compile [Vas Crabb]
[src/emu/video]rgbvmx.h
[src/lib/util]palette.h

trunk/src/emu/video/rgbvmx.h
r29560r29561
6464    components to an rgbint type
6565-------------------------------------------------*/
6666
67INLINE void rgb_to_rgbint(rgbint *rgb, rgb_t color)
67INLINE void rgb_to_rgbint(rgbint *rgb, rgb_t const &color)
6868{
69   vector signed char temp = (vector signed char)vec_perm((vector signed int)vec_lde(0, &color), vec_splat_s32(0), vec_lvsl(0, &color));
69   vector signed char temp = (vector signed char)vec_perm((vector signed int)vec_lde(0, color.ptr()), vec_splat_s32(0), vec_lvsl(0, color.ptr()));
7070   *rgb = (rgbint)vec_mergeh((vector signed char)vec_splat_s32(0), temp);
7171}
7272
r29560r29561
7676    components to an rgbint type
7777-------------------------------------------------*/
7878
79INLINE void rgba_to_rgbaint(rgbaint *rgb, rgb_t color)
79INLINE void rgba_to_rgbaint(rgbaint *rgb, rgb_t const &color)
8080{
81   vector signed char temp = (vector signed char)vec_perm((vector signed int)vec_lde(0, &color), vec_splat_s32(0), vec_lvsl(0, &color));
81   vector signed char temp = (vector signed char)vec_perm((vector signed int)vec_lde(0, color.ptr()), vec_splat_s32(0), vec_lvsl(0, color.ptr()));
8282   *rgb = (rgbaint)vec_mergeh((vector signed char)vec_splat_s32(0), temp);
8383}
8484
r29560r29561
9191INLINE rgb_t rgbint_to_rgb(const rgbint *color)
9292{
9393   vector unsigned int temp = vec_splat((vector unsigned int)vec_packsu(*color, *color), 0);
94   rgb_t result;
94   UINT32 result;
9595   vec_ste(temp, 0, &result);
9696   return result;
9797}
r29560r29561
105105INLINE rgb_t rgbaint_to_rgba(const rgbaint *color)
106106{
107107   vector unsigned int temp = vec_splat((vector unsigned int)vec_packsu(*color, *color), 0);
108   rgb_t result;
108   UINT32 result;
109109   vec_ste(temp, 0, &result);
110110   return result;
111111}
r29560r29561
120120INLINE rgb_t rgbint_to_rgb_clamp(const rgbint *color)
121121{
122122   vector unsigned int temp = vec_splat((vector unsigned int)vec_packsu(*color, *color), 0);
123   rgb_t result;
123   UINT32 result;
124124   vec_ste(temp, 0, &result);
125125   return result;
126126}
r29560r29561
135135INLINE rgb_t rgbaint_to_rgba_clamp(const rgbaint *color)
136136{
137137   vector unsigned int temp = vec_splat((vector unsigned int)vec_packsu(*color, *color), 0);
138   rgb_t result;
138   UINT32 result;
139139   vec_ste(temp, 0, &result);
140140   return result;
141141}
r29560r29561
318318    four pixel values
319319-------------------------------------------------*/
320320
321INLINE rgb_t rgb_bilinear_filter(rgb_t rgb00, rgb_t rgb01, rgb_t rgb10, rgb_t rgb11, UINT8 u, UINT8 v)
321INLINE rgb_t rgb_bilinear_filter(rgb_t const &rgb00, rgb_t const &rgb01, rgb_t const &rgb10, rgb_t const &rgb11, UINT8 u, UINT8 v)
322322{
323   rgb_t   result;
324   rgbint  color00 = (rgbint)vec_perm((vector signed int)vec_lde(0, &rgb00), vec_splat_s32(0), vec_lvsl(0, &rgb00));
325   rgbint  color01 = (rgbint)vec_perm((vector signed int)vec_lde(0, &rgb01), vec_splat_s32(0), vec_lvsl(0, &rgb01));
326   rgbint  color10 = (rgbint)vec_perm((vector signed int)vec_lde(0, &rgb10), vec_splat_s32(0), vec_lvsl(0, &rgb10));
327   rgbint  color11 = (rgbint)vec_perm((vector signed int)vec_lde(0, &rgb11), vec_splat_s32(0), vec_lvsl(0, &rgb11));
323   rgbint  color00 = (rgbint)vec_perm((vector signed int)vec_lde(0, rgb00.ptr()), vec_splat_s32(0), vec_lvsl(0, rgb00.ptr()));
324   rgbint  color01 = (rgbint)vec_perm((vector signed int)vec_lde(0, rgb01.ptr()), vec_splat_s32(0), vec_lvsl(0, rgb01.ptr()));
325   rgbint  color10 = (rgbint)vec_perm((vector signed int)vec_lde(0, rgb10.ptr()), vec_splat_s32(0), vec_lvsl(0, rgb10.ptr()));
326   rgbint  color11 = (rgbint)vec_perm((vector signed int)vec_lde(0, rgb11.ptr()), vec_splat_s32(0), vec_lvsl(0, rgb11.ptr()));
328327
329328   /* interleave color01 and color00 at the byte level */
330329   color01 = (rgbint)vec_mergeh((vector signed char)color01, (vector signed char)color00);
r29560r29561
340339   color01 = (rgbint)vec_sr((vector signed int)color01, vec_splat_u32(15));
341340   color01 = vec_packs((vector signed int)color01, (vector signed int)color01);
342341   color01 = (rgbint)vec_packsu(color01, color01);
342
343   UINT32 result;
343344   vec_ste((vector unsigned int)color01, 0, &result);
344345   return result;
345346}
r29560r29561
350351    four pixel values
351352-------------------------------------------------*/
352353
353INLINE rgb_t rgba_bilinear_filter(rgb_t rgb00, rgb_t rgb01, rgb_t rgb10, rgb_t rgb11, UINT8 u, UINT8 v)
354INLINE rgb_t rgba_bilinear_filter(rgb_t const &rgb00, rgb_t const &rgb01, rgb_t const &rgb10, rgb_t const &rgb11, UINT8 u, UINT8 v)
354355{
355   rgb_t   result;
356   rgbaint color00 = (rgbaint)vec_perm((vector signed int)vec_lde(0, &rgb00), vec_splat_s32(0), vec_lvsl(0, &rgb00));
357   rgbaint color01 = (rgbaint)vec_perm((vector signed int)vec_lde(0, &rgb01), vec_splat_s32(0), vec_lvsl(0, &rgb01));
358   rgbaint color10 = (rgbaint)vec_perm((vector signed int)vec_lde(0, &rgb10), vec_splat_s32(0), vec_lvsl(0, &rgb10));
359   rgbaint color11 = (rgbaint)vec_perm((vector signed int)vec_lde(0, &rgb11), vec_splat_s32(0), vec_lvsl(0, &rgb11));
356   rgbaint color00 = (rgbaint)vec_perm((vector signed int)vec_lde(0, rgb00.ptr()), vec_splat_s32(0), vec_lvsl(0, rgb00.ptr()));
357   rgbaint color01 = (rgbaint)vec_perm((vector signed int)vec_lde(0, rgb01.ptr()), vec_splat_s32(0), vec_lvsl(0, rgb01.ptr()));
358   rgbaint color10 = (rgbaint)vec_perm((vector signed int)vec_lde(0, rgb10.ptr()), vec_splat_s32(0), vec_lvsl(0, rgb10.ptr()));
359   rgbaint color11 = (rgbaint)vec_perm((vector signed int)vec_lde(0, rgb11.ptr()), vec_splat_s32(0), vec_lvsl(0, rgb11.ptr()));
360360
361361   /* interleave color01 and color00 at the byte level */
362362   color01 = (rgbaint)vec_mergeh((vector signed char)color01, (vector signed char)color00);
r29560r29561
372372   color01 = (rgbaint)vec_sr((vector signed int)color01, vec_splat_u32(15));
373373   color01 = vec_packs((vector signed int)color01, (vector signed int)color01);
374374   color01 = (rgbaint)vec_packsu(color01, color01);
375
376   UINT32 result;
375377   vec_ste((vector unsigned int)color01, 0, &result);
376378   return result;
377379}
r29560r29561
382384    four pixel values
383385-------------------------------------------------*/
384386
385INLINE void rgbint_bilinear_filter(rgbint *color, rgb_t rgb00, rgb_t rgb01, rgb_t rgb10, rgb_t rgb11, UINT8 u, UINT8 v)
387INLINE void rgbint_bilinear_filter(rgbint *color, rgb_t const &rgb00, rgb_t const &rgb01, rgb_t const &rgb10, rgb_t const &rgb11, UINT8 u, UINT8 v)
386388{
387   rgbint color00 = (rgbint)vec_perm((vector signed int)vec_lde(0, &rgb00), vec_splat_s32(0), vec_lvsl(0, &rgb00));
388   rgbint color01 = (rgbint)vec_perm((vector signed int)vec_lde(0, &rgb01), vec_splat_s32(0), vec_lvsl(0, &rgb01));
389   rgbint color10 = (rgbint)vec_perm((vector signed int)vec_lde(0, &rgb10), vec_splat_s32(0), vec_lvsl(0, &rgb10));
390   rgbint color11 = (rgbint)vec_perm((vector signed int)vec_lde(0, &rgb11), vec_splat_s32(0), vec_lvsl(0, &rgb11));
389   rgbint color00 = (rgbint)vec_perm((vector signed int)vec_lde(0, rgb00.ptr()), vec_splat_s32(0), vec_lvsl(0, rgb00.ptr()));
390   rgbint color01 = (rgbint)vec_perm((vector signed int)vec_lde(0, rgb01.ptr()), vec_splat_s32(0), vec_lvsl(0, rgb01.ptr()));
391   rgbint color10 = (rgbint)vec_perm((vector signed int)vec_lde(0, rgb10.ptr()), vec_splat_s32(0), vec_lvsl(0, rgb10.ptr()));
392   rgbint color11 = (rgbint)vec_perm((vector signed int)vec_lde(0, rgb11.ptr()), vec_splat_s32(0), vec_lvsl(0, rgb11.ptr()));
391393
392394   /* interleave color01 and color00 at the byte level */
393395   color01 = (rgbint)vec_mergeh((vector signed char)color01, (vector signed char)color00);
r29560r29561
410412    four pixel values
411413-------------------------------------------------*/
412414
413INLINE void rgbaint_bilinear_filter(rgbaint *color, rgb_t rgb00, rgb_t rgb01, rgb_t rgb10, rgb_t rgb11, UINT8 u, UINT8 v)
415INLINE void rgbaint_bilinear_filter(rgbaint *color, rgb_t const &rgb00, rgb_t const &rgb01, rgb_t const &rgb10, rgb_t const &rgb11, UINT8 u, UINT8 v)
414416{
415   rgbaint color00 = (rgbaint)vec_perm((vector signed int)vec_lde(0, &rgb00), vec_splat_s32(0), vec_lvsl(0, &rgb00));
416   rgbaint color01 = (rgbaint)vec_perm((vector signed int)vec_lde(0, &rgb01), vec_splat_s32(0), vec_lvsl(0, &rgb01));
417   rgbaint color10 = (rgbaint)vec_perm((vector signed int)vec_lde(0, &rgb10), vec_splat_s32(0), vec_lvsl(0, &rgb10));
418   rgbaint color11 = (rgbaint)vec_perm((vector signed int)vec_lde(0, &rgb11), vec_splat_s32(0), vec_lvsl(0, &rgb11));
417   rgbaint color00 = (rgbaint)vec_perm((vector signed int)vec_lde(0, rgb00.ptr()), vec_splat_s32(0), vec_lvsl(0, rgb00.ptr()));
418   rgbaint color01 = (rgbaint)vec_perm((vector signed int)vec_lde(0, rgb01.ptr()), vec_splat_s32(0), vec_lvsl(0, rgb01.ptr()));
419   rgbaint color10 = (rgbaint)vec_perm((vector signed int)vec_lde(0, rgb10.ptr()), vec_splat_s32(0), vec_lvsl(0, rgb10.ptr()));
420   rgbaint color11 = (rgbaint)vec_perm((vector signed int)vec_lde(0, rgb11.ptr()), vec_splat_s32(0), vec_lvsl(0, rgb11.ptr()));
419421
420422   /* interleave color01 and color00 at the byte level */
421423   color01 = (rgbaint)vec_mergeh((vector signed char)color01, (vector signed char)color00);
trunk/src/lib/util/palette.h
r29560r29561
4747   UINT8 b() const { return m_data >> 0; }
4848   rgb15_t as_rgb15() const { return ((r() >> 3) << 10) | ((g() >> 3) << 5) | ((b() >> 3) << 0); }
4949   UINT8 brightness() const { return (r() * 222 + g() * 707 + b() * 71) / 1000; }
50   UINT32 const *ptr() const { return &m_data; }
5051
5152   // setters
5253   rgb_t &set_a(UINT8 a) { m_data &= ~0xff000000; m_data |= a << 24; return *this; }

Previous 199869 Revisions Next


© 1997-2024 The MAME Team