Skip to content

Commit

Permalink
Added FXAA for xrRender_R3(DX10)
Browse files Browse the repository at this point in the history
  • Loading branch information
Xottab-DUTY committed Jan 18, 2018
1 parent 380b85b commit 1bd9349
Show file tree
Hide file tree
Showing 9 changed files with 107 additions and 2 deletions.
22 changes: 22 additions & 0 deletions src/Layers/xrRenderPC_R3/blender_fxaa.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#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_dx10Texture("s_base0", r2_RT_generic0);
C.r_dx10Sampler("smp_rtlinear");
C.r_End();
break;
}
}
14 changes: 14 additions & 0 deletions src/Layers/xrRenderPC_R3/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();
};
12 changes: 11 additions & 1 deletion src/Layers/xrRenderPC_R3/r3_rendertarget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
#include "blender_bloom_build.h"
#include "blender_luminance.h"
#include "blender_ssao.h"
#include "blender_fxaa.h"
#include "dx10MinMaxSMBlender.h"
#include "Layers/xrRenderDX10/msaa/dx10MSAABlender.h"
#include "Layers/xrRenderDX10/DX10 Rain/dx10RainBlender.h"
Expand Down Expand Up @@ -320,6 +321,9 @@ CRenderTarget::CRenderTarget()
b_combine = new CBlender_combine();
b_ssao = new CBlender_SSAO_noMSAA();

//FXAA
b_fxaa = new CBlender_FXAA();

if (RImplementation.o.dx10_msaa)
{
int bound = RImplementation.o.dx10_msaa_samples;
Expand Down Expand Up @@ -403,11 +407,12 @@ CRenderTarget::CRenderTarget()
// generic(LDR) RTs
rt_Generic_0.create(r2_RT_generic0, w, h, D3DFMT_A8R8G8B8, 1);
rt_Generic_1.create(r2_RT_generic1, w, h, D3DFMT_A8R8G8B8, 1);
rt_Generic.create(r2_RT_generic, w, h, D3DFMT_A8R8G8B8, 1);

if (RImplementation.o.dx10_msaa)
{
rt_Generic_0_r.create(r2_RT_generic0_r, w, h, D3DFMT_A8R8G8B8, SampleCount);
rt_Generic_1_r.create(r2_RT_generic1_r, w, h, D3DFMT_A8R8G8B8, SampleCount);
rt_Generic.create(r2_RT_generic, w, h, D3DFMT_A8R8G8B8, 1);
}
// Igor: for volumetric lights
// rt_Generic_2.create (r2_RT_generic2,w,h,D3DFMT_A8R8G8B8 );
Expand Down Expand Up @@ -643,6 +648,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);

if (RImplementation.o.ssao_blur_on)
{
u32 w = Device.dwWidth, h = Device.dwHeight;
Expand Down Expand Up @@ -1040,6 +1049,7 @@ CRenderTarget::~CRenderTarget()
xr_delete(b_accum_point);
xr_delete(b_accum_direct);
xr_delete(b_ssao);
xr_delete(b_fxaa); //FXAA

if (RImplementation.o.dx10_msaa)
{
Expand Down
7 changes: 7 additions & 0 deletions src/Layers/xrRenderPC_R3/r3_rendertarget.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@ class CRenderTarget : public IRender_Target
IBlender* b_accum_reflected_msaa[8];
IBlender* b_ssao;
IBlender* b_ssao_msaa[8];
IBlender* b_fxaa;

#ifdef DEBUG
struct dbg_line_t
{
Expand Down Expand Up @@ -119,6 +121,10 @@ class CRenderTarget : public IRender_Target
ref_shader s_ssao;
ref_shader s_ssao_msaa[8];

//FXAA
ref_shader s_fxaa;
ref_geom g_fxaa;

// Accum
ref_shader s_accum_mask;
ref_shader s_accum_direct;
Expand Down Expand Up @@ -252,6 +258,7 @@ class CRenderTarget : public IRender_Target
void phase_scene_end();
void phase_occq();
void phase_ssao();
void phase_fxaa();
void phase_downsamp();
void phase_wallmarks();
void phase_smap_direct(light* L, u32 sub_phase);
Expand Down
29 changes: 29 additions & 0 deletions src/Layers/xrRenderPC_R3/r3_rendertarget_phase_FXAA.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#include "stdafx.h"
#include "r3_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, nullptr, nullptr, HW.pBaseZB);

FVF::V* pv = (FVF::V*)RCache.Vertex.Lock(4, g_fxaa->vb_stride, Offset);
pv->set(du + 0, dv + float(_h), 0, 0, 1);
pv++;
pv->set(du + 0, dv + 0, 0, 0, 0);
pv++;
pv->set(du + float(_w), dv + float(_h), 0, 1, 1);
pv++;
pv->set(du + float(_w), dv + 0, 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);

HW.pContext->CopyResource(rt_Generic_0->pTexture->surface_get(), rt_Generic->pTexture->surface_get());
}
12 changes: 11 additions & 1 deletion src/Layers/xrRenderPC_R3/r3_rendertarget_phase_combine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -343,6 +343,14 @@ void CRenderTarget::phase_combine()
}
*/

//FXAA
if (ps_r3_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 @@ -472,7 +480,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

// PP-if required
if (PP_Complex)
Expand Down
3 changes: 3 additions & 0 deletions src/Layers/xrRenderPC_R3/xrRender_R3.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -312,6 +312,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_mask.h" />
<ClInclude Include="blender_light_occq.h" />
Expand Down Expand Up @@ -473,6 +474,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_mask.cpp" />
<ClCompile Include="blender_light_occq.cpp" />
Expand All @@ -490,6 +492,7 @@
<ClCompile Include="r2_blenders.cpp" />
<ClCompile Include="r2_R_calculate.cpp" />
<ClCompile Include="r2_R_lights.cpp" />
<ClCompile Include="r3_rendertarget_phase_FXAA.cpp" />
<ClCompile Include="r3_R_sun.cpp" />
<ClCompile Include="r2_sector_detect.cpp" />
<ClCompile Include="r2_test_hw.cpp" />
Expand Down
9 changes: 9 additions & 0 deletions src/Layers/xrRenderPC_R3/xrRender_R3.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -702,6 +702,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 @@ -1277,5 +1280,11 @@
<ClCompile Include="r3_R_sun.cpp">
<Filter>Core</Filter>
</ClCompile>
<ClCompile Include="blender_fxaa.cpp">
<Filter>Shading templates</Filter>
</ClCompile>
<ClCompile Include="r3_rendertarget_phase_FXAA.cpp">
<Filter>Core_Target</Filter>
</ClCompile>
</ItemGroup>
</Project>
1 change: 1 addition & 0 deletions src/Layers/xrRenderPC_R4/r4_rendertarget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -661,6 +661,7 @@ CRenderTarget::CRenderTarget()
s_fxaa.create(b_fxaa, "r3\\fxaa");
g_fxaa.create(FVF::F_V, RCache.Vertex.Buffer(), RCache.QuadIB);

// XXX: Xottab_DUTY: find out why it's available on R3, but commented here
// if (RImplementation.o.ssao_blur_on)
//{
// u32 w = Device.dwWidth, h = Device.dwHeight;
Expand Down

0 comments on commit 1bd9349

Please sign in to comment.