Files
video-shader-toys/tests/Std140BufferTests.cpp
Aiden 0bfffa6552
Some checks failed
CI / Native Windows Build And Tests (push) Has been cancelled
CI / React UI Build (push) Has been cancelled
CI / Windows Release Package (push) Has been cancelled
Refactor
2026-05-06 09:28:46 +10:00

74 lines
1.7 KiB
C++

#include "Std140Buffer.h"
#include <cstring>
#include <iostream>
#include <vector>
namespace
{
int gFailures = 0;
void Expect(bool condition, const char* message)
{
if (condition)
return;
std::cerr << "FAIL: " << message << "\n";
++gFailures;
}
float ReadFloat(const std::vector<unsigned char>& buffer, std::size_t offset)
{
float value = 0.0f;
std::memcpy(&value, buffer.data() + offset, sizeof(float));
return value;
}
int ReadInt(const std::vector<unsigned char>& buffer, std::size_t offset)
{
int value = 0;
std::memcpy(&value, buffer.data() + offset, sizeof(int));
return value;
}
void TestScalarPacking()
{
std::vector<unsigned char> buffer;
AppendStd140Float(buffer, 1.25f);
AppendStd140Int(buffer, 7);
Expect(buffer.size() == 8, "scalar values pack tightly on 4-byte alignment");
Expect(ReadFloat(buffer, 0) == 1.25f, "float value is written at offset 0");
Expect(ReadInt(buffer, 4) == 7, "int value is written at offset 4");
}
void TestVectorAlignment()
{
std::vector<unsigned char> buffer;
AppendStd140Float(buffer, 1.0f);
AppendStd140Vec2(buffer, 2.0f, 3.0f);
AppendStd140Vec4(buffer, 4.0f, 5.0f, 6.0f, 7.0f);
Expect(buffer.size() == 32, "vec2 aligns to 8 bytes and vec4 aligns to 16 bytes");
Expect(ReadFloat(buffer, 8) == 2.0f, "vec2 x value is aligned");
Expect(ReadFloat(buffer, 12) == 3.0f, "vec2 y value follows x");
Expect(ReadFloat(buffer, 16) == 4.0f, "vec4 x value is aligned");
Expect(ReadFloat(buffer, 28) == 7.0f, "vec4 w value is written");
}
}
int main()
{
TestScalarPacking();
TestVectorAlignment();
if (gFailures != 0)
{
std::cerr << gFailures << " Std140Buffer test failure(s).\n";
return 1;
}
std::cout << "Std140Buffer tests passed.\n";
return 0;
}