mirror of
https://github.com/EduApps-CDG/OpenDX
synced 2024-12-30 09:45:37 +01:00
[d3d11] Fix behaviour with a viewport count of zero
This commit is contained in:
parent
5ff9c33855
commit
6a76577f15
@ -2827,7 +2827,7 @@ namespace dxvk {
|
|||||||
m_state.rs.scissors[i] = pRects[i];
|
m_state.rs.scissors[i] = pRects[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_state.rs.state != nullptr && dirty) {
|
if (m_state.rs.state != nullptr && dirty) {
|
||||||
D3D11_RASTERIZER_DESC rsDesc;
|
D3D11_RASTERIZER_DESC rsDesc;
|
||||||
m_state.rs.state->GetDesc(&rsDesc);
|
m_state.rs.state->GetDesc(&rsDesc);
|
||||||
@ -3096,14 +3096,19 @@ namespace dxvk {
|
|||||||
|
|
||||||
|
|
||||||
void D3D11DeviceContext::ApplyViewportState() {
|
void D3D11DeviceContext::ApplyViewportState() {
|
||||||
// We cannot set less than one viewport in Vulkan, and
|
|
||||||
// rendering with no active viewport is illegal anyway.
|
|
||||||
if (m_state.rs.numViewports == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
std::array<VkViewport, D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE> viewports;
|
std::array<VkViewport, D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE> viewports;
|
||||||
std::array<VkRect2D, D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE> scissors;
|
std::array<VkRect2D, D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE> scissors;
|
||||||
|
|
||||||
|
// The backend can't handle a viewport count of zero,
|
||||||
|
// so we should at least specify one empty viewport
|
||||||
|
uint32_t viewportCount = m_state.rs.numViewports;
|
||||||
|
|
||||||
|
if (unlikely(!viewportCount)) {
|
||||||
|
viewportCount = 1;
|
||||||
|
viewports[0] = VkViewport();
|
||||||
|
scissors [0] = VkRect2D();
|
||||||
|
}
|
||||||
|
|
||||||
// D3D11's coordinate system has its origin in the bottom left,
|
// D3D11's coordinate system has its origin in the bottom left,
|
||||||
// but the viewport coordinates are aligned to the top-left
|
// but the viewport coordinates are aligned to the top-left
|
||||||
// corner so we can get away with flipping the viewport.
|
// corner so we can get away with flipping the viewport.
|
||||||
@ -3159,7 +3164,7 @@ namespace dxvk {
|
|||||||
}
|
}
|
||||||
|
|
||||||
EmitCs([
|
EmitCs([
|
||||||
cViewportCount = m_state.rs.numViewports,
|
cViewportCount = viewportCount,
|
||||||
cViewports = viewports,
|
cViewports = viewports,
|
||||||
cScissors = scissors
|
cScissors = scissors
|
||||||
] (DxvkContext* ctx) {
|
] (DxvkContext* ctx) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user