Skip to content

Commit 8f80b1c

Browse files
committed
backup current
1 parent f43ede6 commit 8f80b1c

File tree

1 file changed

+56
-29
lines changed

1 file changed

+56
-29
lines changed

src/main.cpp

Lines changed: 56 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -53,15 +53,12 @@ struct __declspec(uuid("4F2FCBC8-D459-4325-A4D8-4EE63F5C4571")) device_data_s
5353
format _back_buffer_format;
5454
uint16_t _back_buffer_samples;
5555
resource _back_buffer_resolved = { 0 };
56-
resource_view _back_buffer_resolved_srv = { 0 };
5756
std::vector<resource_view> _back_buffer_targets;
5857

5958
void free_buffer_resources(device* device) {
6059
if (_hasBackBuffer) {
6160
device->destroy_resource(_back_buffer_resolved);
6261
_back_buffer_resolved = {};
63-
device->destroy_resource_view(_back_buffer_resolved_srv);
64-
_back_buffer_resolved_srv = {};
6562

6663
for (const auto view : _back_buffer_targets)
6764
device->destroy_resource_view(view);
@@ -117,22 +114,21 @@ struct __declspec(uuid("4F2FCBC8-D459-4325-A4D8-4EE63F5C4571")) device_data_s
117114
}
118115

119116
if (!device->create_resource(
120-
resource_desc(_width, _height, 1, 1, format_to_typeless(_back_buffer_format), 1, memory_heap::gpu_only, resource_usage::shader_resource | resource_usage::render_target | resource_usage::copy_dest | resource_usage::resolve_dest),
121-
nullptr, back_buffer_desc.texture.samples == 1 ? resource_usage::copy_dest : resource_usage::resolve_dest, &_back_buffer_resolved) ||
122-
!device->create_resource_view(
123-
_back_buffer_resolved,
124-
resource_usage::shader_resource,
125-
resource_view_desc(_back_buffer_format),
126-
&_back_buffer_resolved_srv) ||
117+
resource_desc(_width, _height, 1, 1, format_to_typeless(_back_buffer_format), 1, memory_heap::gpu_only, resource_usage::shader_resource | resource_usage::render_target),
118+
nullptr, resource_usage::shader_resource | resource_usage::render_target, &_back_buffer_resolved) ||
127119
!device->create_resource_view(
128120
_back_buffer_resolved,
129121
resource_usage::render_target,
130-
resource_view_desc(format_to_default_typed(_back_buffer_format, 0)),
122+
resource_view_desc(
123+
resource_view_type::texture_2d,
124+
format_to_default_typed(_back_buffer_format, 0), 0, 1, 0, 1),
131125
&_back_buffer_targets.emplace_back()) ||
132126
!device->create_resource_view(
133127
_back_buffer_resolved,
134128
resource_usage::render_target,
135-
resource_view_desc(format_to_default_typed(_back_buffer_format, 1)),
129+
resource_view_desc(
130+
resource_view_type::texture_2d,
131+
format_to_default_typed(_back_buffer_format, 1), 0, 1, 0, 1),
136132
&_back_buffer_targets.emplace_back()))
137133
{
138134
free_buffer_resources(device);
@@ -144,14 +140,14 @@ struct __declspec(uuid("4F2FCBC8-D459-4325-A4D8-4EE63F5C4571")) device_data_s
144140
back_buffer_resource,
145141
resource_usage::render_target,
146142
resource_view_desc(
147-
back_buffer_desc.texture.samples > 1 ? resource_view_type::texture_2d_multisample : resource_view_type::texture_2d,
143+
resource_view_type::texture_2d,
148144
format_to_default_typed(back_buffer_desc.texture.format, 0), 0, 1, 0, 1),
149145
&_back_buffer_targets.emplace_back()) ||
150146
!device->create_resource_view(
151147
back_buffer_resource,
152148
resource_usage::render_target,
153149
resource_view_desc(
154-
back_buffer_desc.texture.samples > 1 ? resource_view_type::texture_2d_multisample : resource_view_type::texture_2d,
150+
resource_view_type::texture_2d,
155151
format_to_default_typed(back_buffer_desc.texture.format, 1), 0, 1, 0, 1),
156152
&_back_buffer_targets.emplace_back()))
157153
{
@@ -269,15 +265,26 @@ struct __declspec(uuid("4F2FCBC8-D459-4325-A4D8-4EE63F5C4571")) device_data_s
269265
{
270266
if (back_buffer_data._back_buffer_samples == 1)
271267
{
272-
if(old_back_buffer_resource_usage != resource_usage::copy_source) command_list->barrier(back_buffer_resource, old_back_buffer_resource_usage, resource_usage::copy_source);
268+
const resource resources[2] = { back_buffer_resource, back_buffer_data._back_buffer_resolved };
269+
const resource_usage state_old[2] = { old_back_buffer_resource_usage, resource_usage::shader_resource | resource_usage::render_target };
270+
const resource_usage state_new[2] = { resource_usage::copy_source, resource_usage::copy_dest };
271+
const resource_usage state_final[2] = { old_back_buffer_resource_usage, resource_usage::shader_resource | resource_usage::render_target };
272+
273+
command_list->barrier(2, resources, state_old, state_new);
273274
command_list->copy_texture_region(back_buffer_resource, 0, nullptr, back_buffer_data._back_buffer_resolved, 0, nullptr);
274-
if (old_back_buffer_resource_usage != resource_usage::copy_source) command_list->barrier(back_buffer_data._back_buffer_resolved, resource_usage::copy_dest, old_back_buffer_resource_usage);
275+
command_list->barrier(2, resources, state_new, state_final);
276+
275277
}
276278
else
277279
{
278-
if (old_back_buffer_resource_usage != resource_usage::resolve_source) command_list->barrier(back_buffer_resource, old_back_buffer_resource_usage, resource_usage::resolve_source);
280+
const resource resources[2] = { back_buffer_resource, back_buffer_data._back_buffer_resolved };
281+
const resource_usage state_old[2] = { old_back_buffer_resource_usage, resource_usage::shader_resource | resource_usage::render_target };
282+
const resource_usage state_new[2] = { resource_usage::resolve_source, resource_usage::resolve_dest };
283+
const resource_usage state_final[2] = { old_back_buffer_resource_usage, resource_usage::shader_resource | resource_usage::render_target };
284+
285+
command_list->barrier(2, resources, state_old, state_new);
279286
command_list->resolve_texture_region(back_buffer_resource, 0, nullptr, back_buffer_data._back_buffer_resolved, 0, 0, 0, 0, back_buffer_data._back_buffer_format);
280-
if (old_back_buffer_resource_usage != resource_usage::resolve_source) command_list->barrier(back_buffer_data._back_buffer_resolved, resource_usage::resolve_dest, old_back_buffer_resource_usage);
287+
command_list->barrier(2, resources, state_new, state_final);
281288
}
282289
}
283290

@@ -288,13 +295,16 @@ struct __declspec(uuid("4F2FCBC8-D459-4325-A4D8-4EE63F5C4571")) device_data_s
288295

289296
auto old_depth_buffer_resource_usage = device->get_resource_desc(depth_buffer_resource).usage;
290297

291-
command_list->barrier(depth_buffer_data._depth_texture, resource_usage::shader_resource, resource_usage::copy_dest);
292-
if(old_depth_buffer_resource_usage != resource_usage::copy_source) command_list->barrier(depth_buffer_resource, old_depth_buffer_resource_usage, resource_usage::copy_source);
298+
const resource resources[2] = { depth_buffer_resource, depth_buffer_data._depth_texture };
299+
const resource_usage state_old[2] = { old_depth_buffer_resource_usage, resource_usage::shader_resource };
300+
const resource_usage state_new[2] = { resource_usage::copy_source, resource_usage::copy_dest };
301+
const resource_usage state_final[2] = { old_depth_buffer_resource_usage, resource_usage::shader_resource };
302+
303+
command_list->barrier(2, resources, state_old, state_new);
293304

294305
command_list->copy_resource(depth_buffer_resource, depth_buffer_data._depth_texture);
295306

296-
if (old_depth_buffer_resource_usage != resource_usage::copy_source)command_list->barrier(depth_buffer_resource, resource_usage::copy_source, old_depth_buffer_resource_usage);
297-
command_list->barrier(depth_buffer_data._depth_texture, resource_usage::copy_dest, resource_usage::shader_resource);
307+
command_list->barrier(2, resources, state_new, state_final);
298308
}
299309

300310
if (back_buffer_data._back_buffer_resolved != 0)
@@ -311,14 +321,31 @@ struct __declspec(uuid("4F2FCBC8-D459-4325-A4D8-4EE63F5C4571")) device_data_s
311321
// Stretch main render target back into MSAA back buffer if MSAA is active or copy when format conversion is required
312322
if (back_buffer_data._back_buffer_resolved != 0)
313323
{
314-
const resource resources[2] = { back_buffer_resource, back_buffer_data._back_buffer_resolved };
315-
const resource_usage state_old[2] = { old_back_buffer_resource_usage, resource_usage::render_target };
316-
const resource_usage state_new[2] = { resource_usage::copy_dest, resource_usage::copy_source };
317-
const resource_usage state_final[2] = { old_back_buffer_resource_usage, resource_usage::resolve_dest };
324+
if (back_buffer_data._back_buffer_samples == 1)
325+
{
326+
const resource resources[2] = { back_buffer_resource, back_buffer_data._back_buffer_resolved };
327+
const resource_usage state_old[2] = { old_back_buffer_resource_usage, resource_usage::shader_resource | resource_usage::render_target };
328+
const resource_usage state_new[2] = { resource_usage::copy_dest, resource_usage::copy_source };
329+
const resource_usage state_final[2] = { old_back_buffer_resource_usage, resource_usage::shader_resource | resource_usage::render_target };
330+
331+
command_list->barrier(2, resources, state_old, state_new);
332+
command_list->copy_texture_region(back_buffer_data._back_buffer_resolved, 0, nullptr, back_buffer_resource, 0, nullptr);
333+
command_list->barrier(2, resources, state_new, state_final);
334+
}
335+
else
336+
{
337+
const resource resources[2] = { back_buffer_resource, back_buffer_data._back_buffer_resolved };
338+
const resource_usage state_old[2] = { old_back_buffer_resource_usage, resource_usage::shader_resource | resource_usage::render_target };
339+
const resource_usage state_new[2] = { resource_usage::resolve_dest, resource_usage::resolve_dest };
340+
const resource_usage state_final[2] = { old_back_buffer_resource_usage, resource_usage::shader_resource | resource_usage::render_target };
318341

319-
command_list->barrier(2, resources, state_old, state_new);
320-
command_list->copy_texture_region(back_buffer_data._back_buffer_resolved, 0, nullptr, back_buffer_resource, 0, nullptr);
321-
command_list->barrier(2, resources, state_new, state_final);
342+
float color[4] = { 1.0f,1.0f,0.0f,1.0f };
343+
command_list->clear_render_target_view(back_buffer_data._back_buffer_targets[0], color);
344+
345+
command_list->barrier(2, resources, state_old, state_new);
346+
command_list->resolve_texture_region(back_buffer_data._back_buffer_resolved, 0, nullptr, back_buffer_resource, 0, 0, 0, 0, back_buffer_data._back_buffer_desc.texture.format);
347+
command_list->barrier(2, resources, state_new, state_final);
348+
}
322349
}
323350

324351
return true;

0 commit comments

Comments
 (0)