summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd/modules/render
diff options
context:
space:
mode:
author MooglyGuy <MooglyGuy@users.noreply.github.com>2021-08-29 17:49:03 +0200
committer GitHub <noreply@github.com>2021-08-30 01:49:03 +1000
commit793875bf4d54e2b614d2d6898cb2198470f80574 (patch)
tree361200ca9086849d26aba0171c3c30c525cdbedb /src/osd/modules/render
parentcc99e96e30ccfed848e8d80f7d40a325b6c71726 (diff)
-bgfx: Fixed UV rounding errors in fs_blit_palette16; Switched back to direct texture upload rather than CPU copy. (#8505) [Ryan Holtz]
Diffstat (limited to 'src/osd/modules/render')
-rw-r--r--src/osd/modules/render/bgfx/shaders/chains/misc/fs_blit_palette16.sc11
-rw-r--r--src/osd/modules/render/bgfxutil.cpp21
2 files changed, 10 insertions, 22 deletions
diff --git a/src/osd/modules/render/bgfx/shaders/chains/misc/fs_blit_palette16.sc b/src/osd/modules/render/bgfx/shaders/chains/misc/fs_blit_palette16.sc
index e87f8a76315..98f13186663 100644
--- a/src/osd/modules/render/bgfx/shaders/chains/misc/fs_blit_palette16.sc
+++ b/src/osd/modules/render/bgfx/shaders/chains/misc/fs_blit_palette16.sc
@@ -15,7 +15,14 @@ uniform vec4 u_inv_tex_size1;
void main()
{
- vec4 srcpix = texture2D(s_tex, v_texcoord0.xy);
- vec2 palette_uv = (srcpix.bg * vec2(256.0, 256.0)) * u_inv_tex_size1.xy;
+ vec2 original_uv = v_texcoord0.xy * u_tex_size0.xy;
+ float mod_val = mod(original_uv.x, 2.0);
+ vec2 rounded_uv = vec2(original_uv.x - mod_val, original_uv.y);
+ vec4 srcpix = texture2D(s_tex, rounded_uv * u_inv_tex_size0.xy + vec2(u_inv_tex_size0.x, 0.0));
+
+ vec2 palette_uv = (srcpix.ra * vec2(256.0, 256.0)) * u_inv_tex_size1.xy;
+ if (mod_val < 1.0)
+ palette_uv = (srcpix.bg * vec2(256.0, 256.0)) * u_inv_tex_size1.xy;
+
gl_FragColor = vec4(texture2D(s_pal, palette_uv).rgb, 1.0) * v_color0;
}
diff --git a/src/osd/modules/render/bgfxutil.cpp b/src/osd/modules/render/bgfxutil.cpp
index 88d2fbf399a..a147e8c2c1c 100644
--- a/src/osd/modules/render/bgfxutil.cpp
+++ b/src/osd/modules/render/bgfxutil.cpp
@@ -22,6 +22,7 @@ const bgfx::Memory* bgfx_util::mame_texture_data_to_bgfx_texture_data(bgfx::Text
switch (src_format)
{
case PRIMFLAG_TEXFORMAT(TEXFORMAT_YUY16):
+ case PRIMFLAG_TEXFORMAT(TEXFORMAT_PALETTE16):
dst_format = bgfx::TextureFormat::BGRA8;
convert_stride = 2;
out_pitch = rowpixels * 2;
@@ -29,26 +30,6 @@ const bgfx::Memory* bgfx_util::mame_texture_data_to_bgfx_texture_data(bgfx::Text
data = bgfx::copy(base, info.storageSize);
break;
- case PRIMFLAG_TEXFORMAT(TEXFORMAT_PALETTE16):
- {
- dst_format = bgfx::TextureFormat::BGRA8;
- convert_stride = 1;
- out_pitch = rowpixels * 4;
- bgfx::calcTextureSize(info, rowpixels / convert_stride, height, 1, false, false, 1, dst_format);
-
- uint16_t *src = (uint16_t *)base;
- uint16_t *dst_data = new uint16_t[rowpixels * 2 * height];
- uint16_t *dst = dst_data;
- for (int i = 0; i < rowpixels * height; i++, src++)
- {
- *dst++ = *src;
- *dst++ = 0;
- }
-
- data = bgfx::copy(dst_data, info.storageSize);
- delete [] dst_data;
- break;
- }
case PRIMFLAG_TEXFORMAT(TEXFORMAT_ARGB32):
case PRIMFLAG_TEXFORMAT(TEXFORMAT_RGB32):
dst_format = bgfx::TextureFormat::BGRA8;