Skip to content

Commit c8a395c

Browse files
committed
Fix D3D9 push constant conversion
1 parent 8f56b31 commit c8a395c

File tree

1 file changed

+30
-1
lines changed

1 file changed

+30
-1
lines changed

source/d3d9/d3d9_impl_command_list.cpp

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -249,8 +249,37 @@ void reshade::d3d9::device_impl::bind_scissor_rects(uint32_t first, uint32_t cou
249249
_orig->SetScissorRect(reinterpret_cast<const RECT *>(rects));
250250
}
251251

252-
void reshade::d3d9::device_impl::push_constants(api::shader_stage stages, api::pipeline_layout, uint32_t, uint32_t first, uint32_t count, const void *values)
252+
void reshade::d3d9::device_impl::push_constants(api::shader_stage stages, api::pipeline_layout layout, uint32_t layout_param, uint32_t first, uint32_t count, const void *values)
253253
{
254+
if (layout.handle == 0 || reinterpret_cast<pipeline_layout_impl *>(layout.handle)->ranges[layout_param].binding == UINT32_MAX)
255+
{
256+
switch (layout_param)
257+
{
258+
case 2:
259+
assert(stages == api::shader_stage::vertex);
260+
break;
261+
case 3:
262+
assert(stages == api::shader_stage::vertex);
263+
_orig->SetVertexShaderConstantI(first / 4, static_cast<const int *>(values), count / 4);
264+
return;
265+
case 4:
266+
assert(stages == api::shader_stage::vertex);
267+
_orig->SetVertexShaderConstantB(first, static_cast<const BOOL *>(values), count);
268+
return;
269+
case 5:
270+
assert(stages == api::shader_stage::pixel);
271+
break;
272+
case 6:
273+
assert(stages == api::shader_stage::pixel);
274+
_orig->SetPixelShaderConstantI(first / 4, static_cast<const int *>(values), count / 4);
275+
return;
276+
case 7:
277+
assert(stages == api::shader_stage::pixel);
278+
_orig->SetPixelShaderConstantB(first, static_cast<const BOOL *>(values), count);
279+
return;
280+
}
281+
}
282+
254283
assert((first % 4) == 0 && (count % 4) == 0);
255284

256285
first /= 4;

0 commit comments

Comments
 (0)