dx12, vulkan: viewport and scissor count fixes

This commit is contained in:
Turánszki János
2021-10-12 16:42:54 +02:00
parent 9a970cde4a
commit 52ebc197f6
3 changed files with 17 additions and 13 deletions
+9 -8
View File
@@ -5366,15 +5366,15 @@ using namespace DX12_Internal;
if (queue == QUEUE_GRAPHICS)
{
D3D12_RECT pRects[8];
for (uint32_t i = 0; i < 8; ++i)
D3D12_RECT pRects[D3D12_VIEWPORT_AND_SCISSORRECT_MAX_INDEX + 1];
for (uint32_t i = 0; i < arraysize(pRects); ++i)
{
pRects[i].bottom = D3D12_VIEWPORT_BOUNDS_MAX;
pRects[i].left = D3D12_VIEWPORT_BOUNDS_MIN;
pRects[i].right = D3D12_VIEWPORT_BOUNDS_MAX;
pRects[i].top = D3D12_VIEWPORT_BOUNDS_MIN;
}
GetCommandList(cmd)->RSSetScissorRects(8, pRects);
GetCommandList(cmd)->RSSetScissorRects(arraysize(pRects), pRects);
}
prev_pt[cmd] = D3D_PRIMITIVE_TOPOLOGY_UNDEFINED;
@@ -5700,9 +5700,10 @@ using namespace DX12_Internal;
void GraphicsDevice_DX12::BindScissorRects(uint32_t numRects, const Rect* rects, CommandList cmd)
{
assert(rects != nullptr);
assert(numRects <= D3D12_VIEWPORT_AND_SCISSORRECT_MAX_INDEX);
D3D12_RECT pRects[D3D12_VIEWPORT_AND_SCISSORRECT_MAX_INDEX];
for (uint32_t i = 0; i < numRects; ++i) {
D3D12_RECT pRects[D3D12_VIEWPORT_AND_SCISSORRECT_MAX_INDEX + 1];
assert(numRects < arraysize(pRects));
for (uint32_t i = 0; i < numRects; ++i)
{
pRects[i].bottom = (LONG)rects[i].bottom;
pRects[i].left = (LONG)rects[i].left;
pRects[i].right = (LONG)rects[i].right;
@@ -5713,8 +5714,8 @@ using namespace DX12_Internal;
void GraphicsDevice_DX12::BindViewports(uint32_t NumViewports, const Viewport* pViewports, CommandList cmd)
{
assert(pViewports != nullptr);
assert(NumViewports <= D3D12_VIEWPORT_AND_SCISSORRECT_MAX_INDEX);
D3D12_VIEWPORT d3dViewPorts[D3D12_VIEWPORT_AND_SCISSORRECT_MAX_INDEX];
D3D12_VIEWPORT d3dViewPorts[D3D12_VIEWPORT_AND_SCISSORRECT_MAX_INDEX + 1];
assert(NumViewports < arraysize(d3dViewPorts));
for (uint32_t i = 0; i < NumViewports; ++i)
{
d3dViewPorts[i].TopLeftX = pViewports[i].TopLeftX;
+7 -4
View File
@@ -5794,7 +5794,7 @@ using namespace Vulkan_Internal;
if (queue == QUEUE_GRAPHICS)
{
VkRect2D scissors[8];
VkRect2D scissors[16];
for (int i = 0; i < arraysize(scissors); ++i)
{
scissors[i].offset.x = 0;
@@ -6099,9 +6099,11 @@ using namespace Vulkan_Internal;
void GraphicsDevice_Vulkan::BindScissorRects(uint32_t numRects, const Rect* rects, CommandList cmd)
{
assert(rects != nullptr);
assert(numRects <= 16);
VkRect2D scissors[16];
for(uint32_t i = 0; i < numRects; ++i) {
assert(numRects < arraysize(scissors));
assert(numRects < properties2.properties.limits.maxViewports);
for(uint32_t i = 0; i < numRects; ++i)
{
scissors[i].extent.width = abs(rects[i].right - rects[i].left);
scissors[i].extent.height = abs(rects[i].top - rects[i].bottom);
scissors[i].offset.x = std::max(0, rects[i].left);
@@ -6112,8 +6114,9 @@ using namespace Vulkan_Internal;
void GraphicsDevice_Vulkan::BindViewports(uint32_t NumViewports, const Viewport* pViewports, CommandList cmd)
{
assert(pViewports != nullptr);
assert(NumViewports <= 16);
VkViewport vp[16];
assert(NumViewports < arraysize(vp));
assert(NumViewports < properties2.properties.limits.maxViewports);
for (uint32_t i = 0; i < NumViewports; ++i)
{
vp[i].x = pViewports[i].TopLeftX;
+1 -1
View File
@@ -9,7 +9,7 @@ namespace wiVersion
// minor features, major updates, breaking compatibility changes
const int minor = 58;
// minor bug fixes, alterations, refactors, updates
const int revision = 9;
const int revision = 10;
const std::string version_string = std::to_string(major) + "." + std::to_string(minor) + "." + std::to_string(revision);