diff --git a/WickedEngine/wiGraphicsDevice_DX12.cpp b/WickedEngine/wiGraphicsDevice_DX12.cpp index aa2aca4ec..ba400c1e0 100644 --- a/WickedEngine/wiGraphicsDevice_DX12.cpp +++ b/WickedEngine/wiGraphicsDevice_DX12.cpp @@ -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; diff --git a/WickedEngine/wiGraphicsDevice_Vulkan.cpp b/WickedEngine/wiGraphicsDevice_Vulkan.cpp index 6c24e3ccc..eacb3fea1 100644 --- a/WickedEngine/wiGraphicsDevice_Vulkan.cpp +++ b/WickedEngine/wiGraphicsDevice_Vulkan.cpp @@ -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; diff --git a/WickedEngine/wiVersion.cpp b/WickedEngine/wiVersion.cpp index c4635dfe6..0d69e6b65 100644 --- a/WickedEngine/wiVersion.cpp +++ b/WickedEngine/wiVersion.cpp @@ -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);