MCPcopy Create free account
hub / github.com/SakuraEngine/SakuraEngine / init

Method init

modules/gui/renderer/src/render/skr_render_device.cpp:58–135  ·  view source on GitHub ↗

init & shutdown

Source from the content-addressed store, hash-verified

56{
57// init & shutdown
58void SkrRenderDevice::init()
59{
60 // create instance
61 auto instance_desc = make_zeroed<CGPUInstanceDescriptor>();
62 instance_desc.backend = kSKR_GUI_DEFAULT_RENDER_BACKEND;
63 instance_desc.enable_debug_layer = true;
64 instance_desc.enable_gpu_based_validation = true;
65 instance_desc.enable_set_name = true;
66 _cgpu_instance = cgpu_create_instance(&instance_desc);
67
68 // filter adapters
69 uint32_t adapters_count = 0;
70 cgpu_enum_adapters(_cgpu_instance, CGPU_NULLPTR, &adapters_count);
71 CGPUAdapterId adapters[64];
72 cgpu_enum_adapters(_cgpu_instance, adapters, &adapters_count);
73 _cgpu_adapter = adapters[0];
74
75 // create device & queue
76 auto queue_group_desc = make_zeroed<CGPUQueueGroupDescriptor>();
77 queue_group_desc.queue_type = CGPU_QUEUE_TYPE_GRAPHICS;
78 queue_group_desc.queue_count = 1;
79 auto device_desc = make_zeroed<CGPUDeviceDescriptor>();
80 device_desc.queue_groups = &queue_group_desc;
81 device_desc.queue_group_count = 1;
82 _cgpu_device = cgpu_create_device(_cgpu_adapter, &device_desc);
83 _cgpu_queue = cgpu_get_queue(_cgpu_device, CGPU_QUEUE_TYPE_GRAPHICS, 0);
84
85 // create rg
86 _render_graph = RenderGraph::create(
87 [=, this](render_graph::RenderGraphBuilder& b) {
88 b.with_device(_cgpu_device)
89 .with_gfx_queue(_cgpu_queue);
90 });
91
92 // init vertex layout
93 const uint32_t pos_offset = static_cast<uint32_t>(offsetof(PaintVertex, position));
94 const uint32_t texcoord_offset = static_cast<uint32_t>(offsetof(PaintVertex, texcoord));
95 const uint32_t aa_offset = static_cast<uint32_t>(offsetof(PaintVertex, aa));
96 const uint32_t uv_offset = static_cast<uint32_t>(offsetof(PaintVertex, clipUV));
97 const uint32_t uv2_offset = static_cast<uint32_t>(offsetof(PaintVertex, clipUV2));
98 const uint32_t color_offset = static_cast<uint32_t>(offsetof(PaintVertex, color));
99 _vertex_layout.attributes[0] = { u8"POSITION", 1, CGPU_FORMAT_R32G32B32A32_SFLOAT, 0, pos_offset, sizeof(skr_float4_t), CGPU_INPUT_RATE_VERTEX };
100 _vertex_layout.attributes[1] = { u8"TEXCOORD", 1, CGPU_FORMAT_R32G32_SFLOAT, 0, texcoord_offset, sizeof(skr_float2_t), CGPU_INPUT_RATE_VERTEX };
101 _vertex_layout.attributes[2] = { u8"AA", 1, CGPU_FORMAT_R32G32_SFLOAT, 0, aa_offset, sizeof(skr_float2_t), CGPU_INPUT_RATE_VERTEX };
102 _vertex_layout.attributes[3] = { u8"UV", 1, CGPU_FORMAT_R32G32_SFLOAT, 0, uv_offset, sizeof(skr_float2_t), CGPU_INPUT_RATE_VERTEX };
103 _vertex_layout.attributes[4] = { u8"UV_Two", 1, CGPU_FORMAT_R32G32_SFLOAT, 0, uv2_offset, sizeof(skr_float2_t), CGPU_INPUT_RATE_VERTEX };
104 _vertex_layout.attributes[5] = { u8"COLOR", 1, CGPU_FORMAT_R8G8B8A8_UNORM, 0, color_offset, sizeof(skr_float4_t), CGPU_INPUT_RATE_VERTEX };
105 _vertex_layout.attributes[6] = { u8"TRANSFORM", 4, CGPU_FORMAT_R32G32B32A32_SFLOAT, 1, 0, sizeof(skr_float4x4_t), CGPU_INPUT_RATE_INSTANCE };
106 _vertex_layout.attributes[7] = { u8"PROJECTION", 4, CGPU_FORMAT_R32G32B32A32_SFLOAT, 2, 0, sizeof(skr_float4x4_t), CGPU_INPUT_RATE_INSTANCE };
107 _vertex_layout.attributes[8] = { u8"DRAW_DATA", 4, CGPU_FORMAT_R32G32B32A32_SFLOAT, 3, 0, sizeof(skr_float4x4_t), CGPU_INPUT_RATE_INSTANCE };
108 _vertex_layout.attribute_count = 9;
109
110 // create sampler
111 CGPUSamplerDescriptor sampler_desc = {};
112 sampler_desc.address_u = CGPU_ADDRESS_MODE_REPEAT;
113 sampler_desc.address_v = CGPU_ADDRESS_MODE_REPEAT;
114 sampler_desc.address_w = CGPU_ADDRESS_MODE_REPEAT;
115 sampler_desc.mipmap_mode = CGPU_MIPMAP_MODE_NEAREST;

Callers

nothing calls this directly

Calls 8

cgpu_create_instanceFunction · 0.85
cgpu_enum_adaptersFunction · 0.85
cgpu_create_deviceFunction · 0.85
cgpu_get_queueFunction · 0.85
cgpu_create_samplerFunction · 0.85
createFunction · 0.50
runMethod · 0.45

Tested by

no test coverage detected