Size: a a a

pro.graphon (and gamedev)

2020 November 28

A

Andrei Konshyn in pro.graphon (and gamedev)
D3D11_BOX dstBox;
dstBox.front = 0;
dstBox.back = 1;
dstBox.top = 0;
dstBox.bottom = 1;
dstBox.left = 0;
dstBox.right = 100;

GetDeviceContext()->UpdateSubresource1(dd.m_ConstantBuffer, 0, &dstBox, &vsbuf[0], 0, 0, D3D11_COPY_DISCARD);
UINT cf = 0;
GetDeviceContext()->VSSetConstantBuffers1(dd.sc_customVSConstantBufferReg, 1, &dd.m_ConstantBuffer, &cf, &cbSize);

👆 не работает
———————————————
👇 работает

D3D11_MAPPED_SUBRESOURCE mapped;
GetDeviceContext()->Map(dd.m_ConstantBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mapped);
char *p = static_cast<char*>(mapped.pData);
CopyVectors128(&p[dd.m_VSCustomFirst * 16], &vsbuf[VSC_Custom_First * 4], cbSize);
GetDeviceContext()->Unmap(dd.m_ConstantBuffer, 0);

UINT cf = 0;
GetDeviceContext()->VSSetConstantBuffers1(dd.sc_customVSConstantBufferReg, 1, &dd.m_ConstantBuffer, &cf, &cbSize);
источник

TG

Timur Gagiev in pro.graphon (and gamedev)
Columbus Utrigas
@xproger ты когда капчи игр делаешь в рендердоке, у тебя Global Hook или пиратская версия? Или прямо через лаунчер капчи делаешь?
хук
источник

TG

Timur Gagiev in pro.graphon (and gamedev)
Andrei Konshyn
D3D11_BOX dstBox;
dstBox.front = 0;
dstBox.back = 1;
dstBox.top = 0;
dstBox.bottom = 1;
dstBox.left = 0;
dstBox.right = 100;

GetDeviceContext()->UpdateSubresource1(dd.m_ConstantBuffer, 0, &dstBox, &vsbuf[0], 0, 0, D3D11_COPY_DISCARD);
UINT cf = 0;
GetDeviceContext()->VSSetConstantBuffers1(dd.sc_customVSConstantBufferReg, 1, &dd.m_ConstantBuffer, &cf, &cbSize);

👆 не работает
———————————————
👇 работает

D3D11_MAPPED_SUBRESOURCE mapped;
GetDeviceContext()->Map(dd.m_ConstantBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mapped);
char *p = static_cast<char*>(mapped.pData);
CopyVectors128(&p[dd.m_VSCustomFirst * 16], &vsbuf[VSC_Custom_First * 4], cbSize);
GetDeviceContext()->Unmap(dd.m_ConstantBuffer, 0);

UINT cf = 0;
GetDeviceContext()->VSSetConstantBuffers1(dd.sc_customVSConstantBufferReg, 1, &dd.m_ConstantBuffer, &cf, &cbSize);
включи debug device
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
Andrei Konshyn
D3D11_BOX dstBox;
dstBox.front = 0;
dstBox.back = 1;
dstBox.top = 0;
dstBox.bottom = 1;
dstBox.left = 0;
dstBox.right = 100;

GetDeviceContext()->UpdateSubresource1(dd.m_ConstantBuffer, 0, &dstBox, &vsbuf[0], 0, 0, D3D11_COPY_DISCARD);
UINT cf = 0;
GetDeviceContext()->VSSetConstantBuffers1(dd.sc_customVSConstantBufferReg, 1, &dd.m_ConstantBuffer, &cf, &cbSize);

👆 не работает
———————————————
👇 работает

D3D11_MAPPED_SUBRESOURCE mapped;
GetDeviceContext()->Map(dd.m_ConstantBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mapped);
char *p = static_cast<char*>(mapped.pData);
CopyVectors128(&p[dd.m_VSCustomFirst * 16], &vsbuf[VSC_Custom_First * 4], cbSize);
GetDeviceContext()->Unmap(dd.m_ConstantBuffer, 0);

UINT cf = 0;
GetDeviceContext()->VSSetConstantBuffers1(dd.sc_customVSConstantBufferReg, 1, &dd.m_ConstantBuffer, &cf, &cbSize);
Размер какой-то странный в первом случае, а во втором есть смещения, или всё правильно?
источник

A

Andrei Konshyn in pro.graphon (and gamedev)
Timur Gagiev
включи debug device
вот как раз занимаюсь
источник

A

