mirror of
https://github.com/EduApps-CDG/OpenDX
synced 2024-12-30 09:45:37 +01:00
[d3d11] Fix RSGetViewports and RSGetScissorRects
If the output array is non-null, these functons always return the number of valid viewports or scissors actually written to the array. Fixes a wine test failure.
This commit is contained in:
parent
d118d35820
commit
9c6d3a2bf6
@ -2974,8 +2974,11 @@ namespace dxvk {
|
|||||||
UINT* pNumViewports,
|
UINT* pNumViewports,
|
||||||
D3D11_VIEWPORT* pViewports) {
|
D3D11_VIEWPORT* pViewports) {
|
||||||
D3D10DeviceLock lock = LockContext();
|
D3D10DeviceLock lock = LockContext();
|
||||||
|
uint32_t numWritten = m_state.rs.numViewports;
|
||||||
if (pViewports != nullptr) {
|
|
||||||
|
if (pViewports) {
|
||||||
|
numWritten = std::min(numWritten, *pNumViewports);
|
||||||
|
|
||||||
for (uint32_t i = 0; i < *pNumViewports; i++) {
|
for (uint32_t i = 0; i < *pNumViewports; i++) {
|
||||||
if (i < m_state.rs.numViewports) {
|
if (i < m_state.rs.numViewports) {
|
||||||
pViewports[i] = m_state.rs.viewports[i];
|
pViewports[i] = m_state.rs.viewports[i];
|
||||||
@ -2988,9 +2991,9 @@ namespace dxvk {
|
|||||||
pViewports[i].MaxDepth = 0.0f;
|
pViewports[i].MaxDepth = 0.0f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
*pNumViewports = m_state.rs.numViewports;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*pNumViewports = numWritten;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2998,8 +3001,11 @@ namespace dxvk {
|
|||||||
UINT* pNumRects,
|
UINT* pNumRects,
|
||||||
D3D11_RECT* pRects) {
|
D3D11_RECT* pRects) {
|
||||||
D3D10DeviceLock lock = LockContext();
|
D3D10DeviceLock lock = LockContext();
|
||||||
|
uint32_t numWritten = m_state.rs.numScissors;
|
||||||
|
|
||||||
if (pRects != nullptr) {
|
if (pRects) {
|
||||||
|
numWritten = std::min(numWritten, *pNumRects);
|
||||||
|
|
||||||
for (uint32_t i = 0; i < *pNumRects; i++) {
|
for (uint32_t i = 0; i < *pNumRects; i++) {
|
||||||
if (i < m_state.rs.numScissors) {
|
if (i < m_state.rs.numScissors) {
|
||||||
pRects[i] = m_state.rs.scissors[i];
|
pRects[i] = m_state.rs.scissors[i];
|
||||||
@ -3010,9 +3016,9 @@ namespace dxvk {
|
|||||||
pRects[i].bottom = 0;
|
pRects[i].bottom = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
*pNumRects = m_state.rs.numScissors;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*pNumRects = m_state.rs.numScissors;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user