MCPcopy Create free account
hub / github.com/crosire/reshade / on_init

Method on_init

source/runtime.cpp:257–521  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

255}
256
257bool reshade::runtime::on_init()
258{
259 assert(!_is_initialized);
260
261 const api::resource_desc back_buffer_desc = _device->get_resource_desc(_swapchain->get_back_buffer(0));
262
263 // Avoid initializing on very small swap chains (e.g. implicit swap chain in The Sims 4, which is not used to present in windowed mode)
264 if (back_buffer_desc.texture.width <= 16 && back_buffer_desc.texture.height <= 16)
265 return false;
266
267 _width = back_buffer_desc.texture.width;
268 _height = back_buffer_desc.texture.height;
269 _back_buffer_format = api::format_to_default_typed(back_buffer_desc.texture.format);
270 _back_buffer_samples = back_buffer_desc.texture.samples;
271 _back_buffer_color_space = _swapchain->get_color_space();
272
273 // Create resolve texture and copy pipeline (do this before creating effect resources, to ensure correct back buffer format is set up)
274 if (back_buffer_desc.texture.samples > 1 ||
275 // Always use resolve texture in OpenGL to flip vertically and support sRGB + binding effect stencil
276 (_device->get_api() == api::device_api::opengl && !_is_vr) ||
277 // Some effects rely on there being an alpha channel available, so create resolve texture if that is not the case
278 (_back_buffer_format == api::format::r8g8b8x8_unorm || _back_buffer_format == api::format::b8g8r8x8_unorm))
279 {
280 switch (_back_buffer_format)
281 {
282 case api::format::r8g8b8x8_unorm:
283 _back_buffer_format = api::format::r8g8b8a8_unorm;
284 break;
285 case api::format::b8g8r8x8_unorm:
286 _back_buffer_format = api::format::b8g8r8a8_unorm;
287 break;
288 }
289
290 const bool need_copy_pipeline =
291 _device->get_api() == api::device_api::d3d10 ||
292 _device->get_api() == api::device_api::d3d11 ||
293 _device->get_api() == api::device_api::d3d12;
294
295 api::resource_usage usage = api::resource_usage::render_target | api::resource_usage::copy_dest | api::resource_usage::resolve_dest;
296 if (need_copy_pipeline)
297 usage |= api::resource_usage::shader_resource;
298 else
299 usage |= api::resource_usage::copy_source;
300
301 if (!_device->create_resource(
302 api::resource_desc(_width, _height, 1, 1, api::format_to_typeless(_back_buffer_format), 1, api::memory_heap::gpu_only, usage),
303 nullptr, back_buffer_desc.texture.samples == 1 ? api::resource_usage::copy_dest : api::resource_usage::resolve_dest, &_back_buffer_resolved) ||
304 !_device->create_resource_view(
305 _back_buffer_resolved,
306 api::resource_usage::render_target,
307 api::resource_view_desc(api::format_to_default_typed(_back_buffer_format, 0)),
308 &_back_buffer_targets.emplace_back()) ||
309 !_device->create_resource_view(
310 _back_buffer_resolved,
311 api::resource_usage::render_target,
312 api::resource_view_desc(api::format_to_default_typed(_back_buffer_format, 1)),
313 &_back_buffer_targets.emplace_back()))
314 {

Callers 2

init_effect_runtimeMethod · 0.45

Calls 15

format_to_default_typedFunction · 0.85
resource_descClass · 0.85
format_to_typelessFunction · 0.85
resource_view_descClass · 0.85
messageFunction · 0.85
get_hwndFunction · 0.85
resetMethod · 0.80
get_resource_descMethod · 0.45
get_back_bufferMethod · 0.45
get_color_spaceMethod · 0.45
get_apiMethod · 0.45
create_resourceMethod · 0.45

Tested by

no test coverage detected