test with srgba buffer, hack in srgb -> linear conversion in shader for

testing
This commit is contained in:
Ryan Fleury
2025-02-17 18:02:47 -08:00
parent 21a41e9105
commit 2b54f48aab
4 changed files with 48 additions and 13 deletions
@@ -191,6 +191,7 @@ fp_init(void)
//- rjf: make sharp-hinted rendering params //- rjf: make sharp-hinted rendering params
{ {
FLOAT gamma = IDWriteRenderingParams_GetGamma(fp_dwrite_state->base_rendering_params); FLOAT gamma = IDWriteRenderingParams_GetGamma(fp_dwrite_state->base_rendering_params);
gamma = 1.f;
FLOAT enhanced_contrast = IDWriteRenderingParams_GetEnhancedContrast(fp_dwrite_state->base_rendering_params); FLOAT enhanced_contrast = IDWriteRenderingParams_GetEnhancedContrast(fp_dwrite_state->base_rendering_params);
if(fp_dwrite_state->dwrite2_is_supported) if(fp_dwrite_state->dwrite2_is_supported)
{ {
@@ -219,6 +220,7 @@ fp_init(void)
//- rjf: make sharp-unhinted rendering params //- rjf: make sharp-unhinted rendering params
{ {
FLOAT gamma = IDWriteRenderingParams_GetGamma(fp_dwrite_state->base_rendering_params); FLOAT gamma = IDWriteRenderingParams_GetGamma(fp_dwrite_state->base_rendering_params);
gamma = 1.f;
FLOAT enhanced_contrast = IDWriteRenderingParams_GetEnhancedContrast(fp_dwrite_state->base_rendering_params); FLOAT enhanced_contrast = IDWriteRenderingParams_GetEnhancedContrast(fp_dwrite_state->base_rendering_params);
if(fp_dwrite_state->dwrite2_is_supported) if(fp_dwrite_state->dwrite2_is_supported)
{ {
@@ -247,6 +249,7 @@ fp_init(void)
//- rjf: make smooth-hinted rendering params //- rjf: make smooth-hinted rendering params
{ {
FLOAT gamma = IDWriteRenderingParams_GetGamma(fp_dwrite_state->base_rendering_params); FLOAT gamma = IDWriteRenderingParams_GetGamma(fp_dwrite_state->base_rendering_params);
gamma = 1.f;
FLOAT enhanced_contrast = IDWriteRenderingParams_GetEnhancedContrast(fp_dwrite_state->base_rendering_params); FLOAT enhanced_contrast = IDWriteRenderingParams_GetEnhancedContrast(fp_dwrite_state->base_rendering_params);
if(fp_dwrite_state->dwrite2_is_supported) if(fp_dwrite_state->dwrite2_is_supported)
{ {
+21 -5
View File
@@ -83,6 +83,20 @@ str8_lit_comp(
" return length(max(abs(sample_pos) - rect_half_size + r, 0.0)) - r;\n" " return length(max(abs(sample_pos) - rect_half_size + r, 0.0)) - r;\n"
"}\n" "}\n"
"\n" "\n"
"float linear_from_srgb_f32(float x)\n"
"{\n"
" return x < 0.0404482362771082 ? x / 12.92 : pow((x + 0.055) / 1.055, 2.4);\n"
"}\n"
"\n"
"float4 linear_from_srgba(float4 v)\n"
"{\n"
" float4 result = float4(linear_from_srgb_f32(v.x),\n"
" linear_from_srgb_f32(v.y),\n"
" linear_from_srgb_f32(v.z),\n"
" v.w);\n"
" return result;\n"
"}\n"
"\n"
"//- rjf: vertex shader\n" "//- rjf: vertex shader\n"
"\n" "\n"
"Vertex2Pixel\n" "Vertex2Pixel\n"
@@ -122,11 +136,12 @@ str8_lit_comp(
" cpu2vertex.corner_radii_px.w,\n" " cpu2vertex.corner_radii_px.w,\n"
" cpu2vertex.corner_radii_px.z,\n" " cpu2vertex.corner_radii_px.z,\n"
" };\n" " };\n"
" float4 src_color[] = {\n" " float4 src_color[] =\n"
" cpu2vertex.color01,\n" " {\n"
" cpu2vertex.color00,\n" " linear_from_srgba(cpu2vertex.color01),\n"
" cpu2vertex.color11,\n" " linear_from_srgba(cpu2vertex.color00),\n"
" cpu2vertex.color10,\n" " linear_from_srgba(cpu2vertex.color11),\n"
" linear_from_srgba(cpu2vertex.color10),\n"
" };\n" " };\n"
" float2 dst_verts_pct = float2((cpu2vertex.vertex_id >> 1) ? 1.f : 0.f,\n" " float2 dst_verts_pct = float2((cpu2vertex.vertex_id >> 1) ? 1.f : 0.f,\n"
" (cpu2vertex.vertex_id & 1) ? 0.f : 1.f);\n" " (cpu2vertex.vertex_id & 1) ? 0.f : 1.f);\n"
@@ -164,6 +179,7 @@ str8_lit_comp(
" if(vertex2pixel.omit_texture < 1)\n" " if(vertex2pixel.omit_texture < 1)\n"
" {\n" " {\n"
" albedo_sample = mul(main_t2d.Sample(main_sampler, vertex2pixel.texcoord_pct), texture_sample_channel_map);\n" " albedo_sample = mul(main_t2d.Sample(main_sampler, vertex2pixel.texcoord_pct), texture_sample_channel_map);\n"
" albedo_sample = linear_from_srgba(albedo_sample);\n"
" }\n" " }\n"
" \n" " \n"
" // rjf: determine SDF sample position\n" " // rjf: determine SDF sample position\n"
+3 -3
View File
@@ -520,7 +520,7 @@ r_window_equip(OS_Handle handle)
{ {
swapchain_desc.Width = 0; // NOTE(rjf): use window width swapchain_desc.Width = 0; // NOTE(rjf): use window width
swapchain_desc.Height = 0; // NOTE(rjf): use window height swapchain_desc.Height = 0; // NOTE(rjf): use window height
swapchain_desc.Format = DXGI_FORMAT_B8G8R8A8_UNORM; swapchain_desc.Format = DXGI_FORMAT_B8G8R8A8_UNORM_SRGB;
swapchain_desc.Stereo = FALSE; swapchain_desc.Stereo = FALSE;
swapchain_desc.SampleDesc.Count = 1; swapchain_desc.SampleDesc.Count = 1;
swapchain_desc.SampleDesc.Quality = 0; swapchain_desc.SampleDesc.Quality = 0;
@@ -896,7 +896,7 @@ r_window_begin_frame(OS_Handle window, R_Handle window_equip)
D3D11_TEXTURE2D_DESC color_desc = zero_struct; D3D11_TEXTURE2D_DESC color_desc = zero_struct;
{ {
wnd->framebuffer->lpVtbl->GetDesc(wnd->framebuffer, &color_desc); wnd->framebuffer->lpVtbl->GetDesc(wnd->framebuffer, &color_desc);
color_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; color_desc.Format = DXGI_FORMAT_R16G16B16A16_FLOAT;
color_desc.BindFlags = D3D11_BIND_RENDER_TARGET|D3D11_BIND_SHADER_RESOURCE; color_desc.BindFlags = D3D11_BIND_RENDER_TARGET|D3D11_BIND_SHADER_RESOURCE;
} }
D3D11_RENDER_TARGET_VIEW_DESC rtv_desc = zero_struct; D3D11_RENDER_TARGET_VIEW_DESC rtv_desc = zero_struct;
@@ -906,7 +906,7 @@ r_window_begin_frame(OS_Handle window, R_Handle window_equip)
} }
D3D11_SHADER_RESOURCE_VIEW_DESC srv_desc = zero_struct; D3D11_SHADER_RESOURCE_VIEW_DESC srv_desc = zero_struct;
{ {
srv_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; srv_desc.Format = DXGI_FORMAT_R16G16B16A16_FLOAT;
srv_desc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D; srv_desc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D;
srv_desc.Texture2D.MipLevels = -1; srv_desc.Texture2D.MipLevels = -1;
} }
+21 -5
View File
@@ -81,6 +81,20 @@ float rect_sdf(float2 sample_pos, float2 rect_half_size, float r)
return length(max(abs(sample_pos) - rect_half_size + r, 0.0)) - r; return length(max(abs(sample_pos) - rect_half_size + r, 0.0)) - r;
} }
float linear_from_srgb_f32(float x)
{
return x < 0.0404482362771082 ? x / 12.92 : pow((x + 0.055) / 1.055, 2.4);
}
float4 linear_from_srgba(float4 v)
{
float4 result = float4(linear_from_srgb_f32(v.x),
linear_from_srgb_f32(v.y),
linear_from_srgb_f32(v.z),
v.w);
return result;
}
//- rjf: vertex shader //- rjf: vertex shader
Vertex2Pixel Vertex2Pixel
@@ -120,11 +134,12 @@ vs_main(CPU2Vertex cpu2vertex)
cpu2vertex.corner_radii_px.w, cpu2vertex.corner_radii_px.w,
cpu2vertex.corner_radii_px.z, cpu2vertex.corner_radii_px.z,
}; };
float4 src_color[] = { float4 src_color[] =
cpu2vertex.color01, {
cpu2vertex.color00, linear_from_srgba(cpu2vertex.color01),
cpu2vertex.color11, linear_from_srgba(cpu2vertex.color00),
cpu2vertex.color10, linear_from_srgba(cpu2vertex.color11),
linear_from_srgba(cpu2vertex.color10),
}; };
float2 dst_verts_pct = float2((cpu2vertex.vertex_id >> 1) ? 1.f : 0.f, float2 dst_verts_pct = float2((cpu2vertex.vertex_id >> 1) ? 1.f : 0.f,
(cpu2vertex.vertex_id & 1) ? 0.f : 1.f); (cpu2vertex.vertex_id & 1) ? 0.f : 1.f);
@@ -162,6 +177,7 @@ ps_main(Vertex2Pixel vertex2pixel) : SV_TARGET
if(vertex2pixel.omit_texture < 1) if(vertex2pixel.omit_texture < 1)
{ {
albedo_sample = mul(main_t2d.Sample(main_sampler, vertex2pixel.texcoord_pct), texture_sample_channel_map); albedo_sample = mul(main_t2d.Sample(main_sampler, vertex2pixel.texcoord_pct), texture_sample_channel_map);
albedo_sample = linear_from_srgba(albedo_sample);
} }
// rjf: determine SDF sample position // rjf: determine SDF sample position