Fix model track-group movement and RGB destination-alpha blending
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
#include "../../src/host/blend_state.h"
|
||||
#include "../../src/host/draw_capture.h"
|
||||
#include <cstdio>
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
int failures = 0;
|
||||
auto check = [&](bool ok, const char* message) {
|
||||
if (!ok) { std::fprintf(stderr, "FAIL %s\n", message); ++failures; }
|
||||
};
|
||||
using mt_host::d3d_blend_for_rgb_target;
|
||||
check(d3d_blend_for_rgb_target(7) == 2, "gungsin DESTALPHA preserves the background on XRGB");
|
||||
check(d3d_blend_for_rgb_target(8) == 1, "INVDESTALPHA contributes zero on XRGB");
|
||||
check(d3d_blend_for_rgb_target(11) == 1, "SRCALPHASAT contributes zero RGB on XRGB");
|
||||
for (std::uint8_t factor = 1; factor <= 10; ++factor)
|
||||
if (factor != 7 && factor != 8)
|
||||
check(d3d_blend_for_rgb_target(factor) == factor, "ordinary alpha/additive/color factors preserved");
|
||||
if (argc == 2) {
|
||||
std::vector<Render3DDraw> draws;
|
||||
// An opaque scene draw can output alpha 0 into Vulkan's RGBA storage.
|
||||
// Gungsin's SRCALPHA / DESTALPHA must still preserve that XRGB background.
|
||||
for (auto color : {0x00804020u, 0x800080ffu}) {
|
||||
Render3DDraw d{};
|
||||
for (auto* matrix : {d.world, d.view, d.proj})
|
||||
for (int i = 0; i < 16; ++i) matrix[i] = (i % 5 == 0) ? 1 : 0;
|
||||
d.positions = {-1,-1,0.5f, 1,-1,0.5f, 1,1,0.5f, -1,1,0.5f};
|
||||
d.indices = {0,1,2,0,2,3};
|
||||
d.diffuse = {color,color,color,color};
|
||||
d.color_op[0] = d.alpha_op[0] = 2; // SELECTARG1 / DIFFUSE
|
||||
d.color_op[1] = d.alpha_op[1] = 1; // DISABLE
|
||||
if (!draws.empty()) { d.alpha_blend = 1; d.src_blend = 5; d.dest_blend = 7; }
|
||||
draws.push_back(std::move(d));
|
||||
}
|
||||
native_draw_capture::write(argv[1], draws, {}, 960, 640, {});
|
||||
}
|
||||
return failures ? 1 : 0;
|
||||
}
|
||||
Reference in New Issue
Block a user