Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions build.bat
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ if "%debug%"=="1" set release=0 && echo [debug mode]
if "%release%"=="1" set debug=0 && echo [release mode]
if "%msvc%"=="1" set clang=0 && echo [msvc compile]
if "%clang%"=="1" set msvc=0 && echo [clang compile]
if "%opengl%"=="1" echo [opengl backend]
if "%~1"=="" echo [default mode, assuming `raddbg` build] && set raddbg=1

:: --- Unpack Command Line Build Arguments ------------------------------------
Expand Down Expand Up @@ -85,6 +86,9 @@ popd
:: --- Get Current Git Commit Id ----------------------------------------------
for /f %%i in ('call git describe --always --dirty') do set compile=%compile% -DBUILD_GIT_HASH=\"%%i\"

:: --- Set rendering backend -----------------------------------------------
if "%opengl%"=="1" set compile=%compile% -DR_BACKEND=2 -DBUILD_RENDERING_BACKEND=\"OpenGL\"

:: --- Build & Run Metaprogram ------------------------------------------------
if "%no_meta%"=="1" echo [skipping metagen]
if not "%no_meta%"=="1" (
Expand Down
7 changes: 6 additions & 1 deletion src/base/base_context_cracking.h
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,11 @@
#else
# define BUILD_GIT_HASH_STRING_LITERAL_APPEND ""
#endif
#if defined(BUILD_RENDERING_BACKEND)
# define BUILD_RENDERING_BACKEND_STRING_LITERAL_APPEND " [" BUILD_RENDERING_BACKEND "]"
#else
# define BUILD_RENDERING_BACKEND_STRING_LITERAL_APPEND ""
#endif

#if !defined(BUILD_TITLE)
# define BUILD_TITLE "Untitled"
Expand All @@ -186,7 +191,7 @@
# define BUILD_ISSUES_LINK_STRING_LITERAL "https://github.com/EpicGames/raddebugger/issues"
#endif

#define BUILD_TITLE_STRING_LITERAL BUILD_TITLE " (" BUILD_VERSION_STRING_LITERAL " " BUILD_RELEASE_PHASE_STRING_LITERAL ") - " __DATE__ "" BUILD_GIT_HASH_STRING_LITERAL_APPEND BUILD_MODE_STRING_LITERAL_APPEND
#define BUILD_TITLE_STRING_LITERAL BUILD_TITLE " (" BUILD_VERSION_STRING_LITERAL " " BUILD_RELEASE_PHASE_STRING_LITERAL ") - " __DATE__ "" BUILD_GIT_HASH_STRING_LITERAL_APPEND BUILD_MODE_STRING_LITERAL_APPEND "" BUILD_RENDERING_BACKEND_STRING_LITERAL_APPEND

////////////////////////////////
//~ rjf: Zero All Undefined Options
Expand Down
55 changes: 10 additions & 45 deletions src/render/d3d11/render_d3d11.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1230,64 +1230,29 @@ r_window_submit(OS_Handle window, R_Handle window_equip, R_PassList *passes)
// rjf: set up uniforms
R_D3D11_Uniforms_Blur uniforms = { 0 };
{
F32 weights[ArrayCount(uniforms.kernel)*2] = {0};

F32 blur_size = Min(params->blur_size, ArrayCount(weights));
U64 blur_count = (U64)round_f32(blur_size);

F32 stdev = (blur_size-1.f)/2.f;
F32 one_over_root_2pi_stdev2 = 1/sqrt_f32(2*pi32*stdev*stdev);
F32 euler32 = 2.718281828459045f;

weights[0] = 1.f;
if(stdev > 0.f)
{
for(U64 idx = 0; idx < blur_count; idx += 1)
{
F32 kernel_x = (F32)idx;
weights[idx] = one_over_root_2pi_stdev2*pow_f32(euler32, -kernel_x*kernel_x/(2.f*stdev*stdev));
}
}
if(weights[0] > 1.f)
R_Blur_Kernel kernel = {0};
r_fill_blur_kernel(params->blur_size, &kernel);

// each kernel element is float2(weight, offset)
// weights & offsets are adjusted for bilinear sampling
// zw elements are not used, a bit of waste but it allows for simpler shader code
for(U64 i = 0; i < ArrayCount(uniforms.kernel); i++)
{
MemoryZeroArray(weights);
weights[0] = 1.f;
uniforms.kernel[i] = v4f32(kernel.weights[i].x, kernel.weights[i].y, 0, 0);
}
else
{
// prepare weights & offsets for bilinear lookup
// blur filter wants to calculate w0*pixel[pos] + w1*pixel[pos+1] + ...
// with bilinear filter we can do this calulation by doing only w*sample(pos+t) = w*((1-t)*pixel[pos] + t*pixel[pos+1])
// we can see w0=w*(1-t) and w1=w*t
// thus w=w0+w1 and t=w1/w
for (U64 idx = 1; idx < blur_count; idx += 2)
{
F32 w0 = weights[idx + 0];
F32 w1 = weights[idx + 1];
F32 w = w0 + w1;
F32 t = w1 / w;

// each kernel element is float2(weight, offset)
// weights & offsets are adjusted for bilinear sampling
// zw elements are not used, a bit of waste but it allows for simpler shader code
uniforms.kernel[(idx+1)/2] = v4f32(w, (F32)idx + t, 0, 0);
}
}
uniforms.kernel[0].x = weights[0];

// technically we need just direction be different
// but there are 256 bytes of usable space anyway for each constant buffer chunk

uniforms.passes[Axis2_X].viewport_size = v2f32(resolution.x, resolution.y);
uniforms.passes[Axis2_X].rect = params->rect;
uniforms.passes[Axis2_X].direction = v2f32(1.f / resolution.x, 0);
uniforms.passes[Axis2_X].blur_count = 1 + blur_count / 2; // 2x smaller because of bilinear sampling
uniforms.passes[Axis2_X].blur_count = 1 + kernel.blur_count / 2; // 2x smaller because of bilinear sampling
MemoryCopyArray(uniforms.passes[Axis2_X].corner_radii.v, params->corner_radii);

uniforms.passes[Axis2_Y].viewport_size = v2f32(resolution.x, resolution.y);
uniforms.passes[Axis2_Y].rect = params->rect;
uniforms.passes[Axis2_Y].direction = v2f32(0, 1.f / resolution.y);
uniforms.passes[Axis2_Y].blur_count = 1 + blur_count / 2; // 2x smaller because of bilinear sampling
uniforms.passes[Axis2_Y].blur_count = 1 + kernel.blur_count / 2; // 2x smaller because of bilinear sampling
MemoryCopyArray(uniforms.passes[Axis2_Y].corner_radii.v, params->corner_radii);

D3D11_MAPPED_SUBRESOURCE sub_rsrc = {0};
Expand Down
2 changes: 1 addition & 1 deletion src/render/d3d11/render_d3d11.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ StaticAssert(sizeof(R_D3D11_Uniforms_BlurPass) % 256 == 0, NotAligned); // const
struct R_D3D11_Uniforms_Blur
{
R_D3D11_Uniforms_BlurPass passes[Axis2_COUNT];
Vec4F32 kernel[32];
Vec4F32 kernel[ArrayCount(R_Blur_Kernel::weights)];
};

struct R_D3D11_Uniforms_Mesh
Expand Down
8 changes: 8 additions & 0 deletions src/render/opengl/generated/render_opengl.meta.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)

//- GENERATED CODE

C_LINKAGE_BEGIN
C_LINKAGE_END

Loading