113 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			113 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| 
								 | 
							
								#include <renderer/frontend/data/buffer.hpp>
							 | 
						||
| 
								 | 
							
								#include <renderer/test/utils.hpp>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								using ::lt::renderer::IBuffer;
							 | 
						||
| 
								 | 
							
								using enum ::lt::renderer::IMessenger::MessageSeverity;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Suite raii = "buffer_raii"_suite = [] {
							 | 
						||
| 
								 | 
							
									Case { "happy path won't throw" } = [] {
							 | 
						||
| 
								 | 
							
										auto fixture = FixtureDeviceSwapchain {};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										ignore = IBuffer::create(
							 | 
						||
| 
								 | 
							
										    lt::renderer::Api::vulkan,
							 | 
						||
| 
								 | 
							
										    fixture.device(),
							 | 
						||
| 
								 | 
							
										    fixture.gpu(),
							 | 
						||
| 
								 | 
							
										    IBuffer::CreateInfo {
							 | 
						||
| 
								 | 
							
										        .usage = IBuffer::Usage::vertex,
							 | 
						||
| 
								 | 
							
										        .size = 1000u,
							 | 
						||
| 
								 | 
							
										        .debug_name = "",
							 | 
						||
| 
								 | 
							
										    }
							 | 
						||
| 
								 | 
							
										);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										expect_false(fixture.has_any_messages_of(error));
							 | 
						||
| 
								 | 
							
										expect_false(fixture.has_any_messages_of(warning));
							 | 
						||
| 
								 | 
							
									};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									Case { "unhappy path throws" } = [] {
							 | 
						||
| 
								 | 
							
										auto fixture = FixtureDeviceSwapchain {};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										auto info = IBuffer::CreateInfo {
							 | 
						||
| 
								 | 
							
											.usage = IBuffer::Usage::vertex,
							 | 
						||
| 
								 | 
							
											.size = 10000u,
							 | 
						||
| 
								 | 
							
											.debug_name = "",
							 | 
						||
| 
								 | 
							
										};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										expect_throw([&] {
							 | 
						||
| 
								 | 
							
											ignore = IBuffer::create(lt::renderer::Api::vulkan, nullptr, fixture.gpu(), info);
							 | 
						||
| 
								 | 
							
										});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										expect_throw([&] {
							 | 
						||
| 
								 | 
							
											ignore = IBuffer::create(lt::renderer::Api::vulkan, fixture.device(), nullptr, info);
							 | 
						||
| 
								 | 
							
										});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										expect_throw([&, info] mutable {
							 | 
						||
| 
								 | 
							
											info.size = 0;
							 | 
						||
| 
								 | 
							
											ignore = IBuffer::create(
							 | 
						||
| 
								 | 
							
											    lt::renderer::Api::vulkan,
							 | 
						||
| 
								 | 
							
											    fixture.device(),
							 | 
						||
| 
								 | 
							
											    fixture.gpu(),
							 | 
						||
| 
								 | 
							
											    info
							 | 
						||
| 
								 | 
							
											);
							 | 
						||
| 
								 | 
							
										});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										expect_throw([&] {
							 | 
						||
| 
								 | 
							
											ignore = IBuffer::create(
							 | 
						||
| 
								 | 
							
											    lt::renderer::Api::direct_x,
							 | 
						||
| 
								 | 
							
											    fixture.device(),
							 | 
						||
| 
								 | 
							
											    fixture.gpu(),
							 | 
						||
| 
								 | 
							
											    info
							 | 
						||
| 
								 | 
							
											);
							 | 
						||
| 
								 | 
							
										});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										expect_throw([&] {
							 | 
						||
| 
								 | 
							
											ignore = IBuffer::create(
							 | 
						||
| 
								 | 
							
											    lt::renderer::Api::metal,
							 | 
						||
| 
								 | 
							
											    fixture.device(),
							 | 
						||
| 
								 | 
							
											    fixture.gpu(),
							 | 
						||
| 
								 | 
							
											    info
							 | 
						||
| 
								 | 
							
											);
							 | 
						||
| 
								 | 
							
										});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										expect_throw([&] {
							 | 
						||
| 
								 | 
							
											ignore = IBuffer::create(
							 | 
						||
| 
								 | 
							
											    lt::renderer::Api::none,
							 | 
						||
| 
								 | 
							
											    fixture.device(),
							 | 
						||
| 
								 | 
							
											    fixture.gpu(),
							 | 
						||
| 
								 | 
							
											    info
							 | 
						||
| 
								 | 
							
											);
							 | 
						||
| 
								 | 
							
										});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										/** Make sure the default-case was good */
							 | 
						||
| 
								 | 
							
										ignore = IBuffer::create(lt::renderer::Api::vulkan, fixture.device(), fixture.gpu(), info);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										expect_false(fixture.has_any_messages_of(error));
							 | 
						||
| 
								 | 
							
										expect_false(fixture.has_any_messages_of(warning));
							 | 
						||
| 
								 | 
							
									};
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Suite mapping = "buffer_mapping"_suite = [] {
							 | 
						||
| 
								 | 
							
									Case { "mapping" } = [] {
							 | 
						||
| 
								 | 
							
										auto fixture = FixtureDeviceSwapchain {};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										constexpr auto size = 1000u;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										auto buffer = IBuffer::create(
							 | 
						||
| 
								 | 
							
										    lt::renderer::Api::vulkan,
							 | 
						||
| 
								 | 
							
										    fixture.device(),
							 | 
						||
| 
								 | 
							
										    fixture.gpu(),
							 | 
						||
| 
								 | 
							
										    IBuffer::CreateInfo {
							 | 
						||
| 
								 | 
							
										        .usage = IBuffer::Usage::vertex,
							 | 
						||
| 
								 | 
							
										        .size = size,
							 | 
						||
| 
								 | 
							
										        .debug_name = "",
							 | 
						||
| 
								 | 
							
										    }
							 | 
						||
| 
								 | 
							
										);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										auto map = buffer->map();
							 | 
						||
| 
								 | 
							
										expect_eq(map.size(), size);
							 | 
						||
| 
								 | 
							
										expect_not_nullptr(map.data());
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										expect_false(fixture.has_any_messages_of(error));
							 | 
						||
| 
								 | 
							
										expect_false(fixture.has_any_messages_of(warning));
							 | 
						||
| 
								 | 
							
									};
							 | 
						||
| 
								 | 
							
								};
							 |