diff --git a/plugins/GSdx/Renderers/DX11/GSDevice11.h b/plugins/GSdx/Renderers/DX11/GSDevice11.h index b59daec06f..607ac62ea6 100644 --- a/plugins/GSdx/Renderers/DX11/GSDevice11.h +++ b/plugins/GSdx/Renderers/DX11/GSDevice11.h @@ -102,6 +102,7 @@ public: GSVector4i FbMask; GSVector4 TC_OffsetHack; + GSVector4 Af; PSConstantBuffer() { @@ -113,6 +114,7 @@ public: MskFix = GSVector4i::zero(); ChannelShuffle = GSVector4i::zero(); FbMask = GSVector4i::zero(); + Af = GSVector4::zero(); } __forceinline bool Update(const PSConstantBuffer* cb) @@ -120,7 +122,8 @@ public: GSVector4i* a = (GSVector4i*)this; GSVector4i* b = (GSVector4i*)cb; - if(!((a[0] == b[0]) /*& (a[1] == b1)*/ & (a[2] == b[2]) & (a[3] == b[3]) & (a[4] == b[4]) & (a[5] == b[5]) & (a[6] == b[6]) & (a[7] == b[7])).alltrue()) // if WH matches HalfTexel does too + if(!((a[0] == b[0]) /*& (a[1] == b1)*/ & (a[2] == b[2]) & (a[3] == b[3]) & (a[4] == b[4]) & (a[5] == b[5]) & + (a[6] == b[6]) & (a[7] == b[7]) & (a[9] == b[9])).alltrue()) // if WH matches HalfTexel does too { a[0] = b[0]; a[1] = b[1]; @@ -130,6 +133,7 @@ public: a[5] = b[5]; a[6] = b[6]; a[7] = b[7]; + a[9] = b[9]; return true; } @@ -207,7 +211,12 @@ public: uint32 fbmask:1; // Blend and Colclip + uint32 blend_a:2; + uint32 blend_b:2; + uint32 blend_c:2; + uint32 blend_d:2; uint32 clr1:1; + uint32 hdr:1; // Others ways to fetch the texture uint32 channel:3; @@ -220,7 +229,7 @@ public: uint32 point_sampler:1; uint32 invalid_tex0:1; // Lupin the 3rd - uint32 _free:27; + uint32 _free:18; }; uint64 key; @@ -286,6 +295,7 @@ public: uint32 wg:1; uint32 wb:1; uint32 wa:1; + uint32 accu_blend:1; }; struct @@ -298,7 +308,7 @@ public: uint32 key; }; - operator uint32() {return key & 0x1fff;} + operator uint32() {return key & 0x3fff;} OMBlendSelector() : key(0) {} diff --git a/plugins/GSdx/Renderers/DX11/GSTextureFX11.cpp b/plugins/GSdx/Renderers/DX11/GSTextureFX11.cpp index 3eb089ad5f..ca4a9330c5 100644 --- a/plugins/GSdx/Renderers/DX11/GSTextureFX11.cpp +++ b/plugins/GSdx/Renderers/DX11/GSTextureFX11.cpp @@ -207,7 +207,7 @@ void GSDevice11::SetupPS(PSSelector sel, const PSConstantBuffer* cb, PSSamplerSe if(i == m_ps.end()) { - std::string str[26]; + std::string str[31]; str[0] = format("%d", sel.fst); str[1] = format("%d", sel.wms); @@ -235,6 +235,11 @@ void GSDevice11::SetupPS(PSSelector sel, const PSConstantBuffer* cb, PSSamplerSe str[23] = format("%d", sel.fmt >> 2); str[24] = format("%d", sel.invalid_tex0); str[25] = format("%d", m_upscale_multiplier ? m_upscale_multiplier : 1); + str[26] = format("%d", sel.hdr); + str[27] = format("%d", sel.blend_a); + str[28] = format("%d", sel.blend_b); + str[29] = format("%d", sel.blend_c); + str[30] = format("%d", sel.blend_d); D3D_SHADER_MACRO macro[] = { @@ -264,6 +269,11 @@ void GSDevice11::SetupPS(PSSelector sel, const PSConstantBuffer* cb, PSSamplerSe {"PS_PAL_FMT", str[23].c_str() }, {"PS_INVALID_TEX0", str[24].c_str() }, {"PS_SCALE_FACTOR", str[25].c_str() }, + {"PS_HDR", str[26].c_str() }, + {"PS_BLEND_A", str[27].c_str() }, + {"PS_BLEND_B", str[28].c_str() }, + {"PS_BLEND_C", str[29].c_str() }, + {"PS_BLEND_D", str[30].c_str() }, {NULL, NULL}, }; diff --git a/plugins/GSdx/res/tfx.fx b/plugins/GSdx/res/tfx.fx index 5c917f6da8..6ff810851e 100644 --- a/plugins/GSdx/res/tfx.fx +++ b/plugins/GSdx/res/tfx.fx @@ -44,8 +44,15 @@ #define PS_URBAN_CHAOS_HLE 0 #define PS_INVALID_TEX0 0 #define PS_SCALE_FACTOR 1 +#define PS_HDR 0 +#define PS_BLEND_A 0 +#define PS_BLEND_B 0 +#define PS_BLEND_C 0 +#define PS_BLEND_D 0 #endif +#define SW_BLEND (PS_BLEND_A || PS_BLEND_B || PS_BLEND_D) + struct VS_INPUT { float2 st : TEXCOORD0; @@ -106,6 +113,8 @@ cbuffer cb1 int4 ChannelShuffle; uint4 FbMask; float4 TC_OffsetHack; + float Af; + float3 _pad; }; cbuffer cb2