Skip to content

Commit

Permalink
Added FXAA for xrRender_R2(DX9)
Browse files Browse the repository at this point in the history
Renamed console command r3_fxaa to r2_fxaa
Thanks @qweasdd136963 for shaders fix
  • Loading branch information
Xottab-DUTY committed Jan 19, 2018
1 parent 1bd9349 commit b337b1a
Show file tree
Hide file tree
Showing 16 changed files with 136 additions and 6 deletions.
Binary file added res/gamedata/shaders/r2/fxaa.ps
Binary file not shown.
Binary file added res/gamedata/shaders/r2/fxaa_main.ps
Binary file not shown.
26 changes: 26 additions & 0 deletions res/gamedata/shaders/r2/fxaa_main.vs
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#include "common.h"

uniform float4 screen_res; // Screen resolution (x-Width,y-Height, zw - 1/resolution)

struct v
{
float3 P : POSITION;
float2 tc0 : TEXCOORD0;
};

struct v2p
{
float2 tc0 : TEXCOORD0;
float4 HPos : POSITION;
};

//////////////////////////////////////////////////////////////////////////////////////////
// Vertex
v2p main ( v I )
{
v2p O;
O.HPos = float4 (I.P.x * screen_res.z * 2 - 1, (I.P.y * screen_res.w * 2 - 1)* -1, 0, 1);
O.tc0 = I.tc0;

return O;
}
4 changes: 2 additions & 2 deletions src/Layers/xrRender/xrRender_console.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ xr_token qmsaa__atest_token[] = {
u32 ps_r3_minmax_sm = 3; // = 0;
xr_token qminmax_sm_token[] = {{"off", 0}, {"on", 1}, {"auto", 2}, {"autodetect", 3}, {nullptr, 0}};

int ps_r3_fxaa = 0;
int ps_r2_fxaa = 0;

// “Off”
// “DX10.0 style [Standard]”
Expand Down Expand Up @@ -877,7 +877,7 @@ void xrRender_initconsole()
#ifdef DETAIL_RADIUS
CMD4(CCC_detail_radius, "r__detail_radius", &ps_r__detail_radius, 49, 300);
#endif
CMD4(CCC_Integer, "r3_fxaa", &ps_r3_fxaa, 0, 1);
CMD4(CCC_Integer, "r2_fxaa", &ps_r2_fxaa, 0, 1);

// Allow real-time fog config reload
#if (RENDER == R_R3) || (RENDER == R_R4)
Expand Down
2 changes: 1 addition & 1 deletion src/Layers/xrRender/xrRender_console.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ extern ECORE_API xr_token qmsaa__atest_token[];
extern ECORE_API u32 ps_r3_minmax_sm; // = 0;
extern ECORE_API xr_token qminmax_sm_token[];

extern ECORE_API int ps_r3_fxaa;
extern ECORE_API int ps_r2_fxaa;

extern ENGINE_API int ps_r__Supersample;
extern ECORE_API int ps_r__LightSleepFrames;
Expand Down
21 changes: 21 additions & 0 deletions src/Layers/xrRenderPC_R2/blender_fxaa.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#include "stdafx.h"
#pragma hdrstop

#include "blender_fxaa.h"

CBlender_FXAA::CBlender_FXAA() { description.CLS = 0; }
CBlender_FXAA::~CBlender_FXAA() { }

void CBlender_FXAA::Compile(CBlender_Compile& C)
{
IBlender::Compile(C);

switch (C.iElement)
{
case 0:
C.r_Pass("fxaa_main", "fxaa_main", false, FALSE, FALSE);
C.r_Sampler("s_base0", r2_RT_generic0);
C.r_End();
break;
}
}
14 changes: 14 additions & 0 deletions src/Layers/xrRenderPC_R2/blender_fxaa.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#pragma once

class CBlender_FXAA : public IBlender
{
public:
LPCSTR getComment() override { return "FXAA"; }
BOOL canBeDetailed() override { return FALSE; }
BOOL canBeLMAPped() override { return FALSE; }

void Compile(CBlender_Compile& C) override;

CBlender_FXAA();
virtual ~CBlender_FXAA();
};
9 changes: 9 additions & 0 deletions src/Layers/xrRenderPC_R2/r2_rendertarget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#include "blender_bloom_build.h"
#include "blender_luminance.h"
#include "blender_ssao.h"
#include "blender_fxaa.h"

void CRenderTarget::u_setrt(const ref_rt& _1, const ref_rt& _2, const ref_rt& _3, IDirect3DSurface9* zb)
{
Expand Down Expand Up @@ -219,6 +220,9 @@ CRenderTarget::CRenderTarget()
b_luminance = new CBlender_luminance();
b_combine = new CBlender_combine();

//FXAA
b_fxaa = new CBlender_FXAA();

// NORMAL
{
u32 w = Device.dwWidth, h = Device.dwHeight;
Expand Down Expand Up @@ -370,6 +374,10 @@ CRenderTarget::CRenderTarget()
s_ssao.create(b_ssao, "r2\\ssao");
}

//FXAA
s_fxaa.create(b_fxaa, "r3\\fxaa");
g_fxaa.create(FVF::F_V, RCache.Vertex.Buffer(), RCache.QuadIB);

// SSAO
if (RImplementation.o.ssao_blur_on)
{
Expand Down Expand Up @@ -660,6 +668,7 @@ CRenderTarget::~CRenderTarget()
xr_delete(b_luminance);
xr_delete(b_bloom);
xr_delete(b_ssao);
xr_delete(b_fxaa); //FXAA
xr_delete(b_accum_reflected);
xr_delete(b_accum_spot);
xr_delete(b_accum_point);
Expand Down
7 changes: 7 additions & 0 deletions src/Layers/xrRenderPC_R2/r2_rendertarget.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,10 @@ class CRenderTarget : public IRender_Target
IBlender* b_accum_reflected;
IBlender* b_bloom;
IBlender* b_ssao;
IBlender* b_fxaa;
IBlender* b_luminance;
IBlender* b_combine;

#ifdef DEBUG
struct dbg_line_t
{
Expand Down Expand Up @@ -120,6 +122,10 @@ class CRenderTarget : public IRender_Target
ref_rt rt_ssao_temp;
ref_rt rt_half_depth;

//FXAA
ref_shader s_fxaa;
ref_geom g_fxaa;

// Bloom
ref_geom g_bloom_build;
ref_geom g_bloom_filter;
Expand Down Expand Up @@ -203,6 +209,7 @@ class CRenderTarget : public IRender_Target
void u_DBT_disable();

void phase_ssao();
void phase_fxaa();
void phase_downsamp();
void phase_scene_prepare();
void phase_scene_begin();
Expand Down
30 changes: 30 additions & 0 deletions src/Layers/xrRenderPC_R2/r2_rendertarget_phase_FXAA.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#include "stdafx.h"
#include "r2_rendertarget.h"

void CRenderTarget::phase_fxaa()
{
u32 Offset = 0;
const float _w = float(Device.dwWidth);
const float _h = float(Device.dwHeight);
const float du = ps_r1_pps_u, dv = ps_r1_pps_v;

u_setrt(rt_Generic_0, nullptr, nullptr, HW.pBaseZB);
RCache.set_CullMode(CULL_NONE);
RCache.set_Stencil(FALSE);

FVF::V* pv = (FVF::V*)RCache.Vertex.Lock(4, g_fxaa->vb_stride, Offset);
pv->set(du - 0.5, dv + float(_h) - 0.5, 0, 0, 1);
pv++;
pv->set(du - 0.5, dv - 0.5, 0, 0, 0);
pv++;
pv->set(du + float(_w) - 0.5, dv + float(_h) - 0.5, 0, 1, 1);
pv++;
pv->set(du + float(_w) - 0.5, dv - 0.5, 0, 1, 0);
pv++;
RCache.Vertex.Unlock(4, g_fxaa->vb_stride);


RCache.set_Element(s_fxaa->E[0]);
RCache.set_Geometry(g_fxaa);
RCache.Render(D3DPT_TRIANGLELIST, Offset, 0, 4, 0, 2);
}
12 changes: 11 additions & 1 deletion src/Layers/xrRenderPC_R2/r2_rendertarget_phase_combine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -238,6 +238,14 @@ void CRenderTarget::phase_combine()
}
}

//FXAA
if (ps_r2_fxaa)
{
PIX_EVENT(FXAA);
phase_fxaa();
RCache.set_Stencil(FALSE);
}

// PP enabled ?
// Render to RT texture to be able to copy RT even in windowed mode.
BOOL PP_Complex = u_need_PP() | (BOOL)RImplementation.m_bMakeAsyncSS;
Expand Down Expand Up @@ -342,7 +350,9 @@ void CRenderTarget::phase_combine()
RCache.set_Stencil(FALSE);

// if FP16-BLEND !not! supported - draw flares here, overwise they are already in the bloom target
/* if (!RImplementation.o.fp16_blend)*/ g_pGamePersistent->Environment().RenderFlares(); // lens-flares
/* if (!RImplementation.o.fp16_blend)*/
PIX_EVENT(LENS_FLARES);
g_pGamePersistent->Environment().RenderFlares(); // lens-flares

// Igor: screenshot will not have postprocess applied.
// TODO: fox that later
Expand Down
1 change: 1 addition & 0 deletions src/Layers/xrRenderPC_R2/stdafx.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#include <d3dx9.h>

#include "Layers/xrRender/xrD3DDefs.h"
#include "Layers/xrRender/Debug/dxPixEventWrapper.h"
#include "Layers/xrRender/HW.h"
#include "Layers/xrRender/Shader.h"
#include "Layers/xrRender/R_Backend.h"
Expand Down
3 changes: 3 additions & 0 deletions src/Layers/xrRenderPC_R2/xrRender_R2.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -292,6 +292,7 @@
<ClInclude Include="blender_deffer_aref.h" />
<ClInclude Include="blender_deffer_flat.h" />
<ClInclude Include="blender_deffer_model.h" />
<ClInclude Include="blender_fxaa.h" />
<ClInclude Include="blender_light_direct.h" />
<ClInclude Include="blender_light_direct_cascade.h" />
<ClInclude Include="blender_light_mask.h" />
Expand Down Expand Up @@ -428,6 +429,7 @@
<ClCompile Include="blender_deffer_aref.cpp" />
<ClCompile Include="blender_deffer_flat.cpp" />
<ClCompile Include="blender_deffer_model.cpp" />
<ClCompile Include="blender_fxaa.cpp" />
<ClCompile Include="blender_light_direct.cpp" />
<ClCompile Include="blender_light_direct_cascade.cpp" />
<ClCompile Include="blender_light_mask.cpp" />
Expand Down Expand Up @@ -458,6 +460,7 @@
<ClCompile Include="r2_rendertarget_phase_accumulator.cpp" />
<ClCompile Include="r2_rendertarget_phase_bloom.cpp" />
<ClCompile Include="r2_rendertarget_phase_combine.cpp" />
<ClCompile Include="r2_rendertarget_phase_FXAA.cpp" />
<ClCompile Include="r2_rendertarget_phase_luminance.cpp" />
<ClCompile Include="r2_rendertarget_phase_occq.cpp" />
<ClCompile Include="r2_rendertarget_phase_PP.cpp" />
Expand Down
9 changes: 9 additions & 0 deletions src/Layers/xrRenderPC_R2/xrRender_R2.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -615,6 +615,9 @@
<ClInclude Include="..\xrRender\D3DXRenderBase.h">
<Filter>Core</Filter>
</ClInclude>
<ClInclude Include="blender_fxaa.h">
<Filter>Shading templates</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="stdafx.cpp">
Expand Down Expand Up @@ -1100,6 +1103,12 @@
<ClCompile Include="..\xrRender\dxUISequenceVideoItem.cpp">
<Filter>Interfase implementations\UI\UISequenceVideoItem</Filter>
</ClCompile>
<ClCompile Include="r2_rendertarget_phase_FXAA.cpp">
<Filter>Core_Target</Filter>
</ClCompile>
<ClCompile Include="blender_fxaa.cpp">
<Filter>Shading templates</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<Text Include="todo.txt" />
Expand Down
2 changes: 1 addition & 1 deletion src/Layers/xrRenderPC_R3/r3_rendertarget_phase_combine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -344,7 +344,7 @@ void CRenderTarget::phase_combine()
*/

//FXAA
if (ps_r3_fxaa)
if (ps_r2_fxaa)
{
PIX_EVENT(FXAA);
phase_fxaa();
Expand Down
2 changes: 1 addition & 1 deletion src/Layers/xrRenderPC_R4/r4_rendertarget_phase_combine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -351,7 +351,7 @@ void CRenderTarget::phase_combine()
RCache.set_Stencil(FALSE);

//FXAA
if (ps_r3_fxaa)
if (ps_r2_fxaa)
{
PIX_EVENT(FXAA);
phase_fxaa();
Expand Down

0 comments on commit b337b1a

Please sign in to comment.