summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author MooglyGuy <therealmogminer@gmail.com>2019-11-24 15:40:14 +0100
committer Vas Crabb <vas@vastheman.com>2019-11-25 01:43:21 +1100
commitaf2860f6f19d53982fdee10f12716c391732df98 (patch)
tree746054ba2da28cb60839e8fe329f9c2a819dc83a
parent5b483a2f44daf3a9f4e2c7ea7d3782db48dfe2d5 (diff)
-bgfx: Fixed Github issues #5830 and #5956. [Ryan Holtz]
-rw-r--r--bgfx/chains/crt-geom-deluxe.json1
-rw-r--r--bgfx/chains/crt-geom.json1
-rw-r--r--bgfx/chains/default.json1
-rw-r--r--bgfx/chains/eagle/super-eagle.json1
-rw-r--r--bgfx/chains/hqx/hq2x.json1
-rw-r--r--bgfx/chains/hqx/hq3x.json1
-rw-r--r--bgfx/chains/hqx/hq4x.json1
-rw-r--r--bgfx/chains/lut.json1
-rw-r--r--bgfx/chains/unfiltered.json1
-rw-r--r--bgfx/chains/xbr/super-2xbr-3d-2p.json1
-rw-r--r--bgfx/chains/xbr/super-2xbr-3d-3p-smoother.json1
-rw-r--r--bgfx/chains/xbr/super-4xbr-3d-4p.json1
-rw-r--r--bgfx/chains/xbr/super-4xbr-3d-6p-smoother.json1
-rw-r--r--bgfx/chains/xbr/super-xbr-2p.json1
-rw-r--r--bgfx/chains/xbr/super-xbr-3p-smoother.json1
-rw-r--r--bgfx/chains/xbr/super-xbr-6p.json1
-rw-r--r--bgfx/chains/xbr/super-xbr-deposterize.json1
-rw-r--r--bgfx/chains/xbr/super-xbr-fast-3p.json1
-rw-r--r--bgfx/chains/xbr/super-xbr-fast-6p.json1
-rw-r--r--bgfx/chains/xbr/xbr-hybrid.json1
-rw-r--r--bgfx/chains/xbr/xbr-lv1-noblend.json1
-rw-r--r--bgfx/chains/xbr/xbr-lv2-3d.json1
-rw-r--r--bgfx/chains/xbr/xbr-lv2-accuracy-multipass.json1
-rw-r--r--bgfx/chains/xbr/xbr-lv2-accuracy-smart-blur.json1
-rw-r--r--bgfx/chains/xbr/xbr-lv2-deposterize.json1
-rw-r--r--bgfx/chains/xbr/xbr-lv2-fast.json1
-rw-r--r--bgfx/chains/xbr/xbr-lv2-multipass.json1
-rw-r--r--bgfx/chains/xbr/xbr-lv2-noblend.json1
-rw-r--r--bgfx/chains/xbr/xbr-lv2.json1
-rw-r--r--bgfx/chains/xbr/xbr-lv3-multipass.json1
-rw-r--r--bgfx/chains/xbr/xbr-lv3-noblend.json1
-rw-r--r--bgfx/chains/xbr/xbr-lv3.json1
-rw-r--r--bgfx/chains/xbr/xbr-mlv4-dilation.json1
-rw-r--r--bgfx/chains/xbr/xbr-mlv4-multipass.json1
-rw-r--r--bgfx/effects/default/blit.json21
-rw-r--r--bgfx/effects/misc/bcg_adjust.json26
-rw-r--r--bgfx/shaders/dx11/chains/misc/fs_blit_bcg.binbin0 -> 804 bytes
-rw-r--r--bgfx/shaders/dx9/chains/misc/fs_blit_bcg.binbin0 -> 569 bytes
-rw-r--r--bgfx/shaders/essl/chains/misc/fs_blit_bcg.binbin0 -> 830 bytes
-rw-r--r--bgfx/shaders/glsl/chains/misc/fs_blit_bcg.binbin0 -> 787 bytes
-rw-r--r--bgfx/shaders/metal/chains/misc/fs_blit_bcg.binbin0 -> 1059 bytes
-rw-r--r--bgfx/shaders/metal/chains/misc/fs_blit_yuy16.binbin1846 -> 1794 bytes
-rw-r--r--bgfx/shaders/metal/chains/misc/fs_bob-and-ghost-deinterlace.binbin1685 -> 1650 bytes
-rw-r--r--bgfx/shaders/metal/chains/misc/fs_saturation.binbin862 -> 838 bytes
-rw-r--r--bgfx/shaders/metal/chains/misc/vs_deposterize-pass0.binbin1167 -> 1152 bytes
-rw-r--r--bgfx/shaders/metal/chains/misc/vs_deposterize-pass1.binbin1167 -> 1152 bytes
-rw-r--r--bgfx/shaders/spirv/chains/misc/fs_blit.binbin846 -> 846 bytes
-rw-r--r--bgfx/shaders/spirv/chains/misc/fs_blit_bcg.binbin0 -> 1992 bytes
-rw-r--r--bgfx/shaders/spirv/chains/misc/fs_blit_palette16.binbin1580 -> 1580 bytes
-rw-r--r--bgfx/shaders/spirv/chains/misc/fs_blit_rgb32.binbin950 -> 950 bytes
-rw-r--r--bgfx/shaders/spirv/chains/misc/fs_blit_yuy16.binbin2740 -> 2740 bytes
-rw-r--r--bgfx/shaders/spirv/chains/misc/fs_bob-and-ghost-deinterlace.binbin2757 -> 2757 bytes
-rw-r--r--bgfx/shaders/spirv/chains/misc/fs_deposterize-pass0.binbin2506 -> 2506 bytes
-rw-r--r--bgfx/shaders/spirv/chains/misc/fs_deposterize-pass1.binbin2506 -> 2506 bytes
-rw-r--r--bgfx/shaders/spirv/chains/misc/fs_lut.binbin1804 -> 1804 bytes
-rw-r--r--bgfx/shaders/spirv/chains/misc/fs_saturation.binbin1469 -> 1469 bytes
-rw-r--r--bgfx/shaders/spirv/chains/misc/vs_blit.binbin1305 -> 1305 bytes
-rw-r--r--bgfx/shaders/spirv/chains/misc/vs_bob-and-ghost-deinterlace.binbin1305 -> 1305 bytes
-rw-r--r--bgfx/shaders/spirv/chains/misc/vs_deposterize-pass0.binbin1771 -> 1771 bytes
-rw-r--r--bgfx/shaders/spirv/chains/misc/vs_deposterize-pass1.binbin1771 -> 1771 bytes
-rw-r--r--bgfx/shaders/spirv/chains/misc/vs_lut.binbin1305 -> 1305 bytes
-rw-r--r--bgfx/shaders/spirv/chains/misc/vs_saturation.binbin1305 -> 1305 bytes
-rw-r--r--src/emu/render.cpp2
-rw-r--r--src/osd/modules/render/bgfx/chain.cpp7
-rw-r--r--src/osd/modules/render/bgfx/chain.h7
-rw-r--r--src/osd/modules/render/bgfx/chainentry.cpp30
-rw-r--r--src/osd/modules/render/bgfx/chainentry.h5
-rw-r--r--src/osd/modules/render/bgfx/chainentryreader.cpp7
-rw-r--r--src/osd/modules/render/bgfx/chainmanager.cpp65
-rw-r--r--src/osd/modules/render/bgfx/chainmanager.h1
-rw-r--r--src/osd/modules/render/bgfx/inputpair.cpp4
-rw-r--r--src/osd/modules/render/bgfx/shaders/chains/misc/fs_blit_bcg.sc24
-rw-r--r--src/osd/modules/render/bgfx/statereader.h6
-rw-r--r--src/osd/modules/render/bgfx/writereader.h8
-rw-r--r--src/osd/modules/render/bgfxutil.cpp2
75 files changed, 180 insertions, 69 deletions
diff --git a/bgfx/chains/crt-geom-deluxe.json b/bgfx/chains/crt-geom-deluxe.json
index 49b91437818..d71df646d7b 100644
--- a/bgfx/chains/crt-geom-deluxe.json
+++ b/bgfx/chains/crt-geom-deluxe.json
@@ -156,6 +156,7 @@
"passes": [
{
"effect": "crt-geom/phosphor_apply",
+ "applytint": true,
"name": "phosphor apply",
"uniforms": [
{ "uniform": "u_phosphor_power", "slider": "phosphor_power" },
diff --git a/bgfx/chains/crt-geom.json b/bgfx/chains/crt-geom.json
index c8bc2a2e2ab..56e2210cbdb 100644
--- a/bgfx/chains/crt-geom.json
+++ b/bgfx/chains/crt-geom.json
@@ -108,6 +108,7 @@
"passes": [
{
"effect": "crt-geom/crt-geom",
+ "applytint": true,
"name": "CRT",
"uniforms": [
{ "uniform": "curvature", "slider": "curvature" },
diff --git a/bgfx/chains/default.json b/bgfx/chains/default.json
index d7e31536780..b2c6aed2378 100644
--- a/bgfx/chains/default.json
+++ b/bgfx/chains/default.json
@@ -8,6 +8,7 @@
],
"passes": [
{ "effect": "misc/blit",
+ "applytint": true,
"name": "Copy To Filtered Texture",
"input": [
{ "sampler": "s_tex", "texture": "screen" }
diff --git a/bgfx/chains/eagle/super-eagle.json b/bgfx/chains/eagle/super-eagle.json
index 017c03b7179..fc88e38c40a 100644
--- a/bgfx/chains/eagle/super-eagle.json
+++ b/bgfx/chains/eagle/super-eagle.json
@@ -26,6 +26,7 @@
"passes": [
{
"effect": "eagle/supereagle",
+ "applytint": true,
"name": "Super Eagle pass",
"input": [
{ "sampler": "decal", "texture": "screen" },
diff --git a/bgfx/chains/hqx/hq2x.json b/bgfx/chains/hqx/hq2x.json
index b206d2ea663..c60f46c1be8 100644
--- a/bgfx/chains/hqx/hq2x.json
+++ b/bgfx/chains/hqx/hq2x.json
@@ -43,6 +43,7 @@
"passes": [
{
"effect": "hqx/hq2x",
+ "applytint": true,
"name": "HQ2x pass",
"input": [
{ "sampler": "decal", "texture": "screen" },
diff --git a/bgfx/chains/hqx/hq3x.json b/bgfx/chains/hqx/hq3x.json
index 0ee2e277912..3f5815cf7a4 100644
--- a/bgfx/chains/hqx/hq3x.json
+++ b/bgfx/chains/hqx/hq3x.json
@@ -43,6 +43,7 @@
"passes": [
{
"effect": "hqx/hq3x",
+ "applytint": true,
"name": "HQ3x pass",
"input": [
{ "sampler": "decal", "texture": "screen" },
diff --git a/bgfx/chains/hqx/hq4x.json b/bgfx/chains/hqx/hq4x.json
index 792cc666219..17abf352797 100644
--- a/bgfx/chains/hqx/hq4x.json
+++ b/bgfx/chains/hqx/hq4x.json
@@ -43,6 +43,7 @@
"passes": [
{
"effect": "hqx/hq4x",
+ "applytint": true,
"name": "HQ4x pass",
"input": [
{ "sampler": "decal", "texture": "screen" },
diff --git a/bgfx/chains/lut.json b/bgfx/chains/lut.json
index 50353b5292b..6143410f009 100644
--- a/bgfx/chains/lut.json
+++ b/bgfx/chains/lut.json
@@ -10,6 +10,7 @@
"passes": [
{
"effect": "misc/blit",
+ "applytint": true,
"name": "Copy To Filtered Texture",
"input": [
{ "sampler": "s_tex", "texture": "screen" }
diff --git a/bgfx/chains/unfiltered.json b/bgfx/chains/unfiltered.json
index 6a65031f349..c69bcd319b5 100644
--- a/bgfx/chains/unfiltered.json
+++ b/bgfx/chains/unfiltered.json
@@ -2,6 +2,7 @@
"author": "Ryan Holtz",
"passes": [
{ "effect": "misc/blit",
+ "applytint": true,
"name": "Unfiltered Upscale",
"input": [
{ "sampler": "s_tex", "texture": "screen" }
diff --git a/bgfx/chains/xbr/super-2xbr-3d-2p.json b/bgfx/chains/xbr/super-2xbr-3d-2p.json
index a196141548d..1fafe6497f1 100644
--- a/bgfx/chains/xbr/super-2xbr-3d-2p.json
+++ b/bgfx/chains/xbr/super-2xbr-3d-2p.json
@@ -42,6 +42,7 @@
"passes": [
{
"effect": "xbr/super-xbr/super-2xbr-3d-pass0",
+ "applytint": true,
"name": "Pass 0",
"input": [
{ "sampler": "s0", "texture": "screen" }
diff --git a/bgfx/chains/xbr/super-2xbr-3d-3p-smoother.json b/bgfx/chains/xbr/super-2xbr-3d-3p-smoother.json
index d3e3d33d7c4..307e0b6a149 100644
--- a/bgfx/chains/xbr/super-2xbr-3d-3p-smoother.json
+++ b/bgfx/chains/xbr/super-2xbr-3d-3p-smoother.json
@@ -42,6 +42,7 @@
"passes": [
{
"effect": "xbr/super-xbr/super-2xbr-3d-pass0",
+ "applytint": true,
"name": "Pass 0",
"input": [
{ "sampler": "s0", "texture": "screen" }
diff --git a/bgfx/chains/xbr/super-4xbr-3d-4p.json b/bgfx/chains/xbr/super-4xbr-3d-4p.json
index 046897b62d5..cd1fa47ff73 100644
--- a/bgfx/chains/xbr/super-4xbr-3d-4p.json
+++ b/bgfx/chains/xbr/super-4xbr-3d-4p.json
@@ -42,6 +42,7 @@
"passes": [
{
"effect": "xbr/super-xbr/super-4xbr-3d-pass0",
+ "applytint": true,
"name": "Pass 0",
"input": [
{ "sampler": "s0", "texture": "screen" }
diff --git a/bgfx/chains/xbr/super-4xbr-3d-6p-smoother.json b/bgfx/chains/xbr/super-4xbr-3d-6p-smoother.json
index f3bd617258f..b3ef9004d82 100644
--- a/bgfx/chains/xbr/super-4xbr-3d-6p-smoother.json
+++ b/bgfx/chains/xbr/super-4xbr-3d-6p-smoother.json
@@ -42,6 +42,7 @@
"passes": [
{
"effect": "xbr/super-xbr/super-4xbr-3d-pass0",
+ "applytint": true,
"name": "Pass 0",
"input": [
{ "sampler": "s0", "texture": "screen" }
diff --git a/bgfx/chains/xbr/super-xbr-2p.json b/bgfx/chains/xbr/super-xbr-2p.json
index cdb8c3f84a5..d4fabc092ad 100644
--- a/bgfx/chains/xbr/super-xbr-2p.json
+++ b/bgfx/chains/xbr/super-xbr-2p.json
@@ -49,6 +49,7 @@
"passes": [
{
"effect": "xbr/super-xbr/super-xbr-pass0",
+ "applytint": true,
"name": "Pass 0",
"input": [
{ "sampler": "s0", "texture": "screen" }
diff --git a/bgfx/chains/xbr/super-xbr-3p-smoother.json b/bgfx/chains/xbr/super-xbr-3p-smoother.json
index 96bda7904b6..487b62059e0 100644
--- a/bgfx/chains/xbr/super-xbr-3p-smoother.json
+++ b/bgfx/chains/xbr/super-xbr-3p-smoother.json
@@ -49,6 +49,7 @@
"passes": [
{
"effect": "xbr/super-xbr/super-xbr-pass0",
+ "applytint": true,
"name": "Pass 0",
"input": [
{ "sampler": "s0", "texture": "screen" }
diff --git a/bgfx/chains/xbr/super-xbr-6p.json b/bgfx/chains/xbr/super-xbr-6p.json
index 4f5c69369d7..3c3a867df88 100644
--- a/bgfx/chains/xbr/super-xbr-6p.json
+++ b/bgfx/chains/xbr/super-xbr-6p.json
@@ -63,6 +63,7 @@
"passes": [
{
"effect": "xbr/super-xbr/super-xbr-pass0",
+ "applytint": true,
"name": "Pass 0",
"input": [
{ "sampler": "s0", "texture": "screen" }
diff --git a/bgfx/chains/xbr/super-xbr-deposterize.json b/bgfx/chains/xbr/super-xbr-deposterize.json
index 8eac3770465..4a1ec028bbf 100644
--- a/bgfx/chains/xbr/super-xbr-deposterize.json
+++ b/bgfx/chains/xbr/super-xbr-deposterize.json
@@ -48,6 +48,7 @@
"passes": [
{
"effect": "misc/deposterize-pass0",
+ "applytint": true,
"name": "Deposterize, Pass 0",
"input": [
{ "sampler": "decal", "texture": "screen" }
diff --git a/bgfx/chains/xbr/super-xbr-fast-3p.json b/bgfx/chains/xbr/super-xbr-fast-3p.json
index f0d0411acc0..92d067c67b8 100644
--- a/bgfx/chains/xbr/super-xbr-fast-3p.json
+++ b/bgfx/chains/xbr/super-xbr-fast-3p.json
@@ -42,6 +42,7 @@
"passes": [
{
"effect": "xbr/super-xbr/super-xbr-fast-pass0",
+ "applytint": true,
"name": "Pass 0",
"input": [
{ "sampler": "s0", "texture": "screen" }
diff --git a/bgfx/chains/xbr/super-xbr-fast-6p.json b/bgfx/chains/xbr/super-xbr-fast-6p.json
index 6d19e28f9b2..bd97d17a496 100644
--- a/bgfx/chains/xbr/super-xbr-fast-6p.json
+++ b/bgfx/chains/xbr/super-xbr-fast-6p.json
@@ -55,6 +55,7 @@
"passes": [
{
"effect": "xbr/super-xbr/super-xbr-fast-pass0",
+ "applytint": true,
"name": "Pass 0",
"input": [
{ "sampler": "s0", "texture": "screen" }
diff --git a/bgfx/chains/xbr/xbr-hybrid.json b/bgfx/chains/xbr/xbr-hybrid.json
index 4529f829423..9c187c7cd7c 100644
--- a/bgfx/chains/xbr/xbr-hybrid.json
+++ b/bgfx/chains/xbr/xbr-hybrid.json
@@ -22,6 +22,7 @@
"passes": [
{
"effect": "xbr/xbr-hybrid/2xbr-hybrid-v4b",
+ "applytint": true,
"name": "Pass 0",
"input": [
{ "sampler": "decal", "texture": "screen" }
diff --git a/bgfx/chains/xbr/xbr-lv1-noblend.json b/bgfx/chains/xbr/xbr-lv1-noblend.json
index f5353a0b6b6..b350a3bf279 100644
--- a/bgfx/chains/xbr/xbr-lv1-noblend.json
+++ b/bgfx/chains/xbr/xbr-lv1-noblend.json
@@ -32,6 +32,7 @@
"passes": [
{
"effect": "xbr/xbr-lv1-noblend",
+ "applytint": true,
"name": "Main Pass",
"input": [
{ "sampler": "decal", "texture": "screen" }
diff --git a/bgfx/chains/xbr/xbr-lv2-3d.json b/bgfx/chains/xbr/xbr-lv2-3d.json
index accc199ee3d..74bc2d4c5b4 100644
--- a/bgfx/chains/xbr/xbr-lv2-3d.json
+++ b/bgfx/chains/xbr/xbr-lv2-3d.json
@@ -32,6 +32,7 @@
"passes": [
{
"effect": "xbr/xbr-lv2-3d",
+ "applytint": true,
"name": "Main Pass",
"input": [
{ "sampler": "decal", "texture": "screen" }
diff --git a/bgfx/chains/xbr/xbr-lv2-accuracy-multipass.json b/bgfx/chains/xbr/xbr-lv2-accuracy-multipass.json
index 772703ec9eb..a4fcbdcb951 100644
--- a/bgfx/chains/xbr/xbr-lv2-accuracy-multipass.json
+++ b/bgfx/chains/xbr/xbr-lv2-accuracy-multipass.json
@@ -41,6 +41,7 @@
"passes": [
{
"effect": "xbr/xbr-lv2-multipass/xbr-lv2-accuracy-pass0",
+ "applytint": true,
"name": "Pass 0",
"input": [
{ "sampler": "decal", "texture": "screen" }
diff --git a/bgfx/chains/xbr/xbr-lv2-accuracy-smart-blur.json b/bgfx/chains/xbr/xbr-lv2-accuracy-smart-blur.json
index d37d687f7a0..03d9acd7f0d 100644
--- a/bgfx/chains/xbr/xbr-lv2-accuracy-smart-blur.json
+++ b/bgfx/chains/xbr/xbr-lv2-accuracy-smart-blur.json
@@ -21,6 +21,7 @@
"passes": [
{
"effect": "xbr/xbr-lv2-multipass/xbr-lv2-accuracy-pass0",
+ "applytint": true,
"name": "Pass 0",
"input": [
{ "sampler": "decal", "texture": "screen" }
diff --git a/bgfx/chains/xbr/xbr-lv2-deposterize.json b/bgfx/chains/xbr/xbr-lv2-deposterize.json
index 38b6fabd501..7c5099960fb 100644
--- a/bgfx/chains/xbr/xbr-lv2-deposterize.json
+++ b/bgfx/chains/xbr/xbr-lv2-deposterize.json
@@ -15,6 +15,7 @@
"passes": [
{
"effect": "misc/deposterize-pass0",
+ "applytint": true,
"name": "Deposterize, Pass 0",
"input": [
{ "sampler": "decal", "texture": "screen" }
diff --git a/bgfx/chains/xbr/xbr-lv2-fast.json b/bgfx/chains/xbr/xbr-lv2-fast.json
index dee37b63f50..ad39d50c046 100644
--- a/bgfx/chains/xbr/xbr-lv2-fast.json
+++ b/bgfx/chains/xbr/xbr-lv2-fast.json
@@ -32,6 +32,7 @@
"passes": [
{
"effect": "xbr/xbr-lv2-fast",
+ "applytint": true,
"name": "Main Pass",
"input": [
{ "sampler": "decal", "texture": "screen" }
diff --git a/bgfx/chains/xbr/xbr-lv2-multipass.json b/bgfx/chains/xbr/xbr-lv2-multipass.json
index 50a46de3287..64e500112b3 100644
--- a/bgfx/chains/xbr/xbr-lv2-multipass.json
+++ b/bgfx/chains/xbr/xbr-lv2-multipass.json
@@ -42,6 +42,7 @@
"passes": [
{
"effect": "xbr/xbr-lv2-multipass/xbr-lv2-c-pass0",
+ "applytint": true,
"name": "Pass 0",
"input": [
{ "sampler": "decal", "texture": "screen" }
diff --git a/bgfx/chains/xbr/xbr-lv2-noblend.json b/bgfx/chains/xbr/xbr-lv2-noblend.json
index 6469df993c5..d83225eea28 100644
--- a/bgfx/chains/xbr/xbr-lv2-noblend.json
+++ b/bgfx/chains/xbr/xbr-lv2-noblend.json
@@ -32,6 +32,7 @@
"passes": [
{
"effect": "xbr/xbr-lv2-noblend",
+ "applytint": true,
"name": "Main Pass",
"input": [
{ "sampler": "decal", "texture": "screen" }
diff --git a/bgfx/chains/xbr/xbr-lv2.json b/bgfx/chains/xbr/xbr-lv2.json
index fbcda45917d..6b098b5cec9 100644
--- a/bgfx/chains/xbr/xbr-lv2.json
+++ b/bgfx/chains/xbr/xbr-lv2.json
@@ -32,6 +32,7 @@
"passes": [
{
"effect": "xbr/xbr-lv2",
+ "applytint": true,
"name": "Main Pass",
"input": [
{ "sampler": "decal", "texture": "screen" }
diff --git a/bgfx/chains/xbr/xbr-lv3-multipass.json b/bgfx/chains/xbr/xbr-lv3-multipass.json
index 801ffff34da..18aed86e084 100644
--- a/bgfx/chains/xbr/xbr-lv3-multipass.json
+++ b/bgfx/chains/xbr/xbr-lv3-multipass.json
@@ -42,6 +42,7 @@
"passes": [
{
"effect": "xbr/xbr-lv3-multipass/xbr-lv3-pass0",
+ "applytint": true,
"name": "Pass 0",
"input": [
{ "sampler": "decal", "texture": "screen" }
diff --git a/bgfx/chains/xbr/xbr-lv3-noblend.json b/bgfx/chains/xbr/xbr-lv3-noblend.json
index eedfab7217d..37e006885d5 100644
--- a/bgfx/chains/xbr/xbr-lv3-noblend.json
+++ b/bgfx/chains/xbr/xbr-lv3-noblend.json
@@ -32,6 +32,7 @@
"passes": [
{
"effect": "xbr/xbr-lv3-noblend",
+ "applytint": true,
"name": "Main Pass",
"input": [
{ "sampler": "decal", "texture": "screen" }
diff --git a/bgfx/chains/xbr/xbr-lv3.json b/bgfx/chains/xbr/xbr-lv3.json
index 6d6046e9712..ca4866bee37 100644
--- a/bgfx/chains/xbr/xbr-lv3.json
+++ b/bgfx/chains/xbr/xbr-lv3.json
@@ -32,6 +32,7 @@
"passes": [
{
"effect": "xbr/xbr-lv3",
+ "applytint": true,
"name": "Main Pass",
"input": [
{ "sampler": "decal", "texture": "screen" }
diff --git a/bgfx/chains/xbr/xbr-mlv4-dilation.json b/bgfx/chains/xbr/xbr-mlv4-dilation.json
index a3dfd50e912..e0a55017754 100644
--- a/bgfx/chains/xbr/xbr-mlv4-dilation.json
+++ b/bgfx/chains/xbr/xbr-mlv4-dilation.json
@@ -56,6 +56,7 @@
"passes": [
{
"effect": "xbr/xbr-mlv4-multipass/xbr-mlv4-pass1",
+ "applytint": true,
"name": "Pass 1",
"input": [
{ "sampler": "decal", "texture": "screen" }
diff --git a/bgfx/chains/xbr/xbr-mlv4-multipass.json b/bgfx/chains/xbr/xbr-mlv4-multipass.json
index decb4db3ec2..010a5f99250 100644
--- a/bgfx/chains/xbr/xbr-mlv4-multipass.json
+++ b/bgfx/chains/xbr/xbr-mlv4-multipass.json
@@ -49,6 +49,7 @@
"passes": [
{
"effect": "xbr/xbr-mlv4-multipass/xbr-mlv4-pass1",
+ "applytint": true,
"name": "Pass 0",
"input": [
{ "sampler": "decal", "texture": "screen" }
diff --git a/bgfx/effects/default/blit.json b/bgfx/effects/default/blit.json
index ed957e812b3..a3c21f4c964 100644
--- a/bgfx/effects/default/blit.json
+++ b/bgfx/effects/default/blit.json
@@ -6,27 +6,6 @@
//
//============================================================
{
- // blend (required): The blend state for this effect.
- "blend": {
- // equation (optional): What equation to perform on the source and destination blend values.
- // values: "add", "sub", "revSub", "min", "max"
- // default: "add"
- //
- // "subtract" and "revSubtract" are provided as aliases for "sub" and "revSub"
- "equation": "add",
-
- // blend function parameters (optional): What factors to use in the blend function when calculating the final pixel.
- // values: "0", "1", "srccolor", "1-srccolor", "dstcolor", "1-dstcolor", "srcalpha", "1-srcalpha", "dstalpha", "1-dstalpha"
- // defaults (srcColor, srcAlpha): "1"
- // defaults (dstColor, dstAlpha): "0"
- //
- // "zero", "one", "invsrccolor", "invdstcolor", "invsrcalpha", and "invdstalpha" are provided as aliases for "0", "1", "1-srccolor", "1-dstcolor", "1-srcalpha", and "1-dstalpha"
- "srcColor": "srcalpha",
- "dstColor": "1-srcalpha",
- "srcAlpha": "srcalpha",
- "dstAlpha": "1-srcalpha"
- },
-
// depth (required): The depth state for this effect.
"depth": {
// function (optional): The depth function to use when drawing.
diff --git a/bgfx/effects/misc/bcg_adjust.json b/bgfx/effects/misc/bcg_adjust.json
new file mode 100644
index 00000000000..545910e5224
--- /dev/null
+++ b/bgfx/effects/misc/bcg_adjust.json
@@ -0,0 +1,26 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+//===============================================================
+//
+// bcg_adjust.json: Brightness/Contrast/Gamma adjustment.
+//
+//===============================================================
+{
+ "blend": {
+ "equation": "add",
+ "srcColor": "srcalpha",
+ "dstColor": "1-srcalpha",
+ "srcAlpha": "srcalpha",
+ "dstAlpha": "1-srcalpha"
+ },
+ "depth": { "function": "always", "writeenable": false },
+ "cull": { "mode": "none" },
+ "write": { "rgb": true, "alpha": true },
+ "vertex": "chains/misc/vs_blit",
+ "fragment": "chains/misc/fs_blit_bcg",
+ "uniforms": [
+ { "name": "s_tex", "type": "int", "values": [ 1.0 ] },
+ { "name": "s_pal", "type": "int", "values": [ 1.0 ] },
+ { "name": "u_inv_tex_size1", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }
+ ]
+} \ No newline at end of file
diff --git a/bgfx/shaders/dx11/chains/misc/fs_blit_bcg.bin b/bgfx/shaders/dx11/chains/misc/fs_blit_bcg.bin
new file mode 100644
index 00000000000..b1c9e92a142
--- /dev/null
+++ b/bgfx/shaders/dx11/chains/misc/fs_blit_bcg.bin
Binary files differ
diff --git a/bgfx/shaders/dx9/chains/misc/fs_blit_bcg.bin b/bgfx/shaders/dx9/chains/misc/fs_blit_bcg.bin
new file mode 100644
index 00000000000..34c03c8626d
--- /dev/null
+++ b/bgfx/shaders/dx9/chains/misc/fs_blit_bcg.bin
Binary files differ
diff --git a/bgfx/shaders/essl/chains/misc/fs_blit_bcg.bin b/bgfx/shaders/essl/chains/misc/fs_blit_bcg.bin
new file mode 100644
index 00000000000..0b3f68af136
--- /dev/null
+++ b/bgfx/shaders/essl/chains/misc/fs_blit_bcg.bin
Binary files differ
diff --git a/bgfx/shaders/glsl/chains/misc/fs_blit_bcg.bin b/bgfx/shaders/glsl/chains/misc/fs_blit_bcg.bin
new file mode 100644
index 00000000000..6d501412a01
--- /dev/null
+++ b/bgfx/shaders/glsl/chains/misc/fs_blit_bcg.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/misc/fs_blit_bcg.bin b/bgfx/shaders/metal/chains/misc/fs_blit_bcg.bin
new file mode 100644
index 00000000000..fa0181d4b98
--- /dev/null
+++ b/bgfx/shaders/metal/chains/misc/fs_blit_bcg.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/misc/fs_blit_yuy16.bin b/bgfx/shaders/metal/chains/misc/fs_blit_yuy16.bin
index cd086562e78..5a3347b9461 100644
--- a/bgfx/shaders/metal/chains/misc/fs_blit_yuy16.bin
+++ b/bgfx/shaders/metal/chains/misc/fs_blit_yuy16.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/misc/fs_bob-and-ghost-deinterlace.bin b/bgfx/shaders/metal/chains/misc/fs_bob-and-ghost-deinterlace.bin
index 4890df57e53..1a8c2b61c46 100644
--- a/bgfx/shaders/metal/chains/misc/fs_bob-and-ghost-deinterlace.bin
+++ b/bgfx/shaders/metal/chains/misc/fs_bob-and-ghost-deinterlace.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/misc/fs_saturation.bin b/bgfx/shaders/metal/chains/misc/fs_saturation.bin
index cc5e1c52b64..b0f748aaa6e 100644
--- a/bgfx/shaders/metal/chains/misc/fs_saturation.bin
+++ b/bgfx/shaders/metal/chains/misc/fs_saturation.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/misc/vs_deposterize-pass0.bin b/bgfx/shaders/metal/chains/misc/vs_deposterize-pass0.bin
index 1d21506a0b8..58de2c17249 100644
--- a/bgfx/shaders/metal/chains/misc/vs_deposterize-pass0.bin
+++ b/bgfx/shaders/metal/chains/misc/vs_deposterize-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/metal/chains/misc/vs_deposterize-pass1.bin b/bgfx/shaders/metal/chains/misc/vs_deposterize-pass1.bin
index 877f0f3321c..95798b897d1 100644
--- a/bgfx/shaders/metal/chains/misc/vs_deposterize-pass1.bin
+++ b/bgfx/shaders/metal/chains/misc/vs_deposterize-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/spirv/chains/misc/fs_blit.bin b/bgfx/shaders/spirv/chains/misc/fs_blit.bin
index 4d71b00e1f3..a08fb70c7e6 100644
--- a/bgfx/shaders/spirv/chains/misc/fs_blit.bin
+++ b/bgfx/shaders/spirv/chains/misc/fs_blit.bin
Binary files differ
diff --git a/bgfx/shaders/spirv/chains/misc/fs_blit_bcg.bin b/bgfx/shaders/spirv/chains/misc/fs_blit_bcg.bin
new file mode 100644
index 00000000000..beed088c3bd
--- /dev/null
+++ b/bgfx/shaders/spirv/chains/misc/fs_blit_bcg.bin
Binary files differ
diff --git a/bgfx/shaders/spirv/chains/misc/fs_blit_palette16.bin b/bgfx/shaders/spirv/chains/misc/fs_blit_palette16.bin
index 0de699278db..604197ef811 100644
--- a/bgfx/shaders/spirv/chains/misc/fs_blit_palette16.bin
+++ b/bgfx/shaders/spirv/chains/misc/fs_blit_palette16.bin
Binary files differ
diff --git a/bgfx/shaders/spirv/chains/misc/fs_blit_rgb32.bin b/bgfx/shaders/spirv/chains/misc/fs_blit_rgb32.bin
index bd7bc7bb3ab..d602784f416 100644
--- a/bgfx/shaders/spirv/chains/misc/fs_blit_rgb32.bin
+++ b/bgfx/shaders/spirv/chains/misc/fs_blit_rgb32.bin
Binary files differ
diff --git a/bgfx/shaders/spirv/chains/misc/fs_blit_yuy16.bin b/bgfx/shaders/spirv/chains/misc/fs_blit_yuy16.bin
index 4d4e3a64454..d939846fb34 100644
--- a/bgfx/shaders/spirv/chains/misc/fs_blit_yuy16.bin
+++ b/bgfx/shaders/spirv/chains/misc/fs_blit_yuy16.bin
Binary files differ
diff --git a/bgfx/shaders/spirv/chains/misc/fs_bob-and-ghost-deinterlace.bin b/bgfx/shaders/spirv/chains/misc/fs_bob-and-ghost-deinterlace.bin
index 5791486e270..5579239421c 100644
--- a/bgfx/shaders/spirv/chains/misc/fs_bob-and-ghost-deinterlace.bin
+++ b/bgfx/shaders/spirv/chains/misc/fs_bob-and-ghost-deinterlace.bin
Binary files differ
diff --git a/bgfx/shaders/spirv/chains/misc/fs_deposterize-pass0.bin b/bgfx/shaders/spirv/chains/misc/fs_deposterize-pass0.bin
index 0e2efcb82ca..b3f2533ce25 100644
--- a/bgfx/shaders/spirv/chains/misc/fs_deposterize-pass0.bin
+++ b/bgfx/shaders/spirv/chains/misc/fs_deposterize-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/spirv/chains/misc/fs_deposterize-pass1.bin b/bgfx/shaders/spirv/chains/misc/fs_deposterize-pass1.bin
index f287855f505..30c3a3f6b20 100644
--- a/bgfx/shaders/spirv/chains/misc/fs_deposterize-pass1.bin
+++ b/bgfx/shaders/spirv/chains/misc/fs_deposterize-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/spirv/chains/misc/fs_lut.bin b/bgfx/shaders/spirv/chains/misc/fs_lut.bin
index 15bd5b1e8d6..2a046164fd9 100644
--- a/bgfx/shaders/spirv/chains/misc/fs_lut.bin
+++ b/bgfx/shaders/spirv/chains/misc/fs_lut.bin
Binary files differ
diff --git a/bgfx/shaders/spirv/chains/misc/fs_saturation.bin b/bgfx/shaders/spirv/chains/misc/fs_saturation.bin
index 0d1a86a73d4..6c9449ed085 100644
--- a/bgfx/shaders/spirv/chains/misc/fs_saturation.bin
+++ b/bgfx/shaders/spirv/chains/misc/fs_saturation.bin
Binary files differ
diff --git a/bgfx/shaders/spirv/chains/misc/vs_blit.bin b/bgfx/shaders/spirv/chains/misc/vs_blit.bin
index 49f68528d2c..7d21cea1f97 100644
--- a/bgfx/shaders/spirv/chains/misc/vs_blit.bin
+++ b/bgfx/shaders/spirv/chains/misc/vs_blit.bin
Binary files differ
diff --git a/bgfx/shaders/spirv/chains/misc/vs_bob-and-ghost-deinterlace.bin b/bgfx/shaders/spirv/chains/misc/vs_bob-and-ghost-deinterlace.bin
index 49f68528d2c..7d21cea1f97 100644
--- a/bgfx/shaders/spirv/chains/misc/vs_bob-and-ghost-deinterlace.bin
+++ b/bgfx/shaders/spirv/chains/misc/vs_bob-and-ghost-deinterlace.bin
Binary files differ
diff --git a/bgfx/shaders/spirv/chains/misc/vs_deposterize-pass0.bin b/bgfx/shaders/spirv/chains/misc/vs_deposterize-pass0.bin
index 626720b9f25..e0672497f82 100644
--- a/bgfx/shaders/spirv/chains/misc/vs_deposterize-pass0.bin
+++ b/bgfx/shaders/spirv/chains/misc/vs_deposterize-pass0.bin
Binary files differ
diff --git a/bgfx/shaders/spirv/chains/misc/vs_deposterize-pass1.bin b/bgfx/shaders/spirv/chains/misc/vs_deposterize-pass1.bin
index 07a53c4c599..4756202c8e0 100644
--- a/bgfx/shaders/spirv/chains/misc/vs_deposterize-pass1.bin
+++ b/bgfx/shaders/spirv/chains/misc/vs_deposterize-pass1.bin
Binary files differ
diff --git a/bgfx/shaders/spirv/chains/misc/vs_lut.bin b/bgfx/shaders/spirv/chains/misc/vs_lut.bin
index 49f68528d2c..7d21cea1f97 100644
--- a/bgfx/shaders/spirv/chains/misc/vs_lut.bin
+++ b/bgfx/shaders/spirv/chains/misc/vs_lut.bin
Binary files differ
diff --git a/bgfx/shaders/spirv/chains/misc/vs_saturation.bin b/bgfx/shaders/spirv/chains/misc/vs_saturation.bin
index 49f68528d2c..7d21cea1f97 100644
--- a/bgfx/shaders/spirv/chains/misc/vs_saturation.bin
+++ b/bgfx/shaders/spirv/chains/misc/vs_saturation.bin
Binary files differ
diff --git a/src/emu/render.cpp b/src/emu/render.cpp
index 55340803345..f20650fb4be 100644
--- a/src/emu/render.cpp
+++ b/src/emu/render.cpp
@@ -697,7 +697,7 @@ const rgb_t *render_container::bcg_lookup_table(int texformat, u32 &out_length,
case TEXFORMAT_RGB32:
case TEXFORMAT_ARGB32:
case TEXFORMAT_YUY16:
- out_length = 256;
+ out_length = ARRAY_LENGTH(m_bcglookup256);
return m_bcglookup256;
default:
diff --git a/src/osd/modules/render/bgfx/chain.cpp b/src/osd/modules/render/bgfx/chain.cpp
index 940bf85d81d..a8f8e895b7b 100644
--- a/src/osd/modules/render/bgfx/chain.cpp
+++ b/src/osd/modules/render/bgfx/chain.cpp
@@ -143,14 +143,14 @@ uint32_t bgfx_chain::applicable_passes()
return applicable_passes;
}
-void bgfx_chain::prepend_converter(bgfx_effect *effect, chain_manager &chains)
+void bgfx_chain::insert_effect(uint32_t index, bgfx_effect *effect, std::string name, std::string source, chain_manager &chains)
{
clear_state *clear = new clear_state(BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH | BGFX_CLEAR_STENCIL, 0, 1.0f, 0);
std::vector<bgfx_suppressor*> suppressors;
std::vector<bgfx_input_pair*> inputs;
std::vector<std::string> available_textures;
- inputs.push_back(new bgfx_input_pair(0, "s_tex", "source", available_textures, "", chains, m_screen_index));
+ inputs.push_back(new bgfx_input_pair(0, "s_tex", source, available_textures, "", chains, m_screen_index));
inputs.push_back(new bgfx_input_pair(1, "s_pal", "palette", available_textures, "", chains, m_screen_index));
std::vector<bgfx_entry_uniform*> uniforms;
@@ -163,8 +163,7 @@ void bgfx_chain::prepend_converter(bgfx_effect *effect, chain_manager &chains)
uniforms.push_back(new bgfx_value_uniform(new bgfx_uniform("u_inv_tex_size0", bgfx::UniformType::Vec4), values, 4));
uniforms.push_back(new bgfx_value_uniform(new bgfx_uniform("u_inv_tex_size1", bgfx::UniformType::Vec4), values, 4));
- m_entries.insert(m_entries.begin(), new bgfx_chain_entry("XXconvert", effect, clear, suppressors, inputs, uniforms, m_targets, "screen"));
- m_has_converter = true;
+ m_entries.insert(m_entries.begin() + index, new bgfx_chain_entry(name, effect, clear, suppressors, inputs, uniforms, m_targets, "screen", false));
const uint32_t screen_width = chains.targets().width(TARGET_STYLE_GUEST, m_screen_index);
const uint32_t screen_height = chains.targets().height(TARGET_STYLE_GUEST, m_screen_index);
diff --git a/src/osd/modules/render/bgfx/chain.h b/src/osd/modules/render/bgfx/chain.h
index 856e9ae1fa3..6faf8634e8b 100644
--- a/src/osd/modules/render/bgfx/chain.h
+++ b/src/osd/modules/render/bgfx/chain.h
@@ -39,8 +39,12 @@ public:
uint32_t applicable_passes();
bool transform() const { return m_transform; }
bool has_converter() const { return m_has_converter; }
+ bool has_adjuster() const { return m_has_adjuster; }
- void prepend_converter(bgfx_effect *effect, chain_manager &chains);
+ // Setters
+ void set_has_converter(bool has_converter) { m_has_converter = has_converter; }
+ void set_has_adjuster(bool has_adjuster) { m_has_adjuster = has_adjuster; }
+ void insert_effect(uint32_t index, bgfx_effect *effect, std::string name, std::string source, chain_manager &chains);
private:
std::string m_name;
@@ -56,6 +60,7 @@ private:
int64_t m_current_time;
uint32_t m_screen_index;
bool m_has_converter;
+ bool m_has_adjuster;
};
#endif // __DRAWBGFX_CHAIN__
diff --git a/src/osd/modules/render/bgfx/chainentry.cpp b/src/osd/modules/render/bgfx/chainentry.cpp
index 7d25785ab64..8f8eedc1214 100644
--- a/src/osd/modules/render/bgfx/chainentry.cpp
+++ b/src/osd/modules/render/bgfx/chainentry.cpp
@@ -13,6 +13,7 @@
#include <bgfx/bgfx.h>
#include <bx/math.h>
+#include <cmath>
#include "chainmanager.h"
#include "chainentry.h"
@@ -29,7 +30,7 @@
#include "render.h"
-bgfx_chain_entry::bgfx_chain_entry(std::string name, bgfx_effect* effect, clear_state* clear, std::vector<bgfx_suppressor*> suppressors, std::vector<bgfx_input_pair*> inputs, std::vector<bgfx_entry_uniform*> uniforms, target_manager& targets, std::string output)
+bgfx_chain_entry::bgfx_chain_entry(std::string name, bgfx_effect* effect, clear_state* clear, std::vector<bgfx_suppressor*> suppressors, std::vector<bgfx_input_pair*> inputs, std::vector<bgfx_entry_uniform*> uniforms, target_manager& targets, std::string output, bool apply_tint)
: m_name(name)
, m_effect(effect)
, m_clear(clear)
@@ -38,6 +39,7 @@ bgfx_chain_entry::bgfx_chain_entry(std::string name, bgfx_effect* effect, clear_
, m_uniforms(uniforms)
, m_targets(targets)
, m_output(output)
+ , m_apply_tint(apply_tint)
{
}
@@ -68,8 +70,18 @@ void bgfx_chain_entry::submit(int view, chain_manager::screen_prim &prim, textur
input->bind(m_effect, screen);
}
+ uint32_t tint = 0xffffffff;
+ if (m_apply_tint)
+ {
+ const uint8_t a = (uint8_t)std::round(prim.m_prim->color.a * 255);
+ const uint8_t r = (uint8_t)std::round(prim.m_prim->color.r * 255);
+ const uint8_t g = (uint8_t)std::round(prim.m_prim->color.g * 255);
+ const uint8_t b = (uint8_t)std::round(prim.m_prim->color.b * 255);
+ tint = (a << 24) | (r << 16) | (g << 8) | b;
+ }
+
bgfx::TransientVertexBuffer buffer;
- put_screen_buffer(prim.m_screen_width, prim.m_screen_height, &buffer);
+ put_screen_buffer(prim.m_screen_width, prim.m_screen_height, tint, &buffer);
bgfx::setVertexBuffer(0, &buffer);
setup_auto_uniforms(prim, textures, screen_count, screen_width, screen_height, screen_scale_x, screen_scale_y, screen_offset_x, screen_offset_y, rotation_type, swap_xy, screen);
@@ -268,7 +280,7 @@ bool bgfx_chain_entry::setup_view(int view, uint16_t screen_width, uint16_t scre
return true;
}
-void bgfx_chain_entry::put_screen_buffer(uint16_t screen_width, uint16_t screen_height, bgfx::TransientVertexBuffer* buffer) const
+void bgfx_chain_entry::put_screen_buffer(uint16_t screen_width, uint16_t screen_height, uint32_t screen_tint, bgfx::TransientVertexBuffer* buffer) const
{
if (6 == bgfx::getAvailTransientVertexBuffer(6, ScreenVertex::ms_decl))
{
@@ -304,42 +316,42 @@ void bgfx_chain_entry::put_screen_buffer(uint16_t screen_width, uint16_t screen_
vertex[0].m_x = x[0];
vertex[0].m_y = y[0];
vertex[0].m_z = 0;
- vertex[0].m_rgba = 0xffffffff;
+ vertex[0].m_rgba = screen_tint;
vertex[0].m_u = u[0];
vertex[0].m_v = v[0];
vertex[1].m_x = x[1];
vertex[1].m_y = y[1];
vertex[1].m_z = 0;
- vertex[1].m_rgba = 0xffffffff;
+ vertex[1].m_rgba = screen_tint;
vertex[1].m_u = u[1];
vertex[1].m_v = v[1];
vertex[2].m_x = x[3];
vertex[2].m_y = y[3];
vertex[2].m_z = 0;
- vertex[2].m_rgba = 0xffffffff;
+ vertex[2].m_rgba = screen_tint;
vertex[2].m_u = u[3];
vertex[2].m_v = v[3];
vertex[3].m_x = x[3];
vertex[3].m_y = y[3];
vertex[3].m_z = 0;
- vertex[3].m_rgba = 0xffffffff;
+ vertex[3].m_rgba = screen_tint;
vertex[3].m_u = u[3];
vertex[3].m_v = v[3];
vertex[4].m_x = x[2];
vertex[4].m_y = y[2];
vertex[4].m_z = 0;
- vertex[4].m_rgba = 0xffffffff;
+ vertex[4].m_rgba = screen_tint;
vertex[4].m_u = u[2];
vertex[4].m_v = v[2];
vertex[5].m_x = x[0];
vertex[5].m_y = y[0];
vertex[5].m_z = 0;
- vertex[5].m_rgba = 0xffffffff;
+ vertex[5].m_rgba = screen_tint;
vertex[5].m_u = u[0];
vertex[5].m_v = v[0];
}
diff --git a/src/osd/modules/render/bgfx/chainentry.h b/src/osd/modules/render/bgfx/chainentry.h
index d9408531476..56c34653266 100644
--- a/src/osd/modules/render/bgfx/chainentry.h
+++ b/src/osd/modules/render/bgfx/chainentry.h
@@ -34,7 +34,7 @@ class target_manager;
class bgfx_chain_entry
{
public:
- bgfx_chain_entry(std::string name, bgfx_effect* effect, clear_state* clear, std::vector<bgfx_suppressor*> suppressors, std::vector<bgfx_input_pair*> inputs, std::vector<bgfx_entry_uniform*> uniforms, target_manager& targets, std::string output);
+ bgfx_chain_entry(std::string name, bgfx_effect* effect, clear_state* clear, std::vector<bgfx_suppressor*> suppressors, std::vector<bgfx_input_pair*> inputs, std::vector<bgfx_entry_uniform*> uniforms, target_manager& targets, std::string output, bool apply_tint);
~bgfx_chain_entry();
void submit(int view, chain_manager::screen_prim &prim, texture_manager& textures, uint16_t screen_count, uint16_t screen_width, uint16_t screen_height, float screen_scale_x, float screen_scale_y, float screen_offset_x, float screen_offset_y, uint32_t rotation_type, bool swap_xy, uint64_t blend, int32_t screen);
@@ -59,7 +59,7 @@ private:
void setup_screenindex_uniform(int32_t screen) const;
bool setup_view(int view, uint16_t screen_width, uint16_t screen_height, int32_t screen) const;
- void put_screen_buffer(uint16_t screen_width, uint16_t screen_height, bgfx::TransientVertexBuffer* buffer) const;
+ void put_screen_buffer(uint16_t screen_width, uint16_t screen_height, uint32_t screen_tint, bgfx::TransientVertexBuffer* buffer) const;
std::string m_name;
bgfx_effect* m_effect;
@@ -69,6 +69,7 @@ private:
std::vector<bgfx_entry_uniform*> m_uniforms;
target_manager& m_targets;
std::string m_output;
+ bool m_apply_tint;
};
#endif // __DRAWBGFX_CHAIN_ENTRY__
diff --git a/src/osd/modules/render/bgfx/chainentryreader.cpp b/src/osd/modules/render/bgfx/chainentryreader.cpp
index d48b214f83d..f14d9d76f64 100644
--- a/src/osd/modules/render/bgfx/chainentryreader.cpp
+++ b/src/osd/modules/render/bgfx/chainentryreader.cpp
@@ -183,6 +183,10 @@ bgfx_chain_entry* chain_entry_reader::read_from_value(const Value& value, std::s
}
}
+ // Parse whether or not to apply screen tint in this pass
+ bool applytint = get_bool(value, "applytint", false);
+
+ // Parse uniforms
std::vector<bgfx_entry_uniform*> uniforms;
if (value.HasMember("uniforms"))
{
@@ -228,7 +232,7 @@ bgfx_chain_entry* chain_entry_reader::read_from_value(const Value& value, std::s
}
std::string output = value["output"].GetString();
- return new bgfx_chain_entry(name, effect, clear, suppressors, inputs, uniforms, chains.targets(), output);
+ return new bgfx_chain_entry(name, effect, clear, suppressors, inputs, uniforms, chains.targets(), output, applytint);
}
bool chain_entry_reader::validate_parameters(const Value& value, std::string prefix)
@@ -242,5 +246,6 @@ bool chain_entry_reader::validate_parameters(const Value& value, std::string pre
if (!READER_CHECK(!value.HasMember("input") || value["input"].IsArray(), (prefix + "Value 'input' must be an array\n").c_str())) return false;
if (!READER_CHECK(!value.HasMember("uniforms") || value["uniforms"].IsArray(), (prefix + "Value 'uniforms' must be an array\n").c_str())) return false;
if (!READER_CHECK(!value.HasMember("disablewhen") || value["disablewhen"].IsArray(), (prefix + "Value 'disablewhen' must be an array\n").c_str())) return false;
+ if (!READER_CHECK(!value.HasMember("applytint") || value["applytint"].IsBool(), (prefix + "Value 'applytint' must be a bool\n").c_str())) return false;
return true;
}
diff --git a/src/osd/modules/render/bgfx/chainmanager.cpp b/src/osd/modules/render/bgfx/chainmanager.cpp
index 313c78f3623..c2eea4c9a8b 100644
--- a/src/osd/modules/render/bgfx/chainmanager.cpp
+++ b/src/osd/modules/render/bgfx/chainmanager.cpp
@@ -64,6 +64,7 @@ void chain_manager::init_texture_converters()
m_converters.push_back(m_effects.effect("misc/texconv_rgb32"));
m_converters.push_back(nullptr);
m_converters.push_back(m_effects.effect("misc/texconv_yuy16"));
+ m_adjuster = m_effects.effect("misc/bcg_adjust");
}
void chain_manager::refresh_available_chains()
@@ -156,7 +157,7 @@ bgfx_chain* chain_manager::load_chain(std::string name, uint32_t screen_index)
bx::FileReader reader;
if (!bx::open(&reader, path.c_str()))
{
- printf("Unable to open chain file %s, falling back to no post processing\n", path.c_str());
+ osd_printf_warning("Unable to open chain file %s, falling back to no post processing\n", path.c_str());
return nullptr;
}
@@ -175,8 +176,8 @@ bgfx_chain* chain_manager::load_chain(std::string name, uint32_t screen_index)
if (document.HasParseError())
{
std::string error(GetParseError_En(document.GetParseError()));
- printf("Unable to parse chain %s. Errors returned:\n", path.c_str());
- printf("%s\n", error.c_str());
+ osd_printf_warning("Unable to parse chain %s. Errors returned:\n", path.c_str());
+ osd_printf_warning("%s\n", error.c_str());
return nullptr;
}
@@ -184,7 +185,7 @@ bgfx_chain* chain_manager::load_chain(std::string name, uint32_t screen_index)
if (chain == nullptr)
{
- printf("Unable to load chain %s, falling back to no post processing\n", path.c_str());
+ osd_printf_warning("Unable to load chain %s, falling back to no post processing\n", path.c_str());
return nullptr;
}
@@ -443,11 +444,12 @@ uint32_t chain_manager::update_screen_textures(uint32_t view, render_primitive *
const uint32_t src_format = (prim.m_flags & PRIMFLAG_TEXFORMAT_MASK) >> PRIMFLAG_TEXFORMAT_SHIFT;
const bool needs_conversion = m_converters[src_format] != nullptr;
+ const bool needs_adjust = prim.m_prim->texture.palette != nullptr && src_format != TEXFORMAT_PALETTE16;
std::string screen_index = std::to_string(screen);
std::string source_name = "source" + screen_index;
std::string screen_name = "screen" + screen_index;
std::string palette_name = "palette" + screen_index;
- std::string full_name = needs_conversion ? source_name : screen_name;
+ std::string full_name = (needs_conversion || needs_adjust) ? source_name : screen_name;
if (texture && (texture->width() != tex_width || texture->height() != tex_height))
{
m_textures.add_provider(full_name, nullptr);
@@ -483,21 +485,19 @@ uint32_t chain_manager::update_screen_textures(uint32_t view, render_primitive *
m_textures.add_provider(palette_name, palette);
}
- if (screen >= m_screen_textures.size())
+ while (screen >= m_screen_textures.size())
{
- m_screen_textures.push_back(texture);
- if (palette)
- {
- m_screen_palettes.push_back(palette);
- }
+ m_screen_textures.push_back(nullptr);
}
- else
+ m_screen_textures[screen] = texture;
+
+ while (screen >= m_screen_palettes.size())
{
- m_screen_textures[screen] = texture;
- if (palette)
- {
- m_screen_palettes[screen] = palette;
- }
+ m_screen_palettes.push_back(nullptr);
+ }
+ if (palette)
+ {
+ m_screen_palettes[screen] = palette;
}
}
else
@@ -506,17 +506,40 @@ uint32_t chain_manager::update_screen_textures(uint32_t view, render_primitive *
if (prim.m_prim->texture.palette)
{
- m_palette_temp.resize(palette->width() * palette->height() * 4);
+ uint16_t palette_width = (uint16_t)std::min(prim.m_palette_length, 256U);
+ uint16_t palette_height = (uint16_t)std::max((prim.m_palette_length + 255) / 256, 1U);
+ const uint32_t palette_size = palette_width * palette_height * 4;
+ m_palette_temp.resize(palette_size);
memcpy(&m_palette_temp[0], prim.m_prim->texture.palette, prim.m_palette_length * 4);
- const bgfx::Memory *palmem = bgfx::copy(&m_palette_temp[0], palette->width() * palette->height() * 4);
- palette->update(palmem);
+ const bgfx::Memory *palmem = bgfx::copy(&m_palette_temp[0], palette_size);
+
+ if (palette)
+ {
+ palette->update(palmem);
+ }
+ else
+ {
+ palette = new bgfx_texture(palette_name, bgfx::TextureFormat::BGRA8, palette_width, palette_height, palmem, BGFX_SAMPLER_U_CLAMP | BGFX_SAMPLER_V_CLAMP | BGFX_SAMPLER_MIN_POINT | BGFX_SAMPLER_MAG_POINT | BGFX_SAMPLER_MIP_POINT, palette_width * 4);
+ m_textures.add_provider(palette_name, palette);
+ while (screen >= m_screen_palettes.size())
+ {
+ m_screen_palettes.push_back(nullptr);
+ }
+ m_screen_palettes[screen] = palette;
+ }
}
}
bgfx_chain* chain = screen_chain(screen);
+ if (chain && needs_adjust && !chain->has_adjuster())
+ {
+ chain->insert_effect(chain->has_converter() ? 1 : 0, m_adjuster, "XXadjust", needs_conversion ? "screen" : "source", *this);
+ chain->set_has_adjuster(true);
+ }
if (chain && needs_conversion && !chain->has_converter())
{
- chain->prepend_converter(m_converters[src_format], *this);
+ chain->insert_effect(0, m_converters[src_format], "XXconvert", "source", *this);
+ chain->set_has_converter(true);
}
}
diff --git a/src/osd/modules/render/bgfx/chainmanager.h b/src/osd/modules/render/bgfx/chainmanager.h
index 36a6847455f..2786714bb98 100644
--- a/src/osd/modules/render/bgfx/chainmanager.h
+++ b/src/osd/modules/render/bgfx/chainmanager.h
@@ -147,6 +147,7 @@ private:
std::vector<bgfx_texture*> m_screen_textures;
std::vector<bgfx_texture*> m_screen_palettes;
std::vector<bgfx_effect*> m_converters;
+ bgfx_effect * m_adjuster;
std::vector<screen_prim> m_screen_prims;
std::vector<uint8_t> m_palette_temp;
diff --git a/src/osd/modules/render/bgfx/inputpair.cpp b/src/osd/modules/render/bgfx/inputpair.cpp
index f6e695a9992..9fd2b0e6855 100644
--- a/src/osd/modules/render/bgfx/inputpair.cpp
+++ b/src/osd/modules/render/bgfx/inputpair.cpp
@@ -46,7 +46,9 @@ bgfx_input_pair::~bgfx_input_pair()
void bgfx_input_pair::bind(bgfx_effect *effect, const int32_t screen) const
{
- assert(effect->uniform(m_sampler) != nullptr);
+ if (effect->uniform(m_sampler) == nullptr)
+ return;
+
std::string name = m_texture + std::to_string(screen);
bgfx_texture_handle_provider* provider = chains().textures().provider(name);
diff --git a/src/osd/modules/render/bgfx/shaders/chains/misc/fs_blit_bcg.sc b/src/osd/modules/render/bgfx/shaders/chains/misc/fs_blit_bcg.sc
new file mode 100644
index 00000000000..37d64462c51
--- /dev/null
+++ b/src/osd/modules/render/bgfx/shaders/chains/misc/fs_blit_bcg.sc
@@ -0,0 +1,24 @@
+$input v_color0, v_texcoord0
+
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+
+#include "common.sh"
+
+// Samplers
+SAMPLER2D(s_tex, 0);
+SAMPLER2D(s_pal, 1);
+
+uniform vec4 u_inv_tex_size1;
+
+void main()
+{
+ vec4 src = texture2D(s_tex, v_texcoord0);
+ vec2 blu_uv = vec2(src.b * 256.0, 0.0) * u_inv_tex_size1.xy;
+ vec2 grn_uv = vec2(src.g * 256.0, 1.0) * u_inv_tex_size1.xy;
+ vec2 red_uv = vec2(src.r * 256.0, 2.0) * u_inv_tex_size1.xy;
+ float blu = texture2D(s_pal, blu_uv).b;
+ float grn = texture2D(s_pal, grn_uv).g;
+ float red = texture2D(s_pal, red_uv).r;
+ gl_FragColor = vec4(red, grn, blu, src.a) * v_color0;
+}
diff --git a/src/osd/modules/render/bgfx/statereader.h b/src/osd/modules/render/bgfx/statereader.h
index 8026b4b07d0..d725eb792ee 100644
--- a/src/osd/modules/render/bgfx/statereader.h
+++ b/src/osd/modules/render/bgfx/statereader.h
@@ -9,8 +9,8 @@
#pragma once
-#ifndef __DRAWBGFX_STATE_READER__
-#define __DRAWBGFX_STATE_READER__
+#ifndef DRAWBGFX_STATE_READER
+#define DRAWBGFX_STATE_READER
#include <rapidjson/document.h>
@@ -63,4 +63,4 @@ private:
static void get_vec_values(const Value& value_array, float* data, const unsigned int count);
};
-#endif // __DRAWBGFX_STATE_READER__
+#endif // DRAWBGFX_STATE_READER
diff --git a/src/osd/modules/render/bgfx/writereader.h b/src/osd/modules/render/bgfx/writereader.h
index 7dcd1ac16c9..9f60efd846a 100644
--- a/src/osd/modules/render/bgfx/writereader.h
+++ b/src/osd/modules/render/bgfx/writereader.h
@@ -2,14 +2,14 @@
// copyright-holders:Ryan Holtz
//============================================================
//
-// cullreader.h - BGFX alpha/color write state JSON reader
+// writereader.h - BGFX alpha/color write state JSON reader
//
//============================================================
#pragma once
-#ifndef __DRAWBGFX_WRITE_READER__
-#define __DRAWBGFX_WRITE_READER__
+#ifndef DRAWBGFX_WRITE_READER
+#define DRAWBGFX_WRITE_READER
#include "statereader.h"
@@ -18,4 +18,4 @@ public:
static uint64_t read_from_value(const Value& value);
};
-#endif // __DRAWBGFX_WRITE_READER__
+#endif // DRAWBGFX_WRITE_READER
diff --git a/src/osd/modules/render/bgfxutil.cpp b/src/osd/modules/render/bgfxutil.cpp
index b82b0742ebb..1ce3c244ba4 100644
--- a/src/osd/modules/render/bgfxutil.cpp
+++ b/src/osd/modules/render/bgfxutil.cpp
@@ -78,7 +78,7 @@ uint64_t bgfx_util::get_blend_state(uint32_t blend)
case BLENDMODE_ALPHA:
return BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_SRC_ALPHA, BGFX_STATE_BLEND_INV_SRC_ALPHA);
case BLENDMODE_RGB_MULTIPLY:
- return BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_DST_COLOR, BGFX_STATE_BLEND_ZERO);
+ return BGFX_STATE_BLEND_FUNC_SEPARATE(BGFX_STATE_BLEND_DST_COLOR, BGFX_STATE_BLEND_ZERO, BGFX_STATE_BLEND_DST_ALPHA, BGFX_STATE_BLEND_ZERO);
case BLENDMODE_ADD:
return BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_SRC_ALPHA, BGFX_STATE_BLEND_ONE);
default: