Skip to content

Commit 1253de6

Browse files
committed
Add enum to hint where to place the memory allocation for resources
1 parent 43a0f66 commit 1253de6

31 files changed

+334
-72
lines changed

include/reshade_api.hpp

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ namespace reshade { namespace api
7575
constexpr resource_usage &operator|=(resource_usage &lhs, resource_usage rhs) { return lhs = static_cast<resource_usage>(static_cast<uint32_t>(lhs) | static_cast<uint32_t>(rhs)); }
7676

7777
/// <summary>
78-
/// The available resource view types. This identifies how a view should interpret the resource.
78+
/// The available resource view types, which identify how a view interprets the data of its resource.
7979
/// </summary>
8080
enum class resource_view_type : uint32_t
8181
{
@@ -92,6 +92,18 @@ namespace reshade { namespace api
9292
texture_cube_array
9393
};
9494

95+
/// <summary>
96+
/// The available memory usage types, which give a hint as to where to place the memory allocation for a resource.
97+
/// </summary>
98+
enum class memory_usage : uint32_t
99+
{
100+
unknown,
101+
gpu_only,
102+
cpu_to_gpu,
103+
gpu_to_cpu,
104+
cpu_only
105+
};
106+
95107
/// <summary>
96108
/// Describes a resource, such as a buffer or texture.
97109
/// </summary>
@@ -280,10 +292,11 @@ namespace reshade { namespace api
280292
/// </summary>
281293
/// <param name="type">The type of the resource to create.</param>
282294
/// <param name="desc">The description of the resource to create.</param>
295+
/// <param name="mem_usage">The memory usage type of the resource, which is used to determine where to place the memory allocation.</param>
283296
/// <param name="initial_state">Initial usage of the resource after creation. This can later be changed via <see cref="command_list::transition_state"/>.</param>
284297
/// <param name="out_resource">Pointer to a handle that is set to the handle of the created resource.</param>
285298
/// <returns><c>true</c>if the resource was successfully created, <c>false</c> otherwise (in this case <paramref name="out_resource"/> is set to zero).</returns>
286-
virtual bool create_resource(resource_type type, const resource_desc &desc, resource_usage initial_state, resource_handle *out_resource) = 0;
299+
virtual bool create_resource(resource_type type, const resource_desc &desc, memory_usage mem_usage, resource_usage initial_state, resource_handle *out_resource) = 0;
287300
/// <summary>
288301
/// Creates a new resource view for the specified <paramref name="resource"/> based on the specified <paramref name="desc"/>ription.
289302
/// </summary>

include/reshade_events.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ namespace reshade
5757

5858
/// <summary>
5959
/// Called before 'IDirect3Device9::Create(...)Buffer/Texture', 'IDirect3DDevice9::Create(...)Surface(Ex)', 'ID3D10Device::CreateBuffer/Texture(...)', 'ID3D11Device::CreateBuffer/Texture(...)', 'ID3D12Device::Create(...)Resource', 'gl(Named)Buffer/Tex(ture)Storage(...)' or 'vkCreateBuffer/Image'.
60-
/// <para>Callback function signature: <c>void (api::device *device, api::resource_type type, api::resource_desc *desc)</c></para>
60+
/// <para>Callback function signature: <c>void (api::device *device, api::resource_type type, api::resource_desc *desc, api::memory_usage mem_usage)</c></para>
6161
/// </summary>
6262
create_resource,
6363
/// <summary>
@@ -194,7 +194,7 @@ namespace reshade
194194
template <>
195195
struct addon_event_traits<addon_event::destroy_effect_runtime> { typedef void(*decl)(api::effect_runtime *runtime); };
196196
template <>
197-
struct addon_event_traits<addon_event::create_resource> { typedef void(*decl)(api::device *device, api::resource_type type, api::resource_desc *desc); };
197+
struct addon_event_traits<addon_event::create_resource> { typedef void(*decl)(api::device *device, api::resource_type type, api::resource_desc *desc, api::memory_usage mem_usage); };
198198
template <>
199199
struct addon_event_traits<addon_event::create_resource_view> { typedef void(*decl)(api::device *device, api::resource_handle resource, api::resource_usage usage_type, api::resource_view_desc *desc); };
200200
template <>

source/addon/generic_depth.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ struct state_tracking_context
163163
if (device->get_api() >= render_api::d3d10 && device->get_api() <= render_api::d3d12)
164164
desc.format = static_cast<uint32_t>(make_dxgi_format_typeless(static_cast<DXGI_FORMAT>(desc.format)));
165165

166-
if (!device->create_resource(resource_type::texture_2d, desc, resource_usage::copy_dest, &backup_texture))
166+
if (!device->create_resource(resource_type::texture_2d, desc, memory_usage::gpu_only, resource_usage::copy_dest, &backup_texture))
167167
LOG(ERROR) << "Failed to create backup depth-stencil texture!";
168168
}
169169
};
@@ -252,7 +252,7 @@ static void on_destroy_queue_or_command_list(api_object *queue_or_cmd_list)
252252
queue_or_cmd_list->destroy_data<state_tracking>(state_tracking::GUID);
253253
}
254254