Andrei Konshyn in pro.graphon (and gamedev)
Vitaliy ◀️TriΔng3l▶️ Kuzmin
Размер какой-то странный в первом случае, а во втором есть смещения, или всё правильно?
на смещения не смотри, так как форматируются куски независимо
источник

A

Andrei Konshyn in pro.graphon (and gamedev)
с map я сделал так, тчобы взять весь буфер, обновить только часть, а потом через VSSetConstantBuffers1 загнать эту часть в шейдер
источник

A

Andrei Konshyn in pro.graphon (and gamedev)
с одним и тем же смещением не работает updateresources1
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
Andrei Konshyn
D3D11_BOX dstBox;
dstBox.front = 0;
dstBox.back = 1;
dstBox.top = 0;
dstBox.bottom = 1;
dstBox.left = 0;
dstBox.right = 100;

GetDeviceContext()->UpdateSubresource1(dd.m_ConstantBuffer, 0, &dstBox, &vsbuf[0], 0, 0, D3D11_COPY_DISCARD);
UINT cf = 0;
GetDeviceContext()->VSSetConstantBuffers1(dd.sc_customVSConstantBufferReg, 1, &dd.m_ConstantBuffer, &cf, &cbSize);

👆 не работает
———————————————
👇 работает

D3D11_MAPPED_SUBRESOURCE mapped;
GetDeviceContext()->Map(dd.m_ConstantBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mapped);
char *p = static_cast<char*>(mapped.pData);
CopyVectors128(&p[dd.m_VSCustomFirst * 16], &vsbuf[VSC_Custom_First * 4], cbSize);
GetDeviceContext()->Unmap(dd.m_ConstantBuffer, 0);

UINT cf = 0;
GetDeviceContext()->VSSetConstantBuffers1(dd.sc_customVSConstantBufferReg, 1, &dd.m_ConstantBuffer, &cf, &cbSize);
https://docs.microsoft.com/en-us/windows/win32/api/d3d11_1/nf-d3d11_1-id3d11devicecontext1-updatesubresource1
If you call UpdateSubresource1 to update a constant buffer, pass any region, and the driver has not been implemented to Windows 8, the runtime drops the call (except feature level 9.1, 9.2, and 9.3 where the runtime emulates support). The runtime also drops the call if you update a constant buffer with a partial region whose extent is not aligned to 16-byte granularity (16 bytes being a full constant).
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
Конкретно на драйверах под Windows 7 ещё pDstBox должен быть NULL, можно обновлять только весь буфер целиком
источник

A

Andrei Konshyn in pro.graphon (and gamedev)
эт я в курсе, у меня win10
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
Andrei Konshyn
эт я в курсе, у меня win10
Но ты заливаешь 6.25 векторов, а не 6 и не 7 :)
источник

A

Andrei Konshyn in pro.graphon (and gamedev)
Vitaliy ◀️TriΔng3l▶️ Kuzmin
Но ты заливаешь 6.25 векторов, а не 6 и не 7 :)
а, ну тут косяк в примере, раньше было норм:)
источник

A

Andrei Konshyn in pro.graphon (and gamedev)
вот ругается:
D3D11 ERROR: ID3D11DeviceContext::UpdateSubresource1: Can only invoke UpdateSubresource when the destination Resource was created with D3D11_USAGE_DEFAULT and is not a multisampled Resource. The destination Resource has (1) samples. [ RESOURCE_MANIPULATION ERROR #289: UPDATESUBRESOURCE_INVALIDDESTINATIONSTATE]
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
Andrei Konshyn
вот ругается:
D3D11 ERROR: ID3D11DeviceContext::UpdateSubresource1: Can only invoke UpdateSubresource when the destination Resource was created with D3D11_USAGE_DEFAULT and is not a multisampled Resource. The destination Resource has (1) samples. [ RESOURCE_MANIPULATION ERROR #289: UPDATESUBRESOURCE_INVALIDDESTINATIONSTATE]
А usage какое? С dynamic низя
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
что, кстати, странно o_O в чём отличие от Map/memcpy/Unmap в таком случае, я не понимаю
источник

A

Andrei Konshyn in pro.graphon (and gamedev)
ну это я из ошибки понял, а вот почему нельзя - не понял О_О
источник

A

Andrei Konshyn in pro.graphon (and gamedev)
а как тогда константный буфер создавать?
источник

TG

Timur Gagiev in pro.graphon (and gamedev)
Andrei Konshyn
а как тогда константный буфер создавать?
а что мешает?
источник

A

Andrei Konshyn in pro.graphon (and gamedev)
Timur Gagiev
а что мешает?
если его создать с default, то updatesubresources1 будет работать?
источник