parity: 100 HDR scene target constants (R16G16B16A16_SFLOAT, sampled)

This commit is contained in:
hermes-agent committed 2026-10-30 23:49:17 -09:00
1 parent cb6a74483a
commit 58380e1e06
3 files changed
+35 -4

No files matched your search

@@ -87,6 +87,19 @@ inline constexpr std::uint32_t kForwardTilePx = 16;
inline constexpr std::uint64_t kVisibilityBytesPerPx = 8;
// HDR shade target: RGBA16F = 8B/px... recorded as R32G32B32A32F-safe 16B.
inline constexpr std::uint64_t kHdrBytesPerPx = 16;
#if defined(ENGINE_RENDERER_HAS_VULKAN)
// P4-02 HDR scene target: the shade pass renders linear-HDR radiance here
// (VK_FORMAT_R16G16B16A16_SFLOAT, sampled by the post pass). The swapchain
// image stays an LDR present target — the post pass (ACES + sRGB) is the
// only writer to it.
inline constexpr VkFormat kHdrSceneFormat =
VK_FORMAT_R16G16B16A16_SFLOAT;
// P4-02 HDR image usage: COLOR_ATTACHMENT (shade-pass render target) +
// SAMPLED (post-pass shader input, SHADER_READ_ONLY_OPTIMAL after the
// shade->post barrier).
inline constexpr VkImageUsageFlags kHdrSceneUsage =
VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_SAMPLED_BIT;
#endif
// Framebuffer-indexed pass ids (execution order in the default M3-03 graph:
// vis -> shade -> post; custom passes slot between shade and post).
@@ -58,7 +58,13 @@ using VkImageLayout = std::uint32_t;
using VkAccessFlags2 = std::uint64_t;
using VkPipelineStageFlags2 = std::uint64_t;
inline constexpr VkFormat VK_FORMAT_UNDEFINED = 0;
inline constexpr VkFormat VK_FORMAT_R8G8B8A8_UNORM = 37;
inline constexpr VkFormat VK_FORMAT_B8G8R8A8_UNORM = 44;
inline constexpr VkFormat VK_FORMAT_R8G8B8A8_SRGB = 43;
// P4-02: HDR scene target (shade pass output, post pass input):
// R16G16B16A16_SFLOAT, Vulkan numeric value 91 (Unspecified extension,
// core since 1.0 — matches <vulkan/vulkan.h> on SDK builds).
inline constexpr VkFormat VK_FORMAT_R16G16B16A16_SFLOAT = 91;
inline constexpr VkFormat VK_FORMAT_D32_SFLOAT = 126;
inline constexpr VkImageLayout VK_IMAGE_LAYOUT_UNDEFINED = 0;
inline constexpr VkImageLayout VK_IMAGE_LAYOUT_GENERAL = 1;
+16 -4
View File
@@ -190,7 +190,7 @@ auto test_gpu() -> int {
pipes_ok = engine::test::GoldenBuildShadePost(
&g, bt.set_layout(), kPbr_shade_vertSpv, kPbr_shade_vertSpvWords,
kPbr_shade_fragSpv, kPbr_shade_fragSpvWords,
VK_FORMAT_R16G16B16A16_SFLOAT, kPost_vertSpv, kPost_vertSpvWords,
engine::renderer::kHdrSceneFormat, kPost_vertSpv, kPost_vertSpvWords,
kPost_fragSpv, kPost_fragSpvWords, VK_FORMAT_R8G8B8A8_UNORM,
create_set_layout, create_pipe_layout, create_pipes, destroy_mod, &sp);
}
@@ -356,15 +356,27 @@ auto test_gpu() -> int {
&g, VK_FORMAT_R32G32_UINT, kW, kH,
VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_STORAGE_BIT,
&vis_img) &&
// P4-02 HDR scene target: float format, color-attachment write in
// the shade pass + sampled input to the post pass (the only
// consumer of the HDR contents; swapchain stays LDR below).
engine::test::GoldenMakeImage(
&g, VK_FORMAT_R16G16B16A16_SFLOAT, kW, kH,
VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_SAMPLED_BIT,
&hdr_img) &&
&g, engine::renderer::kHdrSceneFormat, kW, kH,
engine::renderer::kHdrSceneUsage, &hdr_img) &&
engine::test::GoldenMakeImage(
&g, VK_FORMAT_R8G8B8A8_UNORM, kW, kH,
VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT,
&ldr_img);
check(imgs_ok, "hdr-golden: images allocated");
// Contract: the engine constant really is the SFLOAT HDR format and
// carries both usage bits the frame record needs.
check(engine::renderer::kHdrSceneFormat ==
VK_FORMAT_R16G16B16A16_SFLOAT,
"hdr-golden: HDR format is R16G16B16A16_SFLOAT");
check((engine::renderer::kHdrSceneUsage &
VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) != 0 &&
(engine::renderer::kHdrSceneUsage &
VK_IMAGE_USAGE_SAMPLED_BIT) != 0,
"hdr-golden: HDR usage is attachment+sampled");
if (!imgs_ok) {
return 1;
}