Formalize volume shader include context

This commit is contained in:
2026-04-10 01:05:03 +08:00
parent 34a32b73dd
commit 4111f841d4
9 changed files with 1212 additions and 10 deletions

View File

@@ -15,6 +15,20 @@ using namespace VolumeIntegrationTestUtils;
namespace {
constexpr const char* kD3D12Screenshot = "volume_occlusion_scene_d3d12.ppm";
constexpr const char* kOpenGLScreenshot = "volume_occlusion_scene_opengl.ppm";
constexpr const char* kVulkanScreenshot = "volume_occlusion_scene_vulkan.ppm";
const char* GetScreenshotFilename(RHIType backendType) {
switch (backendType) {
case RHIType::OpenGL:
return kOpenGLScreenshot;
case RHIType::Vulkan:
return kVulkanScreenshot;
case RHIType::D3D12:
default:
return kD3D12Screenshot;
}
}
class VolumeOcclusionSceneTest : public VolumeIntegrationSceneFixture {
protected:
@@ -96,10 +110,11 @@ private:
};
TEST_P(VolumeOcclusionSceneTest, RenderNanoVdbVolumeOcclusionScene) {
RenderAndCompare(kD3D12Screenshot, 0.0f);
const char* screenshotFilename = GetScreenshotFilename(GetBackendType());
RenderAndCompare(screenshotFilename, 0.0f);
const RenderingIntegrationTestUtils::PpmImage image =
RenderingIntegrationTestUtils::LoadPpmImage(kD3D12Screenshot);
RenderingIntegrationTestUtils::LoadPpmImage(screenshotFilename);
RenderingIntegrationTestUtils::ExpectPixelLuminanceAtMost(
image,
640u,
@@ -117,6 +132,12 @@ TEST_P(VolumeOcclusionSceneTest, RenderNanoVdbVolumeOcclusionScene) {
} // namespace
INSTANTIATE_TEST_SUITE_P(D3D12, VolumeOcclusionSceneTest, ::testing::Values(XCEngine::RHI::RHIType::D3D12));
#if defined(XCENGINE_SUPPORT_OPENGL)
INSTANTIATE_TEST_SUITE_P(OpenGL, VolumeOcclusionSceneTest, ::testing::Values(XCEngine::RHI::RHIType::OpenGL));
#endif
#if defined(XCENGINE_SUPPORT_VULKAN)
INSTANTIATE_TEST_SUITE_P(Vulkan, VolumeOcclusionSceneTest, ::testing::Values(XCEngine::RHI::RHIType::Vulkan));
#endif
GTEST_API_ int main(int argc, char** argv) {
return RunRenderingIntegrationTestMain(argc, argv);

View File

@@ -15,6 +15,20 @@ using namespace VolumeIntegrationTestUtils;
namespace {
constexpr const char* kD3D12Screenshot = "volume_scene_d3d12.ppm";
constexpr const char* kOpenGLScreenshot = "volume_scene_opengl.ppm";
constexpr const char* kVulkanScreenshot = "volume_scene_vulkan.ppm";
const char* GetScreenshotFilename(RHIType backendType) {
switch (backendType) {
case RHIType::OpenGL:
return kOpenGLScreenshot;
case RHIType::Vulkan:
return kVulkanScreenshot;
case RHIType::D3D12:
default:
return kD3D12Screenshot;
}
}
class VolumeSceneTest : public VolumeIntegrationSceneFixture {
protected:
@@ -82,12 +96,18 @@ void VolumeSceneTest::ReleaseSceneResources() {
}
TEST_P(VolumeSceneTest, RenderNanoVdbVolumeScene) {
RenderAndCompare(kD3D12Screenshot, 0.0f);
RenderAndCompare(GetScreenshotFilename(GetBackendType()), 0.0f);
}
} // namespace
INSTANTIATE_TEST_SUITE_P(D3D12, VolumeSceneTest, ::testing::Values(RHIType::D3D12));
#if defined(XCENGINE_SUPPORT_OPENGL)
INSTANTIATE_TEST_SUITE_P(OpenGL, VolumeSceneTest, ::testing::Values(RHIType::OpenGL));
#endif
#if defined(XCENGINE_SUPPORT_VULKAN)
INSTANTIATE_TEST_SUITE_P(Vulkan, VolumeSceneTest, ::testing::Values(RHIType::Vulkan));
#endif
GTEST_API_ int main(int argc, char** argv) {
return RunRenderingIntegrationTestMain(argc, argv);

View File

@@ -17,6 +17,20 @@ using namespace VolumeIntegrationTestUtils;
namespace {
constexpr const char* kD3D12Screenshot = "volume_transform_scene_d3d12.ppm";
constexpr const char* kOpenGLScreenshot = "volume_transform_scene_opengl.ppm";
constexpr const char* kVulkanScreenshot = "volume_transform_scene_vulkan.ppm";
const char* GetScreenshotFilename(RHIType backendType) {
switch (backendType) {
case RHIType::OpenGL:
return kOpenGLScreenshot;
case RHIType::Vulkan:
return kVulkanScreenshot;
case RHIType::D3D12:
default:
return kD3D12Screenshot;
}
}
class VolumeTransformSceneTest : public VolumeIntegrationSceneFixture {
protected:
@@ -122,10 +136,11 @@ private:
};
TEST_P(VolumeTransformSceneTest, RenderNanoVdbVolumeTransformScene) {
RenderAndCompare(kD3D12Screenshot, 0.0f);
const char* screenshotFilename = GetScreenshotFilename(GetBackendType());
RenderAndCompare(screenshotFilename, 0.0f);
const RenderingIntegrationTestUtils::PpmImage image =
RenderingIntegrationTestUtils::LoadPpmImage(kD3D12Screenshot);
RenderingIntegrationTestUtils::LoadPpmImage(screenshotFilename);
RenderingIntegrationTestUtils::ExpectPixelLuminanceAtLeast(
image,
840u,
@@ -137,6 +152,12 @@ TEST_P(VolumeTransformSceneTest, RenderNanoVdbVolumeTransformScene) {
} // namespace
INSTANTIATE_TEST_SUITE_P(D3D12, VolumeTransformSceneTest, ::testing::Values(XCEngine::RHI::RHIType::D3D12));
#if defined(XCENGINE_SUPPORT_OPENGL)
INSTANTIATE_TEST_SUITE_P(OpenGL, VolumeTransformSceneTest, ::testing::Values(XCEngine::RHI::RHIType::OpenGL));
#endif
#if defined(XCENGINE_SUPPORT_VULKAN)
INSTANTIATE_TEST_SUITE_P(Vulkan, VolumeTransformSceneTest, ::testing::Values(XCEngine::RHI::RHIType::Vulkan));
#endif
GTEST_API_ int main(int argc, char** argv) {
return RunRenderingIntegrationTestMain(argc, argv);