255-
static void on_create_resource(device *device, resource_type type, resource_desc *desc)
255+
static void on_create_resource(device *device, resource_type type, resource_desc *desc, memory_usage)
256256
{
257257
// No need to modify resources in D3D12, since backup texture is used always
258258
if (device->get_api() == render_api::d3d12)

source/d3d10/d3d10_device.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -424,7 +424,8 @@ HRESULT STDMETHODCALLTYPE D3D10Device::CreateBuffer(const D3D10_BUFFER_DESC *pDe
424424

425425
#if RESHADE_ADDON
426426
reshade::api::resource_desc api_desc = reshade::d3d10::convert_resource_desc(new_desc);
427-
RESHADE_ADDON_EVENT(create_resource, this, reshade::api::resource_type::buffer, &api_desc);
427+
const reshade::api::memory_usage mem_usage = reshade::d3d10::convert_memory_usage(new_desc.Usage);
428+
RESHADE_ADDON_EVENT(create_resource, this, reshade::api::resource_type::buffer, &api_desc, mem_usage);
428429
reshade::d3d10::convert_resource_desc(api_desc, new_desc);
429430
#endif
430431

@@ -458,7 +459,8 @@ HRESULT STDMETHODCALLTYPE D3D10Device::CreateTexture1D(const D3D10_TEXTURE1D_DES
458459

459460
#if RESHADE_ADDON
460461
reshade::api::resource_desc api_desc = reshade::d3d10::convert_resource_desc(new_desc);
461-
RESHADE_ADDON_EVENT(create_resource, this, reshade::api::resource_type::texture_1d, &api_desc);
462+
const reshade::api::memory_usage mem_usage = reshade::d3d10::convert_memory_usage(new_desc.Usage);
463+
RESHADE_ADDON_EVENT(create_resource, this, reshade::api::resource_type::texture_1d, &api_desc, mem_usage);
462464
reshade::d3d10::convert_resource_desc(api_desc, new_desc);
463465
#endif
464466

@@ -495,7 +497,8 @@ HRESULT STDMETHODCALLTYPE D3D10Device::CreateTexture2D(const D3D10_TEXTURE2D_DES
495497

496498
#if RESHADE_ADDON
497499
reshade::api::resource_desc api_desc = reshade::d3d10::convert_resource_desc(new_desc);
498-
RESHADE_ADDON_EVENT(create_resource, this, reshade::api::resource_type::texture_2d, &api_desc);
500+
const reshade::api::memory_usage mem_usage = reshade::d3d10::convert_memory_usage(new_desc.Usage);
501+
RESHADE_ADDON_EVENT(create_resource, this, reshade::api::resource_type::texture_2d, &api_desc, mem_usage);
499502
reshade::d3d10::convert_resource_desc(api_desc, new_desc);
500503
#endif
501504

@@ -535,7 +538,8 @@ HRESULT STDMETHODCALLTYPE D3D10Device::CreateTexture3D(const D3D10_TEXTURE3D_DES
535538

536539
#if RESHADE_ADDON
537540
reshade::api::resource_desc api_desc = reshade::d3d10::convert_resource_desc(new_desc);
538-
RESHADE_ADDON_EVENT(create_resource, this, reshade::api::resource_type::texture_3d, &api_desc);
541+
const reshade::api::memory_usage mem_usage = reshade::d3d10::convert_memory_usage(new_desc.Usage);
542+
RESHADE_ADDON_EVENT(create_resource, this, reshade::api::resource_type::texture_3d, &api_desc, mem_usage);
539543
reshade::d3d10::convert_resource_desc(api_desc, new_desc);
540544
#endif
541545

source/d3d10/render_d3d10.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,14 @@ bool reshade::d3d10::device_impl::check_resource_view_handle_valid(api::resource
6060
return view.handle != 0 && _views.has_object(reinterpret_cast<ID3D10View *>(view.handle));
6161
}
6262

63-
bool reshade::d3d10::device_impl::create_resource(api::resource_type type, const api::resource_desc &desc, api::resource_usage, api::resource_handle *out_resource)
63+
bool reshade::d3d10::device_impl::create_resource(api::resource_type type, const api::resource_desc &desc, api::memory_usage mem_usage, api::resource_usage, api::resource_handle *out_resource)
6464
{
6565
switch (type)
6666
{
6767
case api::resource_type::buffer:
6868
{
6969
D3D10_BUFFER_DESC internal_desc = {};
70+
convert_memory_usage(mem_usage, internal_desc.Usage, internal_desc.CPUAccessFlags);
7071
convert_resource_desc(desc, internal_desc);
7172

7273
if (com_ptr<ID3D10Buffer> resource;
@@ -81,6 +82,7 @@ bool reshade::d3d10::device_impl::create_resource(api::resource_type type, const
8182
case api::resource_type::texture_1d:
8283
{
8384
D3D10_TEXTURE1D_DESC internal_desc = {};
85+
convert_memory_usage(mem_usage, internal_desc.Usage, internal_desc.CPUAccessFlags);
8486
convert_resource_desc(desc, internal_desc);
8587

8688
if (com_ptr<ID3D10Texture1D> resource;
@@ -95,6 +97,7 @@ bool reshade::d3d10::device_impl::create_resource(api::resource_type type, const
9597
case api::resource_type::texture_2d:
9698
{
9799
D3D10_TEXTURE2D_DESC internal_desc = {};
100+
convert_memory_usage(mem_usage, internal_desc.Usage, internal_desc.CPUAccessFlags);
98101
convert_resource_desc(desc, internal_desc);
99102

100103
if (com_ptr<ID3D10Texture2D> resource;
@@ -109,6 +112,7 @@ bool reshade::d3d10::device_impl::create_resource(api::resource_type type, const
109112
case api::resource_type::texture_3d:
110113
{
111114
D3D10_TEXTURE3D_DESC internal_desc = {};
115+
convert_memory_usage(mem_usage, internal_desc.Usage, internal_desc.CPUAccessFlags);
112116
convert_resource_desc(desc, internal_desc);
113117

114118
if (com_ptr<ID3D10Texture3D> resource;

source/d3d10/render_d3d10.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ namespace reshade::d3d10
2525
bool check_resource_handle_valid(api::resource_handle resource) const final;
2626
bool check_resource_view_handle_valid(api::resource_view_handle view) const final;
2727

28-
bool create_resource(api::resource_type type, const api::resource_desc &desc, api::resource_usage initial_state, api::resource_handle *resource) final;
28+
bool create_resource(api::resource_type type, const api::resource_desc &desc, api::memory_usage mem_usage, api::resource_usage initial_state, api::resource_handle *resource) final;
2929
bool create_resource_view(api::resource_handle resource, api::resource_usage usage_type, const api::resource_view_desc &desc, api::resource_view_handle *view) final;
3030

3131
void destroy_resource(api::resource_handle resource) final;

source/d3d10/render_d3d10_utils.cpp

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,43 @@ static inline void convert_bind_flags_to_usage(const UINT bind_flags, resource_u
6262
usage |= resource_usage::constant_buffer;
6363
}
6464

65+
void reshade::d3d10::convert_memory_usage(memory_usage memory, D3D10_USAGE &usage, UINT &cpu_access_flags)
66+
{
67+
switch (memory)
68+
{
69+
default:
70+
case memory_usage::gpu_only:
71+
usage = D3D10_USAGE_DEFAULT;
72+
break;
73+
case memory_usage::cpu_to_gpu:
74+
usage = D3D10_USAGE_DYNAMIC;
75+
cpu_access_flags |= D3D10_CPU_ACCESS_WRITE;
76+
break;
77+
case memory_usage::gpu_to_cpu:
78+
usage = D3D10_USAGE_STAGING;
79+
cpu_access_flags |= D3D10_CPU_ACCESS_READ;
80+
break;
81+
case memory_usage::cpu_only:
82+
usage = D3D10_USAGE_STAGING;
83+
cpu_access_flags |= D3D10_CPU_ACCESS_READ | D3D10_CPU_ACCESS_WRITE;
84+
break;
85+
}
86+
}
87+
memory_usage reshade::d3d10::convert_memory_usage(D3D10_USAGE usage)
88+
{
89+
switch (usage)
90+
{
91+
default:
92+
case D3D10_USAGE_DEFAULT:
93+
case D3D10_USAGE_IMMUTABLE:
94+
return memory_usage::gpu_only;
95+
case D3D10_USAGE_DYNAMIC:
96+
return memory_usage::cpu_to_gpu;
97+
case D3D10_USAGE_STAGING:
98+
return memory_usage::gpu_to_cpu;
99+
}
100+
}
101+
65102
void reshade::d3d10::convert_resource_desc(const resource_desc &desc, D3D10_BUFFER_DESC &internal_desc)
66103
{
67104
assert(desc.size <= std::numeric_limits<UINT>::max());

source/d3d10/render_d3d10_utils.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55

66
namespace reshade::d3d10
77
{
8+
void convert_memory_usage(api::memory_usage memory, D3D10_USAGE &usage, UINT &cpu_access_flags);
9+
api::memory_usage convert_memory_usage(D3D10_USAGE usage);
10+
811
void convert_resource_desc(const api::resource_desc &desc, D3D10_BUFFER_DESC &internal_desc);
912
void convert_resource_desc(const api::resource_desc &desc, D3D10_TEXTURE1D_DESC &internal_desc);
1013
void convert_resource_desc(const api::resource_desc &desc, D3D10_TEXTURE2D_DESC &internal_desc);

source/d3d11/d3d11_device.cpp

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,8 @@ HRESULT STDMETHODCALLTYPE D3D11Device::CreateBuffer(const D3D11_BUFFER_DESC *pDe
124124

125125
#if RESHADE_ADDON
126126
reshade::api::resource_desc api_desc = reshade::d3d11::convert_resource_desc(new_desc);
127-
RESHADE_ADDON_EVENT(create_resource, this, reshade::api::resource_type::buffer, &api_desc);
127+
const reshade::api::memory_usage mem_usage = reshade::d3d11::convert_memory_usage(new_desc.Usage);
128+
RESHADE_ADDON_EVENT(create_resource, this, reshade::api::resource_type::buffer, &api_desc, mem_usage);
128129
reshade::d3d11::convert_resource_desc(api_desc, new_desc);
129130
#endif
130131

@@ -158,7 +159,8 @@ HRESULT STDMETHODCALLTYPE D3D11Device::CreateTexture1D(const D3D11_TEXTURE1D_DES
158159

159160
#if RESHADE_ADDON
160161
reshade::api::resource_desc api_desc = reshade::d3d11::convert_resource_desc(new_desc);
161-
RESHADE_ADDON_EVENT(create_resource, this, reshade::api::resource_type::texture_1d, &api_desc);
162+
const reshade::api::memory_usage mem_usage = reshade::d3d11::convert_memory_usage(new_desc.Usage);
163+
RESHADE_ADDON_EVENT(create_resource, this, reshade::api::resource_type::texture_1d, &api_desc, mem_usage);
162164
reshade::d3d11::convert_resource_desc(api_desc, new_desc);
163165
#endif
164166

@@ -195,7 +197,8 @@ HRESULT STDMETHODCALLTYPE D3D11Device::CreateTexture2D(const D3D11_TEXTURE2D_DES
195197

196198
#if RESHADE_ADDON
197199
reshade::api::resource_desc api_desc = reshade::d3d11::convert_resource_desc(new_desc);
198-
RESHADE_ADDON_EVENT(create_resource, this, reshade::api::resource_type::texture_2d, &api_desc);
200+
const reshade::api::memory_usage mem_usage = reshade::d3d11::convert_memory_usage(new_desc.Usage);
201+
RESHADE_ADDON_EVENT(create_resource, this, reshade::api::resource_type::texture_2d, &api_desc, mem_usage);
199202
reshade::d3d11::convert_resource_desc(api_desc, new_desc);
200203
#endif
201204

@@ -235,7 +238,8 @@ HRESULT STDMETHODCALLTYPE D3D11Device::CreateTexture3D(const D3D11_TEXTURE3D_DES
235238

236239
#if RESHADE_ADDON
237240
reshade::api::resource_desc api_desc = reshade::d3d11::convert_resource_desc(new_desc);
238-
RESHADE_ADDON_EVENT(create_resource, this, reshade::api::resource_type::texture_3d, &api_desc);
241+
const reshade::api::memory_usage mem_usage = reshade::d3d11::convert_memory_usage(new_desc.Usage);
242+
RESHADE_ADDON_EVENT(create_resource, this, reshade::api::resource_type::texture_3d, &api_desc, mem_usage);
239243
reshade::d3d11::convert_resource_desc(api_desc, new_desc);
240244
#endif
241245

@@ -650,7 +654,8 @@ HRESULT STDMETHODCALLTYPE D3D11Device::CreateTexture2D1(const D3D11_TEXTURE2D_DE
650654

651655
#if RESHADE_ADDON
652656
reshade::api::resource_desc api_desc = reshade::d3d11::convert_resource_desc(reinterpret_cast<D3D11_TEXTURE2D_DESC &>(new_desc)); // D3D11_TEXTURE2D_DESC1 is a superset of D3D11_TEXTURE2D_DESC
653-
RESHADE_ADDON_EVENT(create_resource, this, reshade::api::resource_type::texture_2d, &api_desc);
657+
const reshade::api::memory_usage mem_usage = reshade::d3d11::convert_memory_usage(new_desc.Usage);
658+
RESHADE_ADDON_EVENT(create_resource, this, reshade::api::resource_type::texture_2d, &api_desc, mem_usage);
654659
reshade::d3d11::convert_resource_desc(api_desc, reinterpret_cast<D3D11_TEXTURE2D_DESC &>(new_desc));
655660
#endif
656661

@@ -692,7 +697,8 @@ HRESULT STDMETHODCALLTYPE D3D11Device::CreateTexture3D1(const D3D11_TEXTURE3D_DE
692697

693698
#if RESHADE_ADDON
694699
reshade::api::resource_desc api_desc = reshade::d3d11::convert_resource_desc(reinterpret_cast<D3D11_TEXTURE3D_DESC &>(new_desc)); // D3D11_TEXTURE3D_DESC1 is a superset of D3D11_TEXTURE3D_DESC
695-
RESHADE_ADDON_EVENT(create_resource, this, reshade::api::resource_type::texture_3d, &api_desc);
700+
const reshade::api::memory_usage mem_usage = reshade::d3d11::convert_memory_usage(new_desc.Usage);
701+
RESHADE_ADDON_EVENT(create_resource, this, reshade::api::resource_type::texture_3d, &api_desc, mem_usage);
696702
reshade::d3d11::convert_resource_desc(api_desc, reinterpret_cast<D3D11_TEXTURE3D_DESC &>(new_desc));
697703
#endif
698704

source/d3d11/render_d3d11.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,14 @@ bool reshade::d3d11::device_impl::check_resource_view_handle_valid(api::resource
5858
return view.handle != 0 && _views.has_object(reinterpret_cast<ID3D11View *>(view.handle));
5959
}
6060

61-
bool reshade::d3d11::device_impl::create_resource(api::resource_type type, const api::resource_desc &desc, api::resource_usage, api::resource_handle *out_resource)
61+
bool reshade::d3d11::device_impl::create_resource(api::resource_type type, const api::resource_desc &desc, api::memory_usage mem_usage, api::resource_usage, api::resource_handle *out_resource)
6262
{
6363
switch (type)
6464
{
6565
case api::resource_type::buffer:
6666
{
6767
D3D11_BUFFER_DESC internal_desc = {};
68+
convert_memory_usage(mem_usage, internal_desc.Usage, internal_desc.CPUAccessFlags);
6869
convert_resource_desc(desc, internal_desc);
6970

7071
if (com_ptr<ID3D11Buffer> resource;
@@ -79,6 +80,7 @@ bool reshade::d3d11::device_impl::create_resource(api::resource_type type, const
7980
case api::resource_type::texture_1d:
8081
{
8182
D3D11_TEXTURE1D_DESC internal_desc = {};
83+
convert_memory_usage(mem_usage, internal_desc.Usage, internal_desc.CPUAccessFlags);
8284
convert_resource_desc(desc, internal_desc);
8385

8486
if (com_ptr<ID3D11Texture1D> resource;
@@ -93,6 +95,7 @@ bool reshade::d3d11::device_impl::create_resource(api::resource_type type, const
9395
case api::resource_type::texture_2d:
9496
{
9597
D3D11_TEXTURE2D_DESC internal_desc = {};
98+
convert_memory_usage(mem_usage, internal_desc.Usage, internal_desc.CPUAccessFlags);
9699
convert_resource_desc(desc, internal_desc);
97100

98101
if (com_ptr<ID3D11Texture2D> resource;
@@ -107,6 +110,7 @@ bool reshade::d3d11::device_impl::create_resource(api::resource_type type, const
107110
case api::resource_type::texture_3d:
108111
{
109112
D3D11_TEXTURE3D_DESC internal_desc = {};
113+
convert_memory_usage(mem_usage, internal_desc.Usage, internal_desc.CPUAccessFlags);
110114
convert_resource_desc(desc, internal_desc);
111115

112116
if (com_ptr<ID3D11Texture3D> resource;

source/d3d11/render_d3d11.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ namespace reshade::d3d11
2525
bool check_resource_handle_valid(api::resource_handle resource) const final;
2626
bool check_resource_view_handle_valid(api::resource_view_handle view) const final;
2727

28-
bool create_resource(api::resource_type type, const api::resource_desc &desc, api::resource_usage initial_state, api::resource_handle *out_resource) final;
28+
bool create_resource(api::resource_type type, const api::resource_desc &desc, api::memory_usage mem_usage, api::resource_usage initial_state, api::resource_handle *out_resource) final;
2929
bool create_resource_view(api::resource_handle resource, api::resource_usage usage_type, const api::resource_view_desc &desc, api::resource_view_handle *out_view) final;
3030

3131
void destroy_resource(api::resource_handle resource) final;

source/d3d11/render_d3d11_utils.cpp

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,43 @@ static inline void convert_bind_flags_to_usage(const UINT bind_flags, resource_u
6767
usage |= resource_usage::constant_buffer;
6868
}
6969

70+
void reshade::d3d11::convert_memory_usage(memory_usage memory, D3D11_USAGE &usage, UINT &cpu_access_flags)
71+
{
72+
switch (memory)
73+
{
74+
default:
75+
case memory_usage::gpu_only:
76+
usage = D3D11_USAGE_DEFAULT;
77+
break;
78+
case memory_usage::cpu_to_gpu:
79+
usage = D3D11_USAGE_DYNAMIC;
80+
cpu_access_flags |= D3D11_CPU_ACCESS_WRITE;
81+
break;
82+
case memory_usage::gpu_to_cpu:
83+
usage = D3D11_USAGE_STAGING;
84+
cpu_access_flags |= D3D11_CPU_ACCESS_READ;
85+
break;
86+
case memory_usage::cpu_only:
87+
usage = D3D11_USAGE_STAGING;
88+
cpu_access_flags |= D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE;
89+
break;
90+
}
91+
}
92+
memory_usage reshade::d3d11::convert_memory_usage(D3D11_USAGE usage)
93+
{
94+
switch (usage)
95+
{
96+
default:
97+
case D3D11_USAGE_DEFAULT:
98+
case D3D11_USAGE_IMMUTABLE:
99+
return memory_usage::gpu_only;
100+
case D3D11_USAGE_DYNAMIC:
101+
return memory_usage::cpu_to_gpu;
102+
case D3D11_USAGE_STAGING:
103+
return memory_usage::gpu_to_cpu;
104+
}
105+
}
106+
70107
void reshade::d3d11::convert_resource_desc(const resource_desc &desc, D3D11_BUFFER_DESC &internal_desc)
71108
{
72109
assert(desc.size <= std::numeric_limits<UINT>::max());

source/d3d11/render_d3d11_utils.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55

66
namespace reshade::d3d11
77
{
8+
void convert_memory_usage(api::memory_usage memory, D3D11_USAGE &usage, UINT &cpu_access_flags);
9+
api::memory_usage convert_memory_usage(D3D11_USAGE usage);
10+
811
void convert_resource_desc(const api::resource_desc &desc, D3D11_BUFFER_DESC &internal_desc);
912
void convert_resource_desc(const api::resource_desc &desc, D3D11_TEXTURE1D_DESC &internal_desc);
1013
void convert_resource_desc(const api::resource_desc &desc, D3D11_TEXTURE2D_DESC &internal_desc);

0 commit comments

Comments
 (0)