From 793875bf4d54e2b614d2d6898cb2198470f80574 Mon Sep 17 00:00:00 2001 From: MooglyGuy Date: Sun, 29 Aug 2021 17:49:03 +0200 Subject: -bgfx: Fixed UV rounding errors in fs_blit_palette16; Switched back to direct texture upload rather than CPU copy. (#8505) [Ryan Holtz] --- .../shaders/dx11/chains/misc/fs_blit_palette16.bin | Bin 672 -> 1032 bytes bgfx/shaders/dx9/chains/misc/fs_blit_palette16.bin | Bin 481 -> 805 bytes .../shaders/essl/chains/misc/fs_blit_palette16.bin | Bin 445 -> 1109 bytes .../shaders/glsl/chains/misc/fs_blit_palette16.bin | Bin 422 -> 1040 bytes .../metal/chains/misc/fs_blit_palette16.bin | Bin 958 -> 1462 bytes .../spirv/chains/misc/fs_blit_palette16.bin | Bin 1660 -> 2608 bytes .../bgfx/shaders/chains/misc/fs_blit_palette16.sc | 11 +++++++++-- src/osd/modules/render/bgfxutil.cpp | 21 +-------------------- 8 files changed, 10 insertions(+), 22 deletions(-) diff --git a/bgfx/shaders/dx11/chains/misc/fs_blit_palette16.bin b/bgfx/shaders/dx11/chains/misc/fs_blit_palette16.bin index 91a4aaf2d29..fb94aeda64a 100644 Binary files a/bgfx/shaders/dx11/chains/misc/fs_blit_palette16.bin and b/bgfx/shaders/dx11/chains/misc/fs_blit_palette16.bin differ diff --git a/bgfx/shaders/dx9/chains/misc/fs_blit_palette16.bin b/bgfx/shaders/dx9/chains/misc/fs_blit_palette16.bin index 59f3c6dce27..8f2023599c1 100644 Binary files a/bgfx/shaders/dx9/chains/misc/fs_blit_palette16.bin and b/bgfx/shaders/dx9/chains/misc/fs_blit_palette16.bin differ diff --git a/bgfx/shaders/essl/chains/misc/fs_blit_palette16.bin b/bgfx/shaders/essl/chains/misc/fs_blit_palette16.bin index d82fc7f6fbc..2e8dc0a04b3 100644 Binary files a/bgfx/shaders/essl/chains/misc/fs_blit_palette16.bin and b/bgfx/shaders/essl/chains/misc/fs_blit_palette16.bin differ diff --git a/bgfx/shaders/glsl/chains/misc/fs_blit_palette16.bin b/bgfx/shaders/glsl/chains/misc/fs_blit_palette16.bin index aadd6349d8c..0ec3bc4fdb8 100644 Binary files a/bgfx/shaders/glsl/chains/misc/fs_blit_palette16.bin and b/bgfx/shaders/glsl/chains/misc/fs_blit_palette16.bin differ diff --git a/bgfx/shaders/metal/chains/misc/fs_blit_palette16.bin b/bgfx/shaders/metal/chains/misc/fs_blit_palette16.bin index 58d7bbdde95..98684b4e571 100644 Binary files a/bgfx/shaders/metal/chains/misc/fs_blit_palette16.bin and b/bgfx/shaders/metal/chains/misc/fs_blit_palette16.bin differ diff --git a/bgfx/shaders/spirv/chains/misc/fs_blit_palette16.bin b/bgfx/shaders/spirv/chains/misc/fs_blit_palette16.bin index 44f887fa945..5ad57139939 100644 Binary files a/bgfx/shaders/spirv/chains/misc/fs_blit_palette16.bin and b/bgfx/shaders/spirv/chains/misc/fs_blit_palette16.bin differ 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; -- cgit v1.2.3