Skip to content

Commit 1bd9349

Browse files
committed
Added FXAA for xrRender_R3(DX10)
1 parent 380b85b commit 1bd9349

9 files changed

+107
-2
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#include "stdafx.h"
2+
#pragma hdrstop
3+
4+
#include "blender_fxaa.h"
5+
6+
CBlender_FXAA::CBlender_FXAA() { description.CLS = 0; }
7+
CBlender_FXAA::~CBlender_FXAA() { }
8+
9+
void CBlender_FXAA::Compile(CBlender_Compile& C)
10+
{
11+
IBlender::Compile(C);
12+
13+
switch (C.iElement)
14+
{
15+
case 0:
16+
C.r_Pass("fxaa_main", "fxaa_main", false, FALSE, FALSE);
17+
C.r_dx10Texture("s_base0", r2_RT_generic0);
18+
C.r_dx10Sampler("smp_rtlinear");
19+
C.r_End();
20+
break;
21+
}
22+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#pragma once
2+
3+
class CBlender_FXAA : public IBlender
4+
{
5+
public:
6+
LPCSTR getComment() override { return "FXAA"; }
7+
BOOL canBeDetailed() override { return FALSE; }
8+
BOOL canBeLMAPped() override { return FALSE; }
9+
10+
void Compile(CBlender_Compile& C) override;
11+
12+
CBlender_FXAA();
13+
virtual ~CBlender_FXAA();
14+
};

src/Layers/xrRenderPC_R3/r3_rendertarget.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include "blender_bloom_build.h"
1111
#include "blender_luminance.h"
1212
#include "blender_ssao.h"
13+
#include "blender_fxaa.h"
1314
#include "dx10MinMaxSMBlender.h"
1415
#include "Layers/xrRenderDX10/msaa/dx10MSAABlender.h"
1516
#include "Layers/xrRenderDX10/DX10 Rain/dx10RainBlender.h"
@@ -320,6 +321,9 @@ CRenderTarget::CRenderTarget()
320321
b_combine = new CBlender_combine();
321322
b_ssao = new CBlender_SSAO_noMSAA();
322323

324+
//FXAA
325+
b_fxaa = new CBlender_FXAA();
326+
323327
if (RImplementation.o.dx10_msaa)
324328
{
325329
int bound = RImplementation.o.dx10_msaa_samples;
@@ -403,11 +407,12 @@ CRenderTarget::CRenderTarget()
403407
// generic(LDR) RTs
404408
rt_Generic_0.create(r2_RT_generic0, w, h, D3DFMT_A8R8G8B8, 1);
405409
rt_Generic_1.create(r2_RT_generic1, w, h, D3DFMT_A8R8G8B8, 1);
410+
rt_Generic.create(r2_RT_generic, w, h, D3DFMT_A8R8G8B8, 1);
411+
406412
if (RImplementation.o.dx10_msaa)
407413
{
408414
rt_Generic_0_r.create(r2_RT_generic0_r, w, h, D3DFMT_A8R8G8B8, SampleCount);
409415
rt_Generic_1_r.create(r2_RT_generic1_r, w, h, D3DFMT_A8R8G8B8, SampleCount);
410-
rt_Generic.create(r2_RT_generic, w, h, D3DFMT_A8R8G8B8, 1);
411416
}
412417
// Igor: for volumetric lights
413418
// rt_Generic_2.create (r2_RT_generic2,w,h,D3DFMT_A8R8G8B8 );
@@ -643,6 +648,10 @@ CRenderTarget::CRenderTarget()
643648
s_ssao.create(b_ssao, "r2\\ssao");
644649
}
645650

651+
//FXAA
652+
s_fxaa.create(b_fxaa, "r3\\fxaa");
653+
g_fxaa.create(FVF::F_V, RCache.Vertex.Buffer(), RCache.QuadIB);
654+
646655
if (RImplementation.o.ssao_blur_on)
647656
{
648657
u32 w = Device.dwWidth, h = Device.dwHeight;
@@ -1040,6 +1049,7 @@ CRenderTarget::~CRenderTarget()
10401049
xr_delete(b_accum_point);
10411050
xr_delete(b_accum_direct);
10421051
xr_delete(b_ssao);
1052+
xr_delete(b_fxaa); //FXAA
10431053

10441054
if (RImplementation.o.dx10_msaa)
10451055
{

src/Layers/xrRenderPC_R3/r3_rendertarget.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ class CRenderTarget : public IRender_Target
4848
IBlender* b_accum_reflected_msaa[8];
4949
IBlender* b_ssao;
5050
IBlender* b_ssao_msaa[8];
51+
IBlender* b_fxaa;
52+
5153
#ifdef DEBUG
5254
struct dbg_line_t
5355
{
@@ -119,6 +121,10 @@ class CRenderTarget : public IRender_Target
119121
ref_shader s_ssao;
120122
ref_shader s_ssao_msaa[8];
121123

124+
//FXAA
125+
ref_shader s_fxaa;
126+
ref_geom g_fxaa;
127+
122128
// Accum
123129
ref_shader s_accum_mask;
124130
ref_shader s_accum_direct;
@@ -252,6 +258,7 @@ class CRenderTarget : public IRender_Target
252258
void phase_scene_end();
253259
void phase_occq();
254260
void phase_ssao();
261+
void phase_fxaa();
255262
void phase_downsamp();
256263
void phase_wallmarks();
257264
void phase_smap_direct(light* L, u32 sub_phase);
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#include "stdafx.h"
2+
#include "r3_rendertarget.h"
3+
4+
void CRenderTarget::phase_fxaa()
5+
{
6+
u32 Offset = 0;
7+
const float _w = float(Device.dwWidth);
8+
const float _h = float(Device.dwHeight);
9+
const float du = ps_r1_pps_u, dv = ps_r1_pps_v;
10+
11+
u_setrt(rt_Generic, nullptr, nullptr, HW.pBaseZB);
12+
13+
FVF::V* pv = (FVF::V*)RCache.Vertex.Lock(4, g_fxaa->vb_stride, Offset);
14+
pv->set(du + 0, dv + float(_h), 0, 0, 1);
15+
pv++;
16+
pv->set(du + 0, dv + 0, 0, 0, 0);
17+
pv++;
18+
pv->set(du + float(_w), dv + float(_h), 0, 1, 1);
19+
pv++;
20+
pv->set(du + float(_w), dv + 0, 0, 1, 0);
21+
pv++;
22+
RCache.Vertex.Unlock(4, g_fxaa->vb_stride);
23+
24+
RCache.set_Element(s_fxaa->E[0]);
25+
RCache.set_Geometry(g_fxaa);
26+
RCache.Render(D3DPT_TRIANGLELIST, Offset, 0, 4, 0, 2);
27+
28+
HW.pContext->CopyResource(rt_Generic_0->pTexture->surface_get(), rt_Generic->pTexture->surface_get());
29+
}

src/Layers/xrRenderPC_R3/r3_rendertarget_phase_combine.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,14 @@ void CRenderTarget::phase_combine()
343343
}
344344
*/
345345

346+
//FXAA
347+
if (ps_r3_fxaa)
348+
{
349+
PIX_EVENT(FXAA);
350+
phase_fxaa();
351+
RCache.set_Stencil(FALSE);
352+
}
353+
346354
// PP enabled ?
347355
// Render to RT texture to be able to copy RT even in windowed mode.
348356
BOOL PP_Complex = u_need_PP() | (BOOL)RImplementation.m_bMakeAsyncSS;
@@ -472,7 +480,9 @@ void CRenderTarget::phase_combine()
472480
RCache.set_Stencil(FALSE);
473481

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

477487
// PP-if required
478488
if (PP_Complex)

src/Layers/xrRenderPC_R3/xrRender_R3.vcxproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,7 @@
312312
<ClInclude Include="blender_deffer_aref.h" />
313313
<ClInclude Include="blender_deffer_flat.h" />
314314
<ClInclude Include="blender_deffer_model.h" />
315+
<ClInclude Include="blender_fxaa.h" />
315316
<ClInclude Include="blender_light_direct.h" />
316317
<ClInclude Include="blender_light_mask.h" />
317318
<ClInclude Include="blender_light_occq.h" />
@@ -473,6 +474,7 @@
473474
<ClCompile Include="blender_deffer_aref.cpp" />
474475
<ClCompile Include="blender_deffer_flat.cpp" />
475476
<ClCompile Include="blender_deffer_model.cpp" />
477+
<ClCompile Include="blender_fxaa.cpp" />
476478
<ClCompile Include="blender_light_direct.cpp" />
477479
<ClCompile Include="blender_light_mask.cpp" />
478480
<ClCompile Include="blender_light_occq.cpp" />
@@ -490,6 +492,7 @@
490492
<ClCompile Include="r2_blenders.cpp" />
491493
<ClCompile Include="r2_R_calculate.cpp" />
492494
<ClCompile Include="r2_R_lights.cpp" />
495+
<ClCompile Include="r3_rendertarget_phase_FXAA.cpp" />
493496
<ClCompile Include="r3_R_sun.cpp" />
494497
<ClCompile Include="r2_sector_detect.cpp" />
495498
<ClCompile Include="r2_test_hw.cpp" />

src/Layers/xrRenderPC_R3/xrRender_R3.vcxproj.filters

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -702,6 +702,9 @@
702702
<ClInclude Include="..\xrRender\D3DXRenderBase.h">
703703
<Filter>Core</Filter>
704704
</ClInclude>
705+
<ClInclude Include="blender_fxaa.h">
706+
<Filter>Shading templates</Filter>
707+
</ClInclude>
705708
</ItemGroup>
706709
<ItemGroup>
707710
<ClCompile Include="stdafx.cpp">
@@ -1277,5 +1280,11 @@
12771280
<ClCompile Include="r3_R_sun.cpp">
12781281
<Filter>Core</Filter>
12791282
</ClCompile>
1283+
<ClCompile Include="blender_fxaa.cpp">
1284+
<Filter>Shading templates</Filter>
1285+
</ClCompile>
1286+
<ClCompile Include="r3_rendertarget_phase_FXAA.cpp">
1287+
<Filter>Core_Target</Filter>
1288+
</ClCompile>
12801289
</ItemGroup>
12811290
</Project>

src/Layers/xrRenderPC_R4/r4_rendertarget.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -661,6 +661,7 @@ CRenderTarget::CRenderTarget()
661661
s_fxaa.create(b_fxaa, "r3\\fxaa");
662662
g_fxaa.create(FVF::F_V, RCache.Vertex.Buffer(), RCache.QuadIB);
663663

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

0 commit comments

Comments
 (0)