| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include "GrVkGpu.h" | 8 #include "GrVkGpu.h" |
| 9 | 9 |
| 10 #include "GrContextOptions.h" | 10 #include "GrContextOptions.h" |
| (...skipping 1767 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1778 transferBuffer->unref(); | 1778 transferBuffer->unref(); |
| 1779 return true; | 1779 return true; |
| 1780 } | 1780 } |
| 1781 | 1781 |
| 1782 // The RenderArea bounds we pass into BeginRenderPass must have a start x value
that is a multiple | 1782 // The RenderArea bounds we pass into BeginRenderPass must have a start x value
that is a multiple |
| 1783 // of the granularity. The width must also be a multiple of the granularity or e
aqual to the width | 1783 // of the granularity. The width must also be a multiple of the granularity or e
aqual to the width |
| 1784 // the the entire attachment. Similar requirements for the y and height componen
ts. | 1784 // the the entire attachment. Similar requirements for the y and height componen
ts. |
| 1785 void adjust_bounds_to_granularity(SkIRect* dstBounds, const SkIRect& srcBounds, | 1785 void adjust_bounds_to_granularity(SkIRect* dstBounds, const SkIRect& srcBounds, |
| 1786 const VkExtent2D& granularity, int maxWidth, i
nt maxHeight) { | 1786 const VkExtent2D& granularity, int maxWidth, i
nt maxHeight) { |
| 1787 // Adjust Width | 1787 // Adjust Width |
| 1788 // Start with the right side of rect so we know if we end up going pass the
maxWidth. | 1788 if ((0 != granularity.width && 1 != granularity.width)) { |
| 1789 int rightAdj = srcBounds.fRight % granularity.width; | 1789 // Start with the right side of rect so we know if we end up going pass
the maxWidth. |
| 1790 if (rightAdj != 0) { | 1790 int rightAdj = srcBounds.fRight % granularity.width; |
| 1791 rightAdj = granularity.width - rightAdj; | 1791 if (rightAdj != 0) { |
| 1792 } | 1792 rightAdj = granularity.width - rightAdj; |
| 1793 dstBounds->fRight = srcBounds.fRight + rightAdj; | 1793 } |
| 1794 if (dstBounds->fRight > maxWidth) { | 1794 dstBounds->fRight = srcBounds.fRight + rightAdj; |
| 1795 dstBounds->fRight = maxWidth; | 1795 if (dstBounds->fRight > maxWidth) { |
| 1796 dstBounds->fLeft = 0; | 1796 dstBounds->fRight = maxWidth; |
| 1797 dstBounds->fLeft = 0; |
| 1798 } else { |
| 1799 dstBounds->fLeft = srcBounds.fLeft - srcBounds.fLeft % granularity.w
idth; |
| 1800 } |
| 1797 } else { | 1801 } else { |
| 1798 dstBounds->fLeft = srcBounds.fLeft - srcBounds.fLeft % granularity.width; | 1802 dstBounds->fLeft = srcBounds.fLeft; |
| 1803 dstBounds->fRight = srcBounds.fRight; |
| 1799 } | 1804 } |
| 1800 | 1805 |
| 1801 // Adjust height | 1806 // Adjust height |
| 1802 // Start with the bottom side of rect so we know if we end up going pass the
maxHeight. | 1807 if ((0 != granularity.height && 1 != granularity.height)) { |
| 1803 int bottomAdj = srcBounds.fBottom % granularity.height; | 1808 // Start with the bottom side of rect so we know if we end up going pass
the maxHeight. |
| 1804 if (bottomAdj != 0) { | 1809 int bottomAdj = srcBounds.fBottom % granularity.height; |
| 1805 bottomAdj = granularity.height - bottomAdj; | 1810 if (bottomAdj != 0) { |
| 1806 } | 1811 bottomAdj = granularity.height - bottomAdj; |
| 1807 dstBounds->fBottom = srcBounds.fBottom + bottomAdj; | 1812 } |
| 1808 if (dstBounds->fBottom > maxHeight) { | 1813 dstBounds->fBottom = srcBounds.fBottom + bottomAdj; |
| 1809 dstBounds->fBottom = maxHeight; | 1814 if (dstBounds->fBottom > maxHeight) { |
| 1810 dstBounds->fTop = 0; | 1815 dstBounds->fBottom = maxHeight; |
| 1816 dstBounds->fTop = 0; |
| 1817 } else { |
| 1818 dstBounds->fTop = srcBounds.fTop - srcBounds.fTop % granularity.heig
ht; |
| 1819 } |
| 1811 } else { | 1820 } else { |
| 1812 dstBounds->fTop = srcBounds.fTop - srcBounds.fTop % granularity.height; | 1821 dstBounds->fTop = srcBounds.fTop; |
| 1822 dstBounds->fBottom = srcBounds.fBottom; |
| 1813 } | 1823 } |
| 1814 } | 1824 } |
| 1815 | 1825 |
| 1816 void GrVkGpu::submitSecondaryCommandBuffer(GrVkSecondaryCommandBuffer* buffer, | 1826 void GrVkGpu::submitSecondaryCommandBuffer(GrVkSecondaryCommandBuffer* buffer, |
| 1817 const GrVkRenderPass* renderPass, | 1827 const GrVkRenderPass* renderPass, |
| 1818 const VkClearValue* colorClear, | 1828 const VkClearValue* colorClear, |
| 1819 GrVkRenderTarget* target, | 1829 GrVkRenderTarget* target, |
| 1820 const SkIRect& bounds) { | 1830 const SkIRect& bounds) { |
| 1821 const SkIRect* pBounds = &bounds; | 1831 const SkIRect* pBounds = &bounds; |
| 1822 SkIRect flippedBounds; | 1832 SkIRect flippedBounds; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1841 // Currently it is fine for us to always pass in 1 for the clear count even
if no attachment | 1851 // Currently it is fine for us to always pass in 1 for the clear count even
if no attachment |
| 1842 // uses it. In the current state, we also only use the LOAD_OP_CLEAR for the
color attachment | 1852 // uses it. In the current state, we also only use the LOAD_OP_CLEAR for the
color attachment |
| 1843 // which is always at the first attachment. | 1853 // which is always at the first attachment. |
| 1844 fCurrentCmdBuffer->beginRenderPass(this, renderPass, 1, colorClear, *target,
*pBounds, true); | 1854 fCurrentCmdBuffer->beginRenderPass(this, renderPass, 1, colorClear, *target,
*pBounds, true); |
| 1845 fCurrentCmdBuffer->executeCommands(this, buffer); | 1855 fCurrentCmdBuffer->executeCommands(this, buffer); |
| 1846 fCurrentCmdBuffer->endRenderPass(this); | 1856 fCurrentCmdBuffer->endRenderPass(this); |
| 1847 | 1857 |
| 1848 this->didWriteToSurface(target, &bounds); | 1858 this->didWriteToSurface(target, &bounds); |
| 1849 } | 1859 } |
| 1850 | 1860 |
| OLD | NEW |