| 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 522 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 533 | 533 |
| 534 VkFormat pixelFormat; | 534 VkFormat pixelFormat; |
| 535 if (!GrPixelConfigToVkFormat(desc.fConfig, &pixelFormat)) { | 535 if (!GrPixelConfigToVkFormat(desc.fConfig, &pixelFormat)) { |
| 536 return nullptr; | 536 return nullptr; |
| 537 } | 537 } |
| 538 | 538 |
| 539 if (!fVkCaps->isConfigTexturable(desc.fConfig)) { | 539 if (!fVkCaps->isConfigTexturable(desc.fConfig)) { |
| 540 return nullptr; | 540 return nullptr; |
| 541 } | 541 } |
| 542 | 542 |
| 543 if (renderTarget && !fVkCaps->isConfigRenderable(desc.fConfig, false)) { |
| 544 return nullptr; |
| 545 } |
| 546 |
| 543 bool linearTiling = false; | 547 bool linearTiling = false; |
| 544 if (SkToBool(desc.fFlags & kZeroCopy_GrSurfaceFlag)) { | 548 if (SkToBool(desc.fFlags & kZeroCopy_GrSurfaceFlag)) { |
| 545 // we can't have a linear texture with a mipmap | 549 // we can't have a linear texture with a mipmap |
| 546 if (texels.count() > 1) { | 550 if (texels.count() > 1) { |
| 547 SkDebugf("Trying to create linear tiled texture with mipmap"); | 551 SkDebugf("Trying to create linear tiled texture with mipmap"); |
| 548 return nullptr; | 552 return nullptr; |
| 549 } | 553 } |
| 550 if (fVkCaps->isConfigTexurableLinearly(desc.fConfig) && | 554 if (fVkCaps->isConfigTexurableLinearly(desc.fConfig) && |
| 551 (!renderTarget || fVkCaps->isConfigRenderableLinearly(desc.fConfig,
false))) { | 555 (!renderTarget || fVkCaps->isConfigRenderableLinearly(desc.fConfig,
false))) { |
| 552 linearTiling = true; | 556 linearTiling = true; |
| (...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 835 height, | 839 height, |
| 836 samples, | 840 samples, |
| 837 sFmt)); | 841 sFmt)); |
| 838 fStats.incStencilAttachmentCreates(); | 842 fStats.incStencilAttachmentCreates(); |
| 839 return stencil; | 843 return stencil; |
| 840 } | 844 } |
| 841 | 845 |
| 842 //////////////////////////////////////////////////////////////////////////////// | 846 //////////////////////////////////////////////////////////////////////////////// |
| 843 | 847 |
| 844 GrBackendObject GrVkGpu::createTestingOnlyBackendTexture(void* srcData, int w, i
nt h, | 848 GrBackendObject GrVkGpu::createTestingOnlyBackendTexture(void* srcData, int w, i
nt h, |
| 845 GrPixelConfig config) { | 849 GrPixelConfig config, |
| 850 bool isRenderTarget) { |
| 846 | 851 |
| 847 VkFormat pixelFormat; | 852 VkFormat pixelFormat; |
| 848 if (!GrPixelConfigToVkFormat(config, &pixelFormat)) { | 853 if (!GrPixelConfigToVkFormat(config, &pixelFormat)) { |
| 849 return 0; | 854 return 0; |
| 850 } | 855 } |
| 851 | 856 |
| 852 bool linearTiling = false; | 857 bool linearTiling = false; |
| 853 if (!fVkCaps->isConfigTexturable(config)) { | 858 if (!fVkCaps->isConfigTexturable(config)) { |
| 854 return 0; | 859 return 0; |
| 855 } | 860 } |
| 856 | 861 |
| 857 if (fVkCaps->isConfigTexurableLinearly(config)) { | 862 if (isRenderTarget && !fVkCaps->isConfigRenderable(config, false)) { |
| 863 return 0; |
| 864 } |
| 865 |
| 866 if (fVkCaps->isConfigTexurableLinearly(config) && |
| 867 (!isRenderTarget || fVkCaps->isConfigRenderableLinearly(config, false)))
{ |
| 858 linearTiling = true; | 868 linearTiling = true; |
| 859 } | 869 } |
| 860 | 870 |
| 861 // Currently this is not supported since it requires a copy which has not ye
t been implemented. | 871 // Currently this is not supported since it requires a copy which has not ye
t been implemented. |
| 862 if (srcData && !linearTiling) { | 872 if (srcData && !linearTiling) { |
| 863 return 0; | 873 return 0; |
| 864 } | 874 } |
| 865 | 875 |
| 866 VkImageUsageFlags usageFlags = VK_IMAGE_USAGE_SAMPLED_BIT; | 876 VkImageUsageFlags usageFlags = VK_IMAGE_USAGE_SAMPLED_BIT; |
| 867 usageFlags |= VK_IMAGE_USAGE_TRANSFER_SRC_BIT; | 877 usageFlags |= VK_IMAGE_USAGE_TRANSFER_SRC_BIT; |
| 868 usageFlags |= VK_IMAGE_USAGE_TRANSFER_DST_BIT; | 878 usageFlags |= VK_IMAGE_USAGE_TRANSFER_DST_BIT; |
| 879 if (isRenderTarget) { |
| 880 usageFlags |= VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT; |
| 881 } |
| 869 | 882 |
| 870 VkImage image = VK_NULL_HANDLE; | 883 VkImage image = VK_NULL_HANDLE; |
| 871 GrVkAlloc alloc = { VK_NULL_HANDLE, 0, 0 }; | 884 GrVkAlloc alloc = { VK_NULL_HANDLE, 0, 0 }; |
| 872 | 885 |
| 873 VkImageTiling imageTiling = linearTiling ? VK_IMAGE_TILING_LINEAR : VK_IMAGE
_TILING_OPTIMAL; | 886 VkImageTiling imageTiling = linearTiling ? VK_IMAGE_TILING_LINEAR : VK_IMAGE
_TILING_OPTIMAL; |
| 874 VkImageLayout initialLayout = (VK_IMAGE_TILING_LINEAR == imageTiling) | 887 VkImageLayout initialLayout = (VK_IMAGE_TILING_LINEAR == imageTiling) |
| 875 ? VK_IMAGE_LAYOUT_PREINITIALIZED | 888 ? VK_IMAGE_LAYOUT_PREINITIALIZED |
| 876 : VK_IMAGE_LAYOUT_UNDEFINED; | 889 : VK_IMAGE_LAYOUT_UNDEFINED; |
| 877 | 890 |
| 878 // Create Image | 891 // Create Image |
| (...skipping 537 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1416 GrVkRenderTarget* target, | 1429 GrVkRenderTarget* target, |
| 1417 const SkIRect& bounds) { | 1430 const SkIRect& bounds) { |
| 1418 // Currently it is fine for us to always pass in 1 for the clear count even
if no attachment | 1431 // Currently it is fine for us to always pass in 1 for the clear count even
if no attachment |
| 1419 // uses it. In the current state, we also only use the LOAD_OP_CLEAR for the
color attachment | 1432 // uses it. In the current state, we also only use the LOAD_OP_CLEAR for the
color attachment |
| 1420 // which is always at the first attachment. | 1433 // which is always at the first attachment. |
| 1421 fCurrentCmdBuffer->beginRenderPass(this, renderPass, 1, colorClear, *target,
bounds, true); | 1434 fCurrentCmdBuffer->beginRenderPass(this, renderPass, 1, colorClear, *target,
bounds, true); |
| 1422 fCurrentCmdBuffer->executeCommands(this, buffer); | 1435 fCurrentCmdBuffer->executeCommands(this, buffer); |
| 1423 fCurrentCmdBuffer->endRenderPass(this); | 1436 fCurrentCmdBuffer->endRenderPass(this); |
| 1424 } | 1437 } |
| 1425 | 1438 |
| OLD | NEW |