Add renderer backend feature reporting

This commit is contained in:
2026-06-02 17:18:48 +02:00
parent 18617cdbd2
commit 995752da75
11 changed files with 103 additions and 7 deletions

View File

@@ -43,6 +43,7 @@ using pp::renderer::RecordingRenderDevice;
using pp::renderer::RecordingRenderTarget;
using pp::renderer::RecordingShaderProgram;
using pp::renderer::RecordingTexture2D;
using pp::renderer::RenderDeviceFeatures;
using pp::renderer::RenderPassDesc;
using pp::renderer::SamplerAddressMode;
using pp::renderer::sampler_address_mode_name;
@@ -596,6 +597,19 @@ public:
return "fake";
}
[[nodiscard]] RenderDeviceFeatures features() const noexcept override
{
return RenderDeviceFeatures {
.framebuffer_fetch = true,
.explicit_texture_transitions = true,
.texture_copy = true,
.render_target_blit = true,
.frame_capture = true,
.float16_render_targets = true,
.float32_render_targets = true,
};
}
[[nodiscard]] pp::foundation::Result<std::unique_ptr<pp::renderer::ITexture2D>> create_texture(
TextureDesc desc) noexcept override
{
@@ -1552,6 +1566,14 @@ void renderer_interfaces_support_backend_neutral_dispatch(pp::tests::Harness& h)
FakeMesh mesh;
PP_EXPECT(h, device.backend_name() == std::string_view("fake"));
const auto features = device.features();
PP_EXPECT(h, features.framebuffer_fetch);
PP_EXPECT(h, features.explicit_texture_transitions);
PP_EXPECT(h, features.texture_copy);
PP_EXPECT(h, features.render_target_blit);
PP_EXPECT(h, features.frame_capture);
PP_EXPECT(h, features.float16_render_targets);
PP_EXPECT(h, features.float32_render_targets);
PP_EXPECT(h, device.trace()->begin_scope("renderer", "dispatch").ok());
PP_EXPECT(h, device.trace()->marker("renderer", "begin").ok());
PP_EXPECT(h, device.trace()->end_scope().ok());
@@ -1690,7 +1712,15 @@ void render_devices_create_validated_resources(pp::tests::Harness& h)
.debug_name = "factory-mesh",
});
const auto readback = device.create_readback_buffer(8U * 4U * 4U);
const auto features = device.features();
PP_EXPECT(h, !features.framebuffer_fetch);
PP_EXPECT(h, features.explicit_texture_transitions);
PP_EXPECT(h, features.texture_copy);
PP_EXPECT(h, features.render_target_blit);
PP_EXPECT(h, features.frame_capture);
PP_EXPECT(h, !features.float16_render_targets);
PP_EXPECT(h, !features.float32_render_targets);
PP_EXPECT(h, texture.ok());
PP_EXPECT(h, texture.value()->desc().extent.width == 8U);
PP_EXPECT(h, !has_texture_usage(texture.value()->desc().usage, TextureUsage::render_target));