mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-12-09 21:47:47 +00:00
Plumb the server->client wire
This commit is contained in:
committed by
Corentin Wallez
parent
7f433a5b52
commit
682a8250b3
@@ -24,8 +24,16 @@ namespace wire {
|
||||
|
||||
class TerribleCommandBuffer : public CommandSerializer {
|
||||
public:
|
||||
TerribleCommandBuffer() {
|
||||
}
|
||||
|
||||
TerribleCommandBuffer(CommandHandler* handler) : handler(handler) {
|
||||
}
|
||||
|
||||
void SetHandler(CommandHandler* handler) {
|
||||
this->handler = handler;
|
||||
}
|
||||
|
||||
void* GetCmdSpace(size_t size) {
|
||||
if (size > sizeof(buffer)) {
|
||||
return nullptr;
|
||||
@@ -41,6 +49,7 @@ class TerribleCommandBuffer : public CommandSerializer {
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void Flush() {
|
||||
handler->HandleCommands(buffer, offset);
|
||||
offset = 0;
|
||||
|
||||
@@ -29,8 +29,6 @@ namespace wire {
|
||||
virtual void Flush() = 0;
|
||||
};
|
||||
|
||||
void NewClientDevice(nxtProcTable* procs, nxtDevice* device, CommandSerializer* serializer);
|
||||
|
||||
class CommandHandler {
|
||||
public:
|
||||
virtual ~CommandHandler() = default;
|
||||
@@ -39,7 +37,8 @@ namespace wire {
|
||||
virtual void OnSynchronousError() = 0;
|
||||
};
|
||||
|
||||
CommandHandler* CreateCommandHandler(nxtDevice device, const nxtProcTable& procs);
|
||||
CommandHandler* NewClientDevice(nxtProcTable* procs, nxtDevice* device, CommandSerializer* serializer);
|
||||
CommandHandler* NewServerCommandHandler(nxtDevice device, const nxtProcTable& procs, CommandSerializer* serializer);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,27 +28,34 @@ class WireTests : public Test {
|
||||
nxtDevice mockDevice;
|
||||
api.GetProcTableAndDevice(&mockProcs, &mockDevice);
|
||||
|
||||
wireServer = CreateCommandHandler(mockDevice, mockProcs);
|
||||
s2cBuf = new TerribleCommandBuffer();
|
||||
c2sBuf = new TerribleCommandBuffer(wireServer);
|
||||
|
||||
cmdBuf = new TerribleCommandBuffer(wireServer);
|
||||
wireServer = NewServerCommandHandler(mockDevice, mockProcs, s2cBuf);
|
||||
c2sBuf->SetHandler(wireServer);
|
||||
|
||||
nxtDevice clientDevice;
|
||||
nxtProcTable clientProcs;
|
||||
NewClientDevice(&clientProcs, &clientDevice, cmdBuf);
|
||||
|
||||
wireClient = NewClientDevice(&clientProcs, &device, c2sBuf);
|
||||
nxtSetProcs(&clientProcs);
|
||||
device = clientDevice;
|
||||
s2cBuf->SetHandler(wireClient);
|
||||
|
||||
apiDevice = mockDevice;
|
||||
}
|
||||
|
||||
void TearDown() override {
|
||||
nxtSetProcs(nullptr);
|
||||
delete wireServer;
|
||||
delete cmdBuf;
|
||||
delete wireClient;
|
||||
delete c2sBuf;
|
||||
delete s2cBuf;
|
||||
}
|
||||
|
||||
void Flush() {
|
||||
cmdBuf->Flush();
|
||||
void FlushClient() {
|
||||
c2sBuf->Flush();
|
||||
}
|
||||
|
||||
void FlushServer() {
|
||||
s2cBuf->Flush();
|
||||
}
|
||||
|
||||
MockProcTable api;
|
||||
@@ -57,7 +64,9 @@ class WireTests : public Test {
|
||||
|
||||
private:
|
||||
CommandHandler* wireServer = nullptr;
|
||||
TerribleCommandBuffer* cmdBuf = nullptr;
|
||||
CommandHandler* wireClient = nullptr;
|
||||
TerribleCommandBuffer* s2cBuf = nullptr;
|
||||
TerribleCommandBuffer* c2sBuf = nullptr;
|
||||
};
|
||||
|
||||
// One call gets forwarded correctly.
|
||||
@@ -68,7 +77,7 @@ TEST_F(WireTests, CallForwarded) {
|
||||
EXPECT_CALL(api, DeviceCreateCommandBufferBuilder(apiDevice))
|
||||
.WillOnce(Return(apiCmdBufBuilder));
|
||||
|
||||
Flush();
|
||||
FlushClient();
|
||||
}
|
||||
|
||||
// Test that calling methods on a new object works as expected.
|
||||
@@ -84,7 +93,7 @@ TEST_F(WireTests, CreateThenCall) {
|
||||
EXPECT_CALL(api, CommandBufferBuilderGetResult(apiCmdBufBuilder))
|
||||
.WillOnce(Return(apiCmdBuf));
|
||||
|
||||
Flush();
|
||||
FlushClient();
|
||||
}
|
||||
|
||||
// Test that client reference/release do not call the backend API.
|
||||
@@ -98,7 +107,7 @@ TEST_F(WireTests, RefCountKeptInClient) {
|
||||
EXPECT_CALL(api, DeviceCreateCommandBufferBuilder(apiDevice))
|
||||
.WillOnce(Return(apiCmdBufBuilder));
|
||||
|
||||
Flush();
|
||||
FlushClient();
|
||||
}
|
||||
|
||||
// Test that client reference/release do not call the backend API.
|
||||
@@ -113,7 +122,7 @@ TEST_F(WireTests, ReleaseCalledOnRefCount0) {
|
||||
|
||||
EXPECT_CALL(api, CommandBufferBuilderRelease(apiCmdBufBuilder));
|
||||
|
||||
Flush();
|
||||
FlushClient();
|
||||
}
|
||||
|
||||
TEST_F(WireTests, ObjectAsValueArgument) {
|
||||
@@ -139,7 +148,7 @@ TEST_F(WireTests, ObjectAsValueArgument) {
|
||||
|
||||
EXPECT_CALL(api, CommandBufferBuilderSetPipeline(apiCmdBufBuilder, apiPipeline));
|
||||
|
||||
Flush();
|
||||
FlushClient();
|
||||
}
|
||||
|
||||
TEST_F(WireTests, OneObjectAsPointerArgument) {
|
||||
@@ -172,7 +181,7 @@ TEST_F(WireTests, OneObjectAsPointerArgument) {
|
||||
|
||||
EXPECT_CALL(api, QueueSubmit(apiQueue, 1, Pointee(apiCmdBuf)));
|
||||
|
||||
Flush();
|
||||
FlushClient();
|
||||
}
|
||||
|
||||
// TODO
|
||||
|
||||
Reference in New Issue
Block a user