From 210242b6d638784b53aeb5c0c9ffca26d8a11214 Mon Sep 17 00:00:00 2001 From: jacob Date: Thu, 17 Jul 2025 19:57:08 -0500 Subject: [PATCH] store emittance flood texture as r16g16 --- res/sh/flood.hlsl | 13 ++++++------- res/sh/shade.hlsl | 7 +++---- src/gp_dx12.c | 4 ++-- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/res/sh/flood.hlsl b/res/sh/flood.hlsl index d2cd039e..94d5b80b 100644 --- a/res/sh/flood.hlsl +++ b/res/sh/flood.hlsl @@ -19,7 +19,7 @@ ConstantBuffer g_constants : register(b0); Texture2D g_emittance_textures[] : register(t0, space0); -RWTexture2D g_flood_textures[]: register(u0, space1); +RWTexture2D g_flood_textures[]: register(u0, space1); SamplerState g_sampler : register(s0); @@ -44,9 +44,9 @@ SH_ENTRY(ROOTSIG) void cs(struct cs_input input) if (step_len == -1) { /* Seed */ float4 emittance = g_emittance_textures[g_constants.emittance_tex_urid][id]; - uint seed = 0xFFFFFFFF; + uint2 seed = uint2(0xFFFF, 0xFFFF); if (emittance.a > 0) { - seed = (id.x << 16) | id.y; + seed = id; } g_flood_textures[g_constants.write_flood_tex_urid][id] = seed; } else { @@ -62,14 +62,13 @@ SH_ENTRY(ROOTSIG) void cs(struct cs_input input) (int2)id + int2(0 , +step_len), /* bottom center */ (int2)id + int2(+step_len, +step_len) /* bottom right */ }; - uint closest_seed = 0xFFFFFFFF; + uint2 closest_seed = uint2(0xFFFF, 0xFFFF); uint closest_seed_len_sq = 0xFFFFFFFF; for (int i = 0; i < 9; ++i) { int2 coord = read_coords[i]; if (coord.x >= 0 && coord.x < (int)tex_size.x && coord.y >= 0 && coord.y < (int)tex_size.y) { - uint seed = g_flood_textures[g_constants.read_flood_tex_urid][coord]; - int2 seed_coord = int2((seed >> 16) & 0xFFFF, seed & 0xFFFF); - int2 dist_vec = (int2)id - seed_coord; + uint2 seed = g_flood_textures[g_constants.read_flood_tex_urid][coord]; + int2 dist_vec = (int2)id - (int2)seed; uint dist_len_sq = dot(dist_vec, dist_vec); if (dist_len_sq < closest_seed_len_sq) { closest_seed = seed; diff --git a/res/sh/shade.hlsl b/res/sh/shade.hlsl index 91879e24..6ea5c963 100644 --- a/res/sh/shade.hlsl +++ b/res/sh/shade.hlsl @@ -20,7 +20,7 @@ ConstantBuffer g_constants : register(b0); Texture2D g_gbuff_textures[] : register(t0, space0); -Texture2D g_emittance_flood_textures[] : register(t0, space1); +Texture2D g_emittance_flood_textures[] : register(t0, space1); RWTexture2D g_write_textures[]: register(u0, space2); SamplerState g_sampler : register(s0); @@ -44,9 +44,8 @@ SH_ENTRY(ROOTSIG) void cs(struct cs_input input) float4 albedo = g_gbuff_textures[g_constants.albedo_tex_urid][id]; float4 emittance = g_gbuff_textures[g_constants.emittance_tex_urid][id]; - uint emittance_flood_packed = g_emittance_flood_textures[g_constants.emittance_flood_tex_urid][id]; - uint2 emittance_flood = uint2(emittance_flood_packed >> 16, emittance_flood_packed & 0xFFFF); - emittance_flood *= emittance_flood_packed < 0xFFFFFFFF; + uint2 emittance_flood = g_emittance_flood_textures[g_constants.emittance_flood_tex_urid][id]; + emittance_flood *= (emittance_flood.x < 0xFFFF && emittance_flood.y < 0xFFFF); float4 final_color = old_color + albedo + float4(float(emittance_flood.x) / float(g_constants.tex_width), float(emittance_flood.y) / float(g_constants.tex_height), 0, 1); diff --git a/src/gp_dx12.c b/src/gp_dx12.c index fe494ead..2765fc63 100644 --- a/src/gp_dx12.c +++ b/src/gp_dx12.c @@ -2672,8 +2672,8 @@ void gp_run(struct gp_run_params params) /* Alloc buffers */ sig->albedo = gbuff_alloc(DXGI_FORMAT_R8G8B8A8_UNORM, final_target_size, D3D12_RESOURCE_STATE_RENDER_TARGET); sig->emittance = gbuff_alloc(DXGI_FORMAT_R8G8B8A8_UNORM, final_target_size, D3D12_RESOURCE_STATE_RENDER_TARGET); - sig->emittance_flood_a = gbuff_alloc(DXGI_FORMAT_R32_UINT, final_target_size, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); - sig->emittance_flood_b = gbuff_alloc(DXGI_FORMAT_R32_UINT, final_target_size, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); + sig->emittance_flood_a = gbuff_alloc(DXGI_FORMAT_R16G16_UINT, final_target_size, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); + sig->emittance_flood_b = gbuff_alloc(DXGI_FORMAT_R16G16_UINT, final_target_size, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); } struct sprite_scope *sprite_scope = sprite_scope_begin();