Compare commits

...

3 Commits

Author SHA1 Message Date
Matt Hoffman
e715a4cad3 Example moving draw to draw2 in backend tests. 2025-05-19 17:34:36 -05:00
Matt Hoffman
e6751a659e Move all backend tests over to use cyan as the clear color 2025-05-19 16:31:36 -05:00
Matt Hoffman
2e12008273 Add helpers for creating RenderPipelineParams for backend tests
BUGS=[398199600]
2025-05-19 15:17:35 -05:00
42 changed files with 137 additions and 136 deletions

View File

@@ -32,6 +32,7 @@ static constexpr size_t CONFIG_COMMAND_BUFFERS_SIZE = 3 * CONFIG_MIN_COMMAND
using namespace filament;
using namespace filament::backend;
using namespace filament::math;
#ifndef FILAMENT_IOS
#include <imageio/ImageEncoder.h>
@@ -114,16 +115,27 @@ PipelineState BackendTest::getColorWritePipelineState() {
return result;
}
void BackendTest::fullViewport(RenderPassParams& params) {
fullViewport(params.viewport);
filament::backend::Viewport BackendTest::getFullViewport() const {
const NativeView& view = getNativeView();
return Viewport {
.left = 0,
.bottom = 0,
.width = static_cast<uint32_t>(view.width),
.height = static_cast<uint32_t>(view.height)
};
}
void BackendTest::fullViewport(Viewport& viewport) {
const NativeView& view = getNativeView();
viewport.left = 0;
viewport.bottom = 0;
viewport.width = view.width;
viewport.height = view.height;
filament::backend::RenderPassParams BackendTest::getClearColorRenderPass(float4 color) {
RenderPassParams params = {};
params.flags.clear = TargetBufferFlags::COLOR;
params.flags.discardStart = TargetBufferFlags::ALL;
params.flags.discardEnd = TargetBufferFlags::NONE;
params.clearColor = color;
return params;
}
filament::backend::RenderPassParams BackendTest::getNoClearRenderPass() {
return RenderPassParams{};
}
void BackendTest::renderTriangle(
@@ -131,14 +143,9 @@ void BackendTest::renderTriangle(
Handle<filament::backend::HwRenderTarget> renderTarget,
Handle<filament::backend::HwSwapChain> swapChain,
Handle<filament::backend::HwProgram> program) {
RenderPassParams params = {};
fullViewport(params);
params.flags.clear = TargetBufferFlags::COLOR;
params.clearColor = {0.f, 0.f, 1.f, 1.f};
params.flags.discardStart = TargetBufferFlags::ALL;
params.flags.discardEnd = TargetBufferFlags::NONE;
params.viewport.height = 512;
RenderPassParams params = getClearColorRenderPass();
params.viewport.width = 512;
params.viewport.height = 512;
renderTriangle(pipelineLayout, renderTarget, swapChain, program, params);
}

View File

@@ -54,9 +54,12 @@ protected:
static filament::backend::PipelineState getColorWritePipelineState();
// Helper methods to set the viewport to the full extent of the swap chain.
static void fullViewport(filament::backend::RenderPassParams& params);
static void fullViewport(filament::backend::Viewport& viewport);
// Gets the full back buffer's viewport
filament::backend::Viewport getFullViewport() const;
// If color is unset this defaults to using opaque cyan
static filament::backend::RenderPassParams getClearColorRenderPass(
filament::math::float4 color = filament::math::float4(0, 1, 1, 1));
static filament::backend::RenderPassParams getNoClearRenderPass();
void renderTriangle(
filament::backend::PipelineLayout const& pipelineLayout,

View File

@@ -113,4 +113,15 @@ TrianglePrimitive::PrimitiveHandle TrianglePrimitive::getRenderPrimitive() const
return mRenderPrimitive;
}
void TrianglePrimitive::bindWithPipelineState(DriverApi& api, PipelineState state) const {
state.primitiveType = PrimitiveType::TRIANGLES;
state.vertexBufferInfo = getVertexBufferInfo();
api.bindPipeline(state);
api.bindRenderPrimitive(getRenderPrimitive());
}
void TrianglePrimitive::draw(DriverApi& api) const {
api.draw2(0, 3, 1);
}
} // namespae test

View File

@@ -57,6 +57,10 @@ public:
VertexInfoHandle getVertexBufferInfo() const { return mVertexBufferInfo; }
void bindWithPipelineState(filament::backend::DriverApi& api,
filament::backend::PipelineState state) const;
void draw(filament::backend::DriverApi& api) const;
private:
size_t mVertexCount = 3;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@@ -151,3 +151,6 @@ if __name__ == "__main__":
results.show_images(file_prefix)
else:
results.batch_move(args.batch)
print("--------------------------------------------------------")
print("REMEMBER TO RESYNC CMAKE AND UPDATE HASHES IN TEST FILES")
print("--------------------------------------------------------")

View File

@@ -305,11 +305,7 @@ TEST_F(BlitTest, ColorResolve) {
PipelineState state = getColorWritePipelineState();
shader.addProgramToPipelineState(state);
RenderPassParams params = {};
params.flags.clear = TargetBufferFlags::COLOR;
params.flags.discardStart = TargetBufferFlags::ALL;
params.flags.discardEnd = TargetBufferFlags::NONE;
params.clearColor = float4(1, 1, 0, 1);
RenderPassParams params = getClearColorRenderPass();
params.viewport.width = kSrcTexWidth;
params.viewport.height = kSrcTexHeight;
@@ -326,7 +322,8 @@ TEST_F(BlitTest, ColorResolve) {
{
RenderFrame frame(api);
api.beginRenderPass(srcRenderTarget, params);
api.draw(state, triangle.getRenderPrimitive(), 0, 3, 1);
triangle.bindWithPipelineState(api, state);
triangle.draw(api);
api.endRenderPass();
}
@@ -337,7 +334,7 @@ TEST_F(BlitTest, ColorResolve) {
SamplerMagFilter::NEAREST);
EXPECT_IMAGE(dstRenderTarget, getExpectations(),
ScreenshotParams(kDstTexWidth, kDstTexHeight, "ColorResolve", 0xebfac2ef));
ScreenshotParams(kDstTexWidth, kDstTexHeight, "ColorResolve", 531759687));
}
TEST_F(BlitTest, Blit2DTextureArray) {

View File

@@ -79,12 +79,8 @@ TEST_F(BufferUpdatesTest, VertexBufferUpdate) {
PipelineState state = getColorWritePipelineState();
shader.addProgramToPipelineState(state);
RenderPassParams params = {};
fullViewport(params);
params.flags.clear = TargetBufferFlags::COLOR;
params.clearColor = { 0.f, 1.f, 0.f, 1.f };
params.flags.discardStart = TargetBufferFlags::ALL;
params.flags.discardEnd = TargetBufferFlags::NONE;
RenderPassParams params = getClearColorRenderPass();
params.viewport = getFullViewport();
// Create a uniform buffer.
// We use STATIC here, even though the buffer is updated, to force the Metal backend to use
@@ -157,6 +153,9 @@ TEST_F(BufferUpdatesTest, VertexBufferUpdate) {
TEST_F(BufferUpdatesTest, BufferObjectUpdateWithOffset) {
NONFATAL_FAIL_IF(SkipEnvironment(OperatingSystem::APPLE, Backend::VULKAN),
"All values including alpha are written as 0, see b/417254943");
constexpr int kTexWidth = 512;
constexpr int kTexHeight = 512;
auto& api = getDriverApi();
Cleanup cleanup(api);
@@ -164,6 +163,8 @@ TEST_F(BufferUpdatesTest, BufferObjectUpdateWithOffset) {
auto swapChain = cleanup.add(createSwapChain());
api.makeCurrent(swapChain, swapChain);
TrianglePrimitive const triangle(api);
// Create a program.
Shader shader = createShader();
@@ -177,9 +178,9 @@ TEST_F(BufferUpdatesTest, BufferObjectUpdateWithOffset) {
// Create a render target.
auto colorTexture = cleanup.add(api.createTexture(SamplerType::SAMPLER_2D, 1,
TextureFormat::RGBA8, 1, 512, 512, 1, TextureUsage::COLOR_ATTACHMENT));
TextureFormat::RGBA8, 1, kTexWidth, kTexHeight, 1, TextureUsage::COLOR_ATTACHMENT));
auto renderTarget = cleanup.add(api.createRenderTarget(
TargetBufferFlags::COLOR0, 512, 512, 1, 0, {{ colorTexture }}, {}, {}));
TargetBufferFlags::COLOR0, kTexWidth, kTexHeight, 1, 0, {{ colorTexture }}, {}, {}));
// Upload uniforms for the first triangle.
// Upload the uniform, but with an offset to accommodate the padding in the shader's
@@ -190,38 +191,50 @@ TEST_F(BufferUpdatesTest, BufferObjectUpdateWithOffset) {
.offset = { 0.0f, 0.0f, 0.0f, 0.0f }
});
RenderPassParams params = {};
params.flags.clear = TargetBufferFlags::COLOR;
params.clearColor = { 0.f, 0.f, 1.f, 1.f };
params.flags.discardStart = TargetBufferFlags::ALL;
params.flags.discardEnd = TargetBufferFlags::NONE;
params.viewport.height = 512;
params.viewport.width = 512;
renderTriangle({ { shader.getDescriptorSetLayout() } }, renderTarget, swapChain,
shader.getProgram(), params);
{
RenderFrame frame(api);
// Upload uniforms for the second triangle. To test partial buffer updates, we'll only update
// color.b, color.a, scaleMinusOne, offset.x, and offset.y.
const UniformBindingConfig partialBindingConfig = {
.dataSize = sizeof(float) * 8,
.bufferSize = sizeof(SimpleMaterialParams) + 64,
.byteOffset = 64 + offsetof(SimpleMaterialParams, color.b)
};
shader.uploadUniform(api, ubuffer, partialBindingConfig,
std::array<float, 8>{
1.0f, 1.0f, // color.b, color.a
0.0f, 0.0f, 0.0f, 0.0f, // scale
0.5f, 0.5f // offset.x, offset.y
});
RenderPassParams clearParams = getClearColorRenderPass();
clearParams.viewport.height = kTexWidth;
clearParams.viewport.width = kTexHeight;
api.beginRenderPass(renderTarget, clearParams);
params.flags.clear = TargetBufferFlags::NONE;
params.flags.discardStart = TargetBufferFlags::NONE;
renderTriangle({{ shader.getDescriptorSetLayout() }},
renderTarget, swapChain, shader.getProgram(), params);
PipelineState state = getColorWritePipelineState();
shader.addProgramToPipelineState(state);
triangle.bindWithPipelineState(api, state);
triangle.draw(api);
api.endRenderPass();
// Upload uniforms for the second triangle. To test partial buffer updates, we'll only update
// color.b, color.a, scaleMinusOne, offset.x, and offset.y.
const UniformBindingConfig partialBindingConfig = {
.dataSize = sizeof(float) * 8,
.bufferSize = sizeof(SimpleMaterialParams) + 64,
.byteOffset = 64 + offsetof(SimpleMaterialParams, color.b)
};
shader.uploadUniform(api, ubuffer, partialBindingConfig,
std::array<float, 8>{
1.0f, 1.0f, // color.b, color.a
0.0f, 0.0f, 0.0f, 0.0f, // scale
0.5f, 0.5f // offset.x, offset.y
});
RenderPassParams noClearParams = getNoClearRenderPass();
noClearParams.viewport.height = kTexWidth;
noClearParams.viewport.width = kTexHeight;
api.beginRenderPass(renderTarget, noClearParams);
triangle.bindWithPipelineState(api, state);
triangle.draw(api);
api.endRenderPass();
}
EXPECT_IMAGE(renderTarget, getExpectations(),
ScreenshotParams(512, 512, "BufferObjectUpdateWithOffset", 91322442));
ScreenshotParams(kTexWidth, kTexHeight, "BufferObjectUpdateWithOffset", 2320747245));
api.flush();
api.commit(swapChain);

View File

@@ -161,12 +161,11 @@ TEST_F(BackendTest, FeedbackLoops) {
for (int frame = 0; frame < kNumFrames; frame++) {
// Prep for rendering.
RenderPassParams params = {};
params.flags.clear = TargetBufferFlags::NONE;
params.flags.discardEnd = TargetBufferFlags::NONE;
PipelineState state = getColorWritePipelineState();
shader.addProgramToPipelineState(state);
RenderPassParams params = getNoClearRenderPass();
api.makeCurrent(swapChain, swapChain);
api.beginFrame(0, 0, 0);

View File

@@ -215,7 +215,7 @@ TEST_F(LoadImageTest, UpdateImage2D) {
FAIL_IF(Backend::VULKAN, "Multiple test cases crash, see b/417481434");
// All of these test cases should result in the same rendered image, and thus the same hash.
static const uint32_t expectedHash = 3644679986;
static const uint32_t expectedHash = 1875922935;
struct TestCase {
const char* name;
@@ -417,7 +417,7 @@ TEST_F(LoadImageTest, UpdateImageSRGB) {
defaultRenderTarget, swapChain, shader.getProgram());
EXPECT_IMAGE(defaultRenderTarget, getExpectations(),
ScreenshotParams(512, 512, "UpdateImageSRGB", 359858623));
ScreenshotParams(512, 512, "UpdateImageSRGB", 3300305265));
api.commit(swapChain);
api.endFrame(0);
@@ -476,7 +476,7 @@ TEST_F(LoadImageTest, UpdateImageMipLevel) {
defaultRenderTarget, swapChain, shader.getProgram());
EXPECT_IMAGE(defaultRenderTarget, getExpectations(),
ScreenshotParams(512, 512, "UpdateImageMipLevel", 3644679986));
ScreenshotParams(512, 512, "UpdateImageMipLevel", 1875922935));
api.commit(swapChain);
api.endFrame(0);
@@ -550,7 +550,7 @@ TEST_F(LoadImageTest, UpdateImage3D) {
defaultRenderTarget, swapChain, shader.getProgram());
EXPECT_IMAGE(defaultRenderTarget, getExpectations(),
ScreenshotParams(512, 512, "UpdateImage3D", 3644679986));
ScreenshotParams(512, 512, "UpdateImage3D", 1875922935));
}
api.stopCapture();

View File

@@ -104,12 +104,9 @@ TEST_F(BackendTest, MRT) {
PipelineState state = getColorWritePipelineState();
shader.addProgramToPipelineState(state);
RenderPassParams params = {};
fullViewport(params);
params.flags.clear = TargetBufferFlags::COLOR;
params.clearColor = {0.f, 1.f, 0.f, 1.f};
params.flags.discardStart = TargetBufferFlags::ALL;
params.flags.discardEnd = TargetBufferFlags::NONE;
RenderPassParams params = getClearColorRenderPass();
params.viewport = getFullViewport();
api.startCapture(0);

View File

@@ -138,13 +138,12 @@ TEST_F(BackendTest, TextureViewLod) {
TargetBufferFlags::COLOR, 32, 32, 1, 0,
{texture, 2 /* level */, 0 /* layer */}, {}, {}));
{
RenderPassParams params = {};
fullViewport(params);
params.flags.clear = TargetBufferFlags::NONE;
params.flags.discardStart = TargetBufferFlags::NONE;
params.flags.discardEnd = TargetBufferFlags::NONE;
PipelineState state = getColorWritePipelineState();
whiteShader.addProgramToPipelineState(state);
RenderPassParams params = getNoClearRenderPass();
params.viewport = getFullViewport();
api.beginRenderPass(renderTarget, params);
api.draw(state, triangle.getRenderPrimitive(), 0, 3, 1);
api.endRenderPass();
@@ -153,15 +152,12 @@ TEST_F(BackendTest, TextureViewLod) {
backend::Handle<HwRenderTarget> defaultRenderTarget =
cleanup.add(api.createDefaultRenderTarget(0));
RenderPassParams params = {};
fullViewport(params);
params.flags.clear = TargetBufferFlags::COLOR;
params.clearColor = {0.f, 0.f, 0.5f, 1.f};
params.flags.discardStart = TargetBufferFlags::ALL;
params.flags.discardEnd = TargetBufferFlags::NONE;
PipelineState state = getColorWritePipelineState();
texturedShader.addProgramToPipelineState(state);
RenderPassParams params = getClearColorRenderPass();
params.viewport = getFullViewport();
DescriptorSetHandle descriptorSet13 = texturedShader.createDescriptorSet(api);
api.updateDescriptorSetTexture(descriptorSet13, 0, texture13, {
.filterMag = SamplerMagFilter::NEAREST,

View File

@@ -81,12 +81,9 @@ TEST_F(BackendTest, MissingRequiredAttributes) {
PipelineState state = getColorWritePipelineState();
shader.addProgramToPipelineState(state);
RenderPassParams params = {};
fullViewport(params);
params.flags.clear = TargetBufferFlags::COLOR;
params.clearColor = { 0.f, 1.f, 0.f, 1.f };
params.flags.discardStart = TargetBufferFlags::ALL;
params.flags.discardEnd = TargetBufferFlags::NONE;
RenderPassParams params = getClearColorRenderPass();
params.viewport = getFullViewport();
api.startCapture(0);

View File

@@ -130,12 +130,8 @@ TEST_F(BackendTest, PushConstants) {
TrianglePrimitive triangle(api);
RenderPassParams params = {};
params.flags.clear = TargetBufferFlags::COLOR0;
params.viewport = { 0, 0, 512, 512 };
params.clearColor = math::float4(0.0f, 0.0f, 1.0f, 1.0f);
params.flags.discardStart = TargetBufferFlags::ALL;
params.flags.discardEnd = TargetBufferFlags::NONE;
RenderPassParams params = getClearColorRenderPass();
params.viewport = getFullViewport();
PipelineState ps = {};
ps.program = program;
@@ -183,7 +179,8 @@ TEST_F(BackendTest, PushConstants) {
api.endRenderPass();
EXPECT_IMAGE(renderTarget, getExpectations(),
ScreenshotParams(512, 512, "pushConstants", 1957275826));
ScreenshotParams(params.viewport.width, params.viewport.height, "pushConstants",
3575588741));
api.commit(swapChain);
api.endFrame(0);

View File

@@ -279,14 +279,9 @@ TEST_F(ReadPixelsTest, ReadPixels) {
TrianglePrimitive const triangle(api);
RenderPassParams params = {};
fullViewport(params);
params.flags.clear = TargetBufferFlags::COLOR;
params.clearColor = { 0.f, 0.f, 1.f, 1.f };
params.flags.discardStart = TargetBufferFlags::ALL;
params.flags.discardEnd = TargetBufferFlags::NONE;
params.viewport.height = t.getRenderTargetSize();
RenderPassParams params = getClearColorRenderPass(math::float4(0, 0, 1, 1));
params.viewport.width = t.getRenderTargetSize();
params.viewport.height = t.getRenderTargetSize();
api.makeCurrent(swapChain, swapChain);
api.beginFrame(0, 0, 0);
@@ -399,14 +394,10 @@ TEST_F(ReadPixelsTest, ReadPixelsPerformance) {
PipelineState state = getColorWritePipelineState();
shader.addProgramToPipelineState(state);
RenderPassParams params = {};
fullViewport(params);
params.flags.clear = TargetBufferFlags::COLOR;
params.clearColor = { 0.f, 0.f, 1.f, 1.f };
params.flags.discardStart = TargetBufferFlags::ALL;
params.flags.discardEnd = TargetBufferFlags::NONE;
params.viewport.height = renderTargetSize;
RenderPassParams params = getClearColorRenderPass(math::float4(0, 0, 1, 1));
params.viewport.width = renderTargetSize;
params.viewport.height = renderTargetSize;
void* buffer = calloc(1, renderTargetSize * renderTargetSize * 4);

View File

@@ -75,12 +75,9 @@ TEST_F(BackendTest, RenderExternalImageWithoutSet) {
PipelineState state = getColorWritePipelineState();
shader.addProgramToPipelineState(state);
RenderPassParams params = {};
fullViewport(params);
params.flags.clear = TargetBufferFlags::COLOR;
params.clearColor = { 0.f, 1.f, 0.f, 1.f };
params.flags.discardStart = TargetBufferFlags::ALL;
params.flags.discardEnd = TargetBufferFlags::NONE;
RenderPassParams params = getClearColorRenderPass();
params.viewport = getFullViewport();
DescriptorSetHandle descriptorSet = shader.createDescriptorSet(api);
@@ -175,12 +172,9 @@ TEST_F(BackendTest, RenderExternalImage) {
PipelineState state = getColorWritePipelineState();
shader.addProgramToPipelineState(state);
RenderPassParams params = {};
fullViewport(params);
params.flags.clear = TargetBufferFlags::COLOR;
params.clearColor = { 0.f, 1.f, 0.f, 1.f };
params.flags.discardStart = TargetBufferFlags::ALL;
params.flags.discardEnd = TargetBufferFlags::NONE;
RenderPassParams params = getClearColorRenderPass();
params.viewport = getFullViewport();
api.startCapture(0);
api.makeCurrent(swapChain, swapChain);
@@ -198,7 +192,7 @@ TEST_F(BackendTest, RenderExternalImage) {
api.commit(swapChain);
api.endFrame(0);
EXPECT_IMAGE(defaultRenderTarget, getExpectations(),
ScreenshotParams(512, 512, "RenderExternalImage", 267229901));
ScreenshotParams(512, 512, "RenderExternalImage", 1206264951));
api.stopCapture(0);
api.finish();

View File

@@ -114,12 +114,8 @@ TEST_F(BackendTest, ScissorViewportRegion) {
TrianglePrimitive triangle(api);
// Render a white triangle over blue.
RenderPassParams params = {};
params.flags.clear = TargetBufferFlags::COLOR0;
RenderPassParams params = getClearColorRenderPass();
params.viewport = srcRect;
params.clearColor = math::float4(0.0f, 0.0f, 1.0f, 1.0f);
params.flags.discardStart = TargetBufferFlags::ALL;
params.flags.discardEnd = TargetBufferFlags::NONE;
PipelineState ps = getColorWritePipelineState();
shader.addProgramToPipelineState(ps);
@@ -133,7 +129,7 @@ TEST_F(BackendTest, ScissorViewportRegion) {
api.endRenderPass();
EXPECT_IMAGE(fullRenderTarget, getExpectations(),
ScreenshotParams(kSrcTexWidth >> 1, kSrcTexHeight >> 1, "scissor", 0xAB3D1C53));
ScreenshotParams(kSrcTexWidth >> 1, kSrcTexHeight >> 1, "scissor", 15842520));
api.commit(swapChain);
api.endFrame(0);
@@ -194,12 +190,8 @@ TEST_F(BackendTest, ScissorViewportEdgeCases) {
TrianglePrimitive triangle(api);
// Render a white triangle over blue.
RenderPassParams params = {};
params.flags.clear = TargetBufferFlags::COLOR0;
RenderPassParams params = getClearColorRenderPass();
params.viewport = bottomLeftViewport;
params.clearColor = math::float4(0.0f, 0.0f, 1.0f, 1.0f);
params.flags.discardStart = TargetBufferFlags::ALL;
params.flags.discardEnd = TargetBufferFlags::NONE;
PipelineState ps = getColorWritePipelineState();
shader.addProgramToPipelineState(ps);
@@ -221,7 +213,7 @@ TEST_F(BackendTest, ScissorViewportEdgeCases) {
api.endRenderPass();
EXPECT_IMAGE(renderTarget, getExpectations(),
ScreenshotParams(512, 512, "ScissorViewportEdgeCases", 0x6BF00F31));
ScreenshotParams(512, 512, "ScissorViewportEdgeCases", 2199186852));
api.commit(swapChain);
api.endFrame(0);