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 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
261 // height); | 261 // height); |
262 } else { | 262 } else { |
263 bool linearTiling = vkTex->isLinearTiled(); | 263 bool linearTiling = vkTex->isLinearTiled(); |
264 if (linearTiling) { | 264 if (linearTiling) { |
265 if (texels.count() > 1) { | 265 if (texels.count() > 1) { |
266 SkDebugf("Can't upload mipmap data to linear tiled texture"); | 266 SkDebugf("Can't upload mipmap data to linear tiled texture"); |
267 return false; | 267 return false; |
268 } | 268 } |
269 if (VK_IMAGE_LAYOUT_PREINITIALIZED != vkTex->currentLayout()) { | 269 if (VK_IMAGE_LAYOUT_PREINITIALIZED != vkTex->currentLayout()) { |
270 // Need to change the layout to general in order to perform a ho
st write | 270 // Need to change the layout to general in order to perform a ho
st write |
271 VkImageLayout layout = vkTex->currentLayout(); | |
272 VkPipelineStageFlags srcStageMask = GrVkMemory::LayoutToPipeline
StageFlags(layout); | |
273 VkPipelineStageFlags dstStageMask = VK_PIPELINE_STAGE_HOST_BIT; | |
274 VkAccessFlags srcAccessMask = GrVkMemory::LayoutToSrcAccessMask(
layout); | |
275 VkAccessFlags dstAccessMask = VK_ACCESS_HOST_WRITE_BIT; | |
276 vkTex->setImageLayout(this, | 271 vkTex->setImageLayout(this, |
277 VK_IMAGE_LAYOUT_GENERAL, | 272 VK_IMAGE_LAYOUT_GENERAL, |
278 srcAccessMask, | 273 VK_ACCESS_HOST_WRITE_BIT, |
279 dstAccessMask, | 274 VK_PIPELINE_STAGE_HOST_BIT, |
280 srcStageMask, | |
281 dstStageMask, | |
282 false); | 275 false); |
283 this->submitCommandBuffer(kForce_SyncQueue); | 276 this->submitCommandBuffer(kForce_SyncQueue); |
284 } | 277 } |
285 success = this->uploadTexDataLinear(vkTex, left, top, width, height,
config, | 278 success = this->uploadTexDataLinear(vkTex, left, top, width, height,
config, |
286 texels.begin()->fPixels, texels.
begin()->fRowBytes); | 279 texels.begin()->fPixels, texels.
begin()->fRowBytes); |
287 } else { | 280 } else { |
288 int newMipLevels = texels.count(); | 281 int newMipLevels = texels.count(); |
289 int currentMipLevels = vkTex->texturePriv().maxMipMapLevel() + 1; | 282 int currentMipLevels = vkTex->texturePriv().maxMipMapLevel() + 1; |
290 if (newMipLevels != currentMipLevels) { | 283 if (newMipLevels != currentMipLevels) { |
291 if (!vkTex->reallocForMipmap(this, newMipLevels)) { | 284 if (!vkTex->reallocForMipmap(this, newMipLevels)) { |
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
482 | 475 |
483 // make sure the unmap has finished | 476 // make sure the unmap has finished |
484 transferBuffer->addMemoryBarrier(this, | 477 transferBuffer->addMemoryBarrier(this, |
485 VK_ACCESS_HOST_WRITE_BIT, | 478 VK_ACCESS_HOST_WRITE_BIT, |
486 VK_ACCESS_TRANSFER_READ_BIT, | 479 VK_ACCESS_TRANSFER_READ_BIT, |
487 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, | 480 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, |
488 VK_PIPELINE_STAGE_TRANSFER_BIT, | 481 VK_PIPELINE_STAGE_TRANSFER_BIT, |
489 false); | 482 false); |
490 | 483 |
491 // Change layout of our target so it can be copied to | 484 // Change layout of our target so it can be copied to |
492 VkImageLayout layout = tex->currentLayout(); | |
493 VkPipelineStageFlags srcStageMask = GrVkMemory::LayoutToPipelineStageFlags(l
ayout); | |
494 VkPipelineStageFlags dstStageMask = VK_PIPELINE_STAGE_TRANSFER_BIT; | |
495 VkAccessFlags srcAccessMask = GrVkMemory::LayoutToSrcAccessMask(layout); | |
496 VkAccessFlags dstAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; | |
497 tex->setImageLayout(this, | 485 tex->setImageLayout(this, |
498 VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, | 486 VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, |
499 srcAccessMask, | 487 VK_ACCESS_TRANSFER_WRITE_BIT, |
500 dstAccessMask, | 488 VK_PIPELINE_STAGE_TRANSFER_BIT, |
501 srcStageMask, | |
502 dstStageMask, | |
503 false); | 489 false); |
504 | 490 |
505 // Copy the buffer to the image | 491 // Copy the buffer to the image |
506 fCurrentCmdBuffer->copyBufferToImage(this, | 492 fCurrentCmdBuffer->copyBufferToImage(this, |
507 transferBuffer, | 493 transferBuffer, |
508 tex, | 494 tex, |
509 VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, | 495 VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, |
510 regions.count(), | 496 regions.count(), |
511 regions.begin()); | 497 regions.begin()); |
512 | 498 |
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
713 } | 699 } |
714 | 700 |
715 // determine if we can blit to and from this format | 701 // determine if we can blit to and from this format |
716 const GrVkCaps& caps = this->vkCaps(); | 702 const GrVkCaps& caps = this->vkCaps(); |
717 if (!caps.configCanBeDstofBlit(tex->config(), false) || | 703 if (!caps.configCanBeDstofBlit(tex->config(), false) || |
718 !caps.configCanBeSrcofBlit(tex->config(), false)) { | 704 !caps.configCanBeSrcofBlit(tex->config(), false)) { |
719 return; | 705 return; |
720 } | 706 } |
721 | 707 |
722 // change the original image's layout | 708 // change the original image's layout |
723 VkImageLayout origSrcLayout = tex->currentLayout(); | |
724 VkPipelineStageFlags srcStageMask = GrVkMemory::LayoutToPipelineStageFlags(o
rigSrcLayout); | |
725 VkPipelineStageFlags dstStageMask = VK_PIPELINE_STAGE_TRANSFER_BIT; | |
726 | |
727 VkAccessFlags srcAccessMask = GrVkMemory::LayoutToSrcAccessMask(origSrcLayou
t); | |
728 VkAccessFlags dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT; | |
729 | |
730 tex->setImageLayout(this, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, | 709 tex->setImageLayout(this, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, |
731 srcAccessMask, dstAccessMask, srcStageMask, dstStageMask
, false); | 710 VK_ACCESS_TRANSFER_READ_BIT, VK_PIPELINE_STAGE_TRANSFER_
BIT, false); |
732 | 711 |
733 // grab handle to the original image resource | 712 // grab handle to the original image resource |
734 const GrVkImage::Resource* oldResource = tex->resource(); | 713 const GrVkImage::Resource* oldResource = tex->resource(); |
735 oldResource->ref(); | 714 oldResource->ref(); |
736 | 715 |
737 // SkMipMap doesn't include the base level in the level count so we have to
add 1 | 716 // SkMipMap doesn't include the base level in the level count so we have to
add 1 |
738 uint32_t levelCount = SkMipMap::ComputeLevelCount(tex->width(), tex->height(
)) + 1; | 717 uint32_t levelCount = SkMipMap::ComputeLevelCount(tex->width(), tex->height(
)) + 1; |
739 if (!tex->reallocForMipmap(this, levelCount)) { | 718 if (!tex->reallocForMipmap(this, levelCount)) { |
740 oldResource->unref(this); | 719 oldResource->unref(this); |
741 return; | 720 return; |
742 } | 721 } |
743 | 722 |
744 // change the new image's layout | 723 // change the new image's layout |
745 VkImageLayout origDstLayout = tex->currentLayout(); | 724 tex->setImageLayout(this, VK_IMAGE_LAYOUT_GENERAL, |
746 | 725 VK_ACCESS_TRANSFER_WRITE_BIT, VK_PIPELINE_STAGE_TRANSFER
_BIT, false); |
747 srcStageMask = GrVkMemory::LayoutToPipelineStageFlags(origDstLayout); | |
748 dstStageMask = VK_PIPELINE_STAGE_TRANSFER_BIT; | |
749 | |
750 srcAccessMask = GrVkMemory::LayoutToSrcAccessMask(origDstLayout); | |
751 dstAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; | |
752 | |
753 tex->setImageLayout(this, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, | |
754 srcAccessMask, dstAccessMask, srcStageMask, dstStageMask
, false); | |
755 | 726 |
756 // Blit original image | 727 // Blit original image |
757 int width = tex->width(); | 728 int width = tex->width(); |
758 int height = tex->height(); | 729 int height = tex->height(); |
759 | 730 |
760 VkImageBlit blitRegion; | 731 VkImageBlit blitRegion; |
761 memset(&blitRegion, 0, sizeof(VkImageBlit)); | 732 memset(&blitRegion, 0, sizeof(VkImageBlit)); |
762 blitRegion.srcSubresource = { VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1 }; | 733 blitRegion.srcSubresource = { VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1 }; |
763 blitRegion.srcOffsets[0] = { 0, 0, 0 }; | 734 blitRegion.srcOffsets[0] = { 0, 0, 0 }; |
764 blitRegion.srcOffsets[1] = { width, height, 0 }; | 735 blitRegion.srcOffsets[1] = { width, height, 0 }; |
765 blitRegion.dstSubresource = { VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1 }; | 736 blitRegion.dstSubresource = { VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1 }; |
766 blitRegion.dstOffsets[0] = { 0, 0, 0 }; | 737 blitRegion.dstOffsets[0] = { 0, 0, 0 }; |
767 blitRegion.dstOffsets[1] = { width, height, 0 }; | 738 blitRegion.dstOffsets[1] = { width, height, 0 }; |
768 | 739 |
769 fCurrentCmdBuffer->blitImage(this, | 740 fCurrentCmdBuffer->blitImage(this, |
770 oldResource, | 741 oldResource, |
771 VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, | 742 VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, |
772 tex->resource(), | 743 tex->resource(), |
773 VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, | 744 VK_IMAGE_LAYOUT_GENERAL, |
774 1, | 745 1, |
775 &blitRegion, | 746 &blitRegion, |
776 VK_FILTER_LINEAR); | 747 VK_FILTER_LINEAR); |
| 748 |
| 749 // setup memory barrier |
| 750 SkASSERT(GrVkFormatToPixelConfig(tex->resource()->fFormat, nullptr)); |
| 751 VkImageAspectFlags aspectFlags = VK_IMAGE_ASPECT_COLOR_BIT; |
| 752 VkImageMemoryBarrier imageMemoryBarrier = { |
| 753 VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // sType |
| 754 NULL, // pNext |
| 755 VK_ACCESS_TRANSFER_WRITE_BIT, // outputMask |
| 756 VK_ACCESS_TRANSFER_READ_BIT, // inputMask |
| 757 VK_IMAGE_LAYOUT_GENERAL, // oldLayout |
| 758 VK_IMAGE_LAYOUT_GENERAL, // newLayout |
| 759 VK_QUEUE_FAMILY_IGNORED, // srcQueueFamilyIndex |
| 760 VK_QUEUE_FAMILY_IGNORED, // dstQueueFamilyIndex |
| 761 tex->resource()->fImage, // image |
| 762 { aspectFlags, 0, 1, 0, 1 } // subresourceRange |
| 763 }; |
| 764 |
777 // Blit the miplevels | 765 // Blit the miplevels |
778 uint32_t mipLevel = 1; | 766 uint32_t mipLevel = 1; |
779 while (mipLevel < levelCount) { | 767 while (mipLevel < levelCount) { |
780 int prevWidth = width; | 768 int prevWidth = width; |
781 int prevHeight = height; | 769 int prevHeight = height; |
782 width = SkTMax(1, width / 2); | 770 width = SkTMax(1, width / 2); |
783 height = SkTMax(1, height / 2); | 771 height = SkTMax(1, height / 2); |
784 | 772 |
785 blitRegion.srcSubresource = { VK_IMAGE_ASPECT_COLOR_BIT, mipLevel-1, 0,
1 }; | 773 imageMemoryBarrier.subresourceRange.baseMipLevel = mipLevel - 1; |
| 774 this->addImageMemoryBarrier(VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_
STAGE_TRANSFER_BIT, |
| 775 false, &imageMemoryBarrier); |
| 776 |
| 777 blitRegion.srcSubresource = { VK_IMAGE_ASPECT_COLOR_BIT, mipLevel - 1, 0
, 1 }; |
786 blitRegion.srcOffsets[0] = { 0, 0, 0 }; | 778 blitRegion.srcOffsets[0] = { 0, 0, 0 }; |
787 blitRegion.srcOffsets[1] = { prevWidth, prevHeight, 0 }; | 779 blitRegion.srcOffsets[1] = { prevWidth, prevHeight, 0 }; |
788 blitRegion.dstSubresource = { VK_IMAGE_ASPECT_COLOR_BIT, mipLevel, 0, 1
}; | 780 blitRegion.dstSubresource = { VK_IMAGE_ASPECT_COLOR_BIT, mipLevel, 0, 1
}; |
789 blitRegion.dstOffsets[0] = { 0, 0, 0 }; | 781 blitRegion.dstOffsets[0] = { 0, 0, 0 }; |
790 blitRegion.dstOffsets[1] = { width, height, 0 }; | 782 blitRegion.dstOffsets[1] = { width, height, 0 }; |
791 | |
792 tex->setImageLayout(this, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, | |
793 srcAccessMask, dstAccessMask, srcStageMask, dstStage
Mask, | |
794 mipLevel-1, 1, false); | |
795 | |
796 fCurrentCmdBuffer->blitImage(this, | 783 fCurrentCmdBuffer->blitImage(this, |
797 tex->resource(), | 784 tex->resource(), |
798 VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, | 785 VK_IMAGE_LAYOUT_GENERAL, |
799 tex->resource(), | 786 tex->resource(), |
800 VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, | 787 VK_IMAGE_LAYOUT_GENERAL, |
801 1, | 788 1, |
802 &blitRegion, | 789 &blitRegion, |
803 VK_FILTER_LINEAR); | 790 VK_FILTER_LINEAR); |
804 ++mipLevel; | 791 ++mipLevel; |
805 } | 792 } |
806 | 793 |
807 oldResource->unref(this); | 794 oldResource->unref(this); |
808 } | 795 } |
809 | 796 |
810 | 797 |
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1053 if (nullptr == target) { | 1040 if (nullptr == target) { |
1054 return; | 1041 return; |
1055 } | 1042 } |
1056 GrStencilAttachment* stencil = target->renderTargetPriv().getStencilAttachme
nt(); | 1043 GrStencilAttachment* stencil = target->renderTargetPriv().getStencilAttachme
nt(); |
1057 GrVkStencilAttachment* vkStencil = (GrVkStencilAttachment*)stencil; | 1044 GrVkStencilAttachment* vkStencil = (GrVkStencilAttachment*)stencil; |
1058 | 1045 |
1059 | 1046 |
1060 VkClearDepthStencilValue vkStencilColor; | 1047 VkClearDepthStencilValue vkStencilColor; |
1061 memset(&vkStencilColor, 0, sizeof(VkClearDepthStencilValue)); | 1048 memset(&vkStencilColor, 0, sizeof(VkClearDepthStencilValue)); |
1062 | 1049 |
1063 VkImageLayout origDstLayout = vkStencil->currentLayout(); | |
1064 | |
1065 VkPipelineStageFlags srcStageMask = GrVkMemory::LayoutToPipelineStageFlags(o
rigDstLayout); | |
1066 VkPipelineStageFlags dstStageMask = VK_PIPELINE_STAGE_TRANSFER_BIT; | |
1067 | |
1068 VkAccessFlags srcAccessMask = GrVkMemory::LayoutToSrcAccessMask(origDstLayou
t);; | |
1069 VkAccessFlags dstAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; | |
1070 | |
1071 vkStencil->setImageLayout(this, | 1050 vkStencil->setImageLayout(this, |
1072 VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, | 1051 VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, |
1073 srcAccessMask, | 1052 VK_ACCESS_TRANSFER_WRITE_BIT, |
1074 dstAccessMask, | 1053 VK_PIPELINE_STAGE_TRANSFER_BIT, |
1075 srcStageMask, | |
1076 dstStageMask, | |
1077 false); | 1054 false); |
1078 | 1055 |
1079 | |
1080 VkImageSubresourceRange subRange; | 1056 VkImageSubresourceRange subRange; |
1081 memset(&subRange, 0, sizeof(VkImageSubresourceRange)); | 1057 memset(&subRange, 0, sizeof(VkImageSubresourceRange)); |
1082 subRange.aspectMask = VK_IMAGE_ASPECT_STENCIL_BIT; | 1058 subRange.aspectMask = VK_IMAGE_ASPECT_STENCIL_BIT; |
1083 subRange.baseMipLevel = 0; | 1059 subRange.baseMipLevel = 0; |
1084 subRange.levelCount = 1; | 1060 subRange.levelCount = 1; |
1085 subRange.baseArrayLayer = 0; | 1061 subRange.baseArrayLayer = 0; |
1086 subRange.layerCount = 1; | 1062 subRange.layerCount = 1; |
1087 | 1063 |
1088 // TODO: I imagine that most times we want to clear a stencil it will be at
the beginning of a | 1064 // TODO: I imagine that most times we want to clear a stencil it will be at
the beginning of a |
1089 // draw. Thus we should look into using the load op functions on the render
pass to clear out | 1065 // draw. Thus we should look into using the load op functions on the render
pass to clear out |
(...skipping 17 matching lines...) Expand all Loading... |
1107 // during this clear. Thus we will clear the entire stencil to the desired v
alue. | 1083 // during this clear. Thus we will clear the entire stencil to the desired v
alue. |
1108 | 1084 |
1109 VkClearDepthStencilValue vkStencilColor; | 1085 VkClearDepthStencilValue vkStencilColor; |
1110 memset(&vkStencilColor, 0, sizeof(VkClearDepthStencilValue)); | 1086 memset(&vkStencilColor, 0, sizeof(VkClearDepthStencilValue)); |
1111 if (insideClip) { | 1087 if (insideClip) { |
1112 vkStencilColor.stencil = (1 << (stencilBitCount - 1)); | 1088 vkStencilColor.stencil = (1 << (stencilBitCount - 1)); |
1113 } else { | 1089 } else { |
1114 vkStencilColor.stencil = 0; | 1090 vkStencilColor.stencil = 0; |
1115 } | 1091 } |
1116 | 1092 |
1117 VkImageLayout origDstLayout = vkStencil->currentLayout(); | |
1118 VkAccessFlags srcAccessMask = GrVkMemory::LayoutToSrcAccessMask(origDstLayou
t); | |
1119 VkAccessFlags dstAccessMask = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; | |
1120 VkPipelineStageFlags srcStageMask = GrVkMemory::LayoutToPipelineStageFlags(o
rigDstLayout); | |
1121 VkPipelineStageFlags dstStageMask = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT; | |
1122 vkStencil->setImageLayout(this, | 1093 vkStencil->setImageLayout(this, |
1123 VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, | 1094 VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, |
1124 srcAccessMask, | 1095 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, |
1125 dstAccessMask, | 1096 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, |
1126 srcStageMask, | |
1127 dstStageMask, | |
1128 false); | 1097 false); |
1129 | 1098 |
1130 // Change layout of our render target so it can be used as the color attachm
ent. This is what | 1099 // Change layout of our render target so it can be used as the color attachm
ent. This is what |
1131 // the render pass expects when it begins. | 1100 // the render pass expects when it begins. |
1132 VkImageLayout layout = vkRT->currentLayout(); | |
1133 srcStageMask = GrVkMemory::LayoutToPipelineStageFlags(layout); | |
1134 dstStageMask = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT; | |
1135 srcAccessMask = GrVkMemory::LayoutToSrcAccessMask(layout); | |
1136 dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; | |
1137 vkRT->setImageLayout(this, | 1101 vkRT->setImageLayout(this, |
1138 VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, | 1102 VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, |
1139 srcAccessMask, | 1103 VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, |
1140 dstAccessMask, | 1104 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, |
1141 srcStageMask, | |
1142 dstStageMask, | |
1143 false); | 1105 false); |
1144 | 1106 |
1145 VkClearRect clearRect; | 1107 VkClearRect clearRect; |
1146 // Flip rect if necessary | 1108 // Flip rect if necessary |
1147 SkIRect vkRect = rect; | 1109 SkIRect vkRect = rect; |
1148 | 1110 |
1149 if (kBottomLeft_GrSurfaceOrigin == vkRT->origin()) { | 1111 if (kBottomLeft_GrSurfaceOrigin == vkRT->origin()) { |
1150 vkRect.fTop = vkRT->height() - rect.fBottom; | 1112 vkRect.fTop = vkRT->height() - rect.fBottom; |
1151 vkRect.fBottom = vkRT->height() - rect.fTop; | 1113 vkRect.fBottom = vkRT->height() - rect.fTop; |
1152 } | 1114 } |
(...skipping 23 matching lines...) Expand all Loading... |
1176 } | 1138 } |
1177 | 1139 |
1178 void GrVkGpu::onClear(GrRenderTarget* target, const SkIRect& rect, GrColor color
) { | 1140 void GrVkGpu::onClear(GrRenderTarget* target, const SkIRect& rect, GrColor color
) { |
1179 // parent class should never let us get here with no RT | 1141 // parent class should never let us get here with no RT |
1180 SkASSERT(target); | 1142 SkASSERT(target); |
1181 | 1143 |
1182 VkClearColorValue vkColor; | 1144 VkClearColorValue vkColor; |
1183 GrColorToRGBAFloat(color, vkColor.float32); | 1145 GrColorToRGBAFloat(color, vkColor.float32); |
1184 | 1146 |
1185 GrVkRenderTarget* vkRT = static_cast<GrVkRenderTarget*>(target); | 1147 GrVkRenderTarget* vkRT = static_cast<GrVkRenderTarget*>(target); |
1186 VkImageLayout origDstLayout = vkRT->currentLayout(); | |
1187 | 1148 |
1188 if (rect.width() != target->width() || rect.height() != target->height()) { | 1149 if (rect.width() != target->width() || rect.height() != target->height()) { |
1189 VkAccessFlags srcAccessMask = GrVkMemory::LayoutToSrcAccessMask(origDstL
ayout); | |
1190 VkAccessFlags dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; | |
1191 VkPipelineStageFlags srcStageMask = GrVkMemory::LayoutToPipelineStageFla
gs(origDstLayout); | |
1192 VkPipelineStageFlags dstStageMask = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT; | |
1193 vkRT->setImageLayout(this, | 1150 vkRT->setImageLayout(this, |
1194 VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, | 1151 VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, |
1195 srcAccessMask, | 1152 VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, |
1196 dstAccessMask, | 1153 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, |
1197 srcStageMask, | |
1198 dstStageMask, | |
1199 false); | 1154 false); |
1200 | 1155 |
1201 // If we are using a stencil attachment we also need to change its layou
t to what the render | 1156 // If we are using a stencil attachment we also need to change its layou
t to what the render |
1202 // pass is expecting. | 1157 // pass is expecting. |
1203 if (GrStencilAttachment* stencil = vkRT->renderTargetPriv().getStencilAt
tachment()) { | 1158 if (GrStencilAttachment* stencil = vkRT->renderTargetPriv().getStencilAt
tachment()) { |
1204 GrVkStencilAttachment* vkStencil = (GrVkStencilAttachment*)stencil; | 1159 GrVkStencilAttachment* vkStencil = (GrVkStencilAttachment*)stencil; |
1205 origDstLayout = vkStencil->currentLayout(); | |
1206 srcAccessMask = GrVkMemory::LayoutToSrcAccessMask(origDstLayout); | |
1207 dstAccessMask = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT | | |
1208 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT; | |
1209 srcStageMask = GrVkMemory::LayoutToPipelineStageFlags(origDstLayout)
; | |
1210 dstStageMask = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT; | |
1211 vkStencil->setImageLayout(this, | 1160 vkStencil->setImageLayout(this, |
1212 VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_O
PTIMAL, | 1161 VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_O
PTIMAL, |
1213 srcAccessMask, | 1162 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_B
IT | |
1214 dstAccessMask, | 1163 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BI
T, |
1215 srcStageMask, | 1164 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, |
1216 dstStageMask, | |
1217 false); | 1165 false); |
1218 } | 1166 } |
1219 | 1167 |
1220 VkClearRect clearRect; | 1168 VkClearRect clearRect; |
1221 // Flip rect if necessary | 1169 // Flip rect if necessary |
1222 SkIRect vkRect = rect; | 1170 SkIRect vkRect = rect; |
1223 if (kBottomLeft_GrSurfaceOrigin == vkRT->origin()) { | 1171 if (kBottomLeft_GrSurfaceOrigin == vkRT->origin()) { |
1224 vkRect.fTop = vkRT->height() - rect.fBottom; | 1172 vkRect.fTop = vkRT->height() - rect.fBottom; |
1225 vkRect.fBottom = vkRT->height() - rect.fTop; | 1173 vkRect.fBottom = vkRT->height() - rect.fTop; |
1226 } | 1174 } |
(...skipping 12 matching lines...) Expand all Loading... |
1239 VkClearAttachment attachment; | 1187 VkClearAttachment attachment; |
1240 attachment.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; | 1188 attachment.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; |
1241 attachment.colorAttachment = colorIndex; | 1189 attachment.colorAttachment = colorIndex; |
1242 attachment.clearValue.color = vkColor; | 1190 attachment.clearValue.color = vkColor; |
1243 | 1191 |
1244 fCurrentCmdBuffer->clearAttachments(this, 1, &attachment, 1, &clearRect)
; | 1192 fCurrentCmdBuffer->clearAttachments(this, 1, &attachment, 1, &clearRect)
; |
1245 fCurrentCmdBuffer->endRenderPass(this); | 1193 fCurrentCmdBuffer->endRenderPass(this); |
1246 return; | 1194 return; |
1247 } | 1195 } |
1248 | 1196 |
1249 VkPipelineStageFlags srcStageMask = GrVkMemory::LayoutToPipelineStageFlags(o
rigDstLayout); | |
1250 VkPipelineStageFlags dstStageMask = VK_PIPELINE_STAGE_TRANSFER_BIT; | |
1251 | |
1252 VkAccessFlags srcAccessMask = GrVkMemory::LayoutToSrcAccessMask(origDstLayou
t);; | |
1253 VkAccessFlags dstAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; | |
1254 | |
1255 vkRT->setImageLayout(this, | 1197 vkRT->setImageLayout(this, |
1256 VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, | 1198 VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, |
1257 srcAccessMask, | 1199 VK_ACCESS_TRANSFER_WRITE_BIT, |
1258 dstAccessMask, | 1200 VK_PIPELINE_STAGE_TRANSFER_BIT, |
1259 srcStageMask, | |
1260 dstStageMask, | |
1261 false); | 1201 false); |
1262 | 1202 |
1263 | |
1264 VkImageSubresourceRange subRange; | 1203 VkImageSubresourceRange subRange; |
1265 memset(&subRange, 0, sizeof(VkImageSubresourceRange)); | 1204 memset(&subRange, 0, sizeof(VkImageSubresourceRange)); |
1266 subRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; | 1205 subRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; |
1267 subRange.baseMipLevel = 0; | 1206 subRange.baseMipLevel = 0; |
1268 subRange.levelCount = 1; | 1207 subRange.levelCount = 1; |
1269 subRange.baseArrayLayer = 0; | 1208 subRange.baseArrayLayer = 0; |
1270 subRange.layerCount = 1; | 1209 subRange.layerCount = 1; |
1271 | 1210 |
1272 // In the future we may not actually be doing this type of clear at all. If
we are inside a | 1211 // In the future we may not actually be doing this type of clear at all. If
we are inside a |
1273 // render pass or doing a non full clear then we will use CmdClearColorAttac
hment. The more | 1212 // render pass or doing a non full clear then we will use CmdClearColorAttac
hment. The more |
(...skipping 28 matching lines...) Expand all Loading... |
1302 } | 1241 } |
1303 | 1242 |
1304 void GrVkGpu::copySurfaceAsCopyImage(GrSurface* dst, | 1243 void GrVkGpu::copySurfaceAsCopyImage(GrSurface* dst, |
1305 GrSurface* src, | 1244 GrSurface* src, |
1306 GrVkImage* dstImage, | 1245 GrVkImage* dstImage, |
1307 GrVkImage* srcImage, | 1246 GrVkImage* srcImage, |
1308 const SkIRect& srcRect, | 1247 const SkIRect& srcRect, |
1309 const SkIPoint& dstPoint) { | 1248 const SkIPoint& dstPoint) { |
1310 SkASSERT(can_copy_image(dst, src, this)); | 1249 SkASSERT(can_copy_image(dst, src, this)); |
1311 | 1250 |
1312 VkImageLayout origDstLayout = dstImage->currentLayout(); | |
1313 VkImageLayout origSrcLayout = srcImage->currentLayout(); | |
1314 | |
1315 VkPipelineStageFlags srcStageMask = GrVkMemory::LayoutToPipelineStageFlags(o
rigDstLayout); | |
1316 VkPipelineStageFlags dstStageMask = VK_PIPELINE_STAGE_TRANSFER_BIT; | |
1317 | |
1318 // These flags are for flushing/invalidating caches and for the dst image it
doesn't matter if | 1251 // These flags are for flushing/invalidating caches and for the dst image it
doesn't matter if |
1319 // the cache is flushed since it is only being written to. | 1252 // the cache is flushed since it is only being written to. |
1320 VkAccessFlags srcAccessMask = GrVkMemory::LayoutToSrcAccessMask(origDstLayou
t);; | |
1321 VkAccessFlags dstAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; | |
1322 | |
1323 dstImage->setImageLayout(this, | 1253 dstImage->setImageLayout(this, |
1324 VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, | 1254 VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, |
1325 srcAccessMask, | 1255 VK_ACCESS_TRANSFER_WRITE_BIT, |
1326 dstAccessMask, | 1256 VK_PIPELINE_STAGE_TRANSFER_BIT, |
1327 srcStageMask, | 1257 false); |
1328 dstStageMask, | |
1329 false); | |
1330 | |
1331 srcStageMask = GrVkMemory::LayoutToPipelineStageFlags(origSrcLayout); | |
1332 dstStageMask = VK_PIPELINE_STAGE_TRANSFER_BIT; | |
1333 | |
1334 srcAccessMask = GrVkMemory::LayoutToSrcAccessMask(origSrcLayout); | |
1335 dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT; | |
1336 | 1258 |
1337 srcImage->setImageLayout(this, | 1259 srcImage->setImageLayout(this, |
1338 VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, | 1260 VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, |
1339 srcAccessMask, | 1261 VK_ACCESS_TRANSFER_READ_BIT, |
1340 dstAccessMask, | 1262 VK_PIPELINE_STAGE_TRANSFER_BIT, |
1341 srcStageMask, | |
1342 dstStageMask, | |
1343 false); | 1263 false); |
1344 | 1264 |
1345 // Flip rect if necessary | 1265 // Flip rect if necessary |
1346 SkIRect srcVkRect = srcRect; | 1266 SkIRect srcVkRect = srcRect; |
1347 int32_t dstY = dstPoint.fY; | 1267 int32_t dstY = dstPoint.fY; |
1348 | 1268 |
1349 if (kBottomLeft_GrSurfaceOrigin == src->origin()) { | 1269 if (kBottomLeft_GrSurfaceOrigin == src->origin()) { |
1350 SkASSERT(kBottomLeft_GrSurfaceOrigin == dst->origin()); | 1270 SkASSERT(kBottomLeft_GrSurfaceOrigin == dst->origin()); |
1351 srcVkRect.fTop = src->height() - srcRect.fBottom; | 1271 srcVkRect.fTop = src->height() - srcRect.fBottom; |
1352 srcVkRect.fBottom = src->height() - srcRect.fTop; | 1272 srcVkRect.fBottom = src->height() - srcRect.fTop; |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1401 } | 1321 } |
1402 | 1322 |
1403 void GrVkGpu::copySurfaceAsBlit(GrSurface* dst, | 1323 void GrVkGpu::copySurfaceAsBlit(GrSurface* dst, |
1404 GrSurface* src, | 1324 GrSurface* src, |
1405 GrVkImage* dstImage, | 1325 GrVkImage* dstImage, |
1406 GrVkImage* srcImage, | 1326 GrVkImage* srcImage, |
1407 const SkIRect& srcRect, | 1327 const SkIRect& srcRect, |
1408 const SkIPoint& dstPoint) { | 1328 const SkIPoint& dstPoint) { |
1409 SkASSERT(can_copy_as_blit(dst, src, dstImage, srcImage, this)); | 1329 SkASSERT(can_copy_as_blit(dst, src, dstImage, srcImage, this)); |
1410 | 1330 |
1411 VkImageLayout origDstLayout = dstImage->currentLayout(); | |
1412 VkImageLayout origSrcLayout = srcImage->currentLayout(); | |
1413 | |
1414 VkPipelineStageFlags srcStageMask = GrVkMemory::LayoutToPipelineStageFlags(o
rigDstLayout); | |
1415 VkPipelineStageFlags dstStageMask = VK_PIPELINE_STAGE_TRANSFER_BIT; | |
1416 | |
1417 VkAccessFlags srcAccessMask = GrVkMemory::LayoutToSrcAccessMask(origDstLayou
t);; | |
1418 VkAccessFlags dstAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; | |
1419 | |
1420 dstImage->setImageLayout(this, | 1331 dstImage->setImageLayout(this, |
1421 VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, | 1332 VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, |
1422 srcAccessMask, | 1333 VK_ACCESS_TRANSFER_WRITE_BIT, |
1423 dstAccessMask, | 1334 VK_PIPELINE_STAGE_TRANSFER_BIT, |
1424 srcStageMask, | |
1425 dstStageMask, | |
1426 false); | 1335 false); |
1427 | 1336 |
1428 srcStageMask = GrVkMemory::LayoutToPipelineStageFlags(origSrcLayout); | |
1429 dstStageMask = VK_PIPELINE_STAGE_TRANSFER_BIT; | |
1430 | |
1431 srcAccessMask = GrVkMemory::LayoutToSrcAccessMask(origSrcLayout); | |
1432 dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT; | |
1433 | |
1434 srcImage->setImageLayout(this, | 1337 srcImage->setImageLayout(this, |
1435 VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, | 1338 VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, |
1436 srcAccessMask, | 1339 VK_ACCESS_TRANSFER_READ_BIT, |
1437 dstAccessMask, | 1340 VK_PIPELINE_STAGE_TRANSFER_BIT, |
1438 srcStageMask, | |
1439 dstStageMask, | |
1440 false); | 1341 false); |
1441 | 1342 |
1442 // Flip rect if necessary | 1343 // Flip rect if necessary |
1443 SkIRect srcVkRect; | 1344 SkIRect srcVkRect; |
1444 srcVkRect.fLeft = srcRect.fLeft; | 1345 srcVkRect.fLeft = srcRect.fLeft; |
1445 srcVkRect.fRight = srcRect.fRight; | 1346 srcVkRect.fRight = srcRect.fRight; |
1446 SkIRect dstRect; | 1347 SkIRect dstRect; |
1447 dstRect.fLeft = dstPoint.fX; | 1348 dstRect.fLeft = dstPoint.fX; |
1448 dstRect.fRight = dstPoint.fX + srcRect.width(); | 1349 dstRect.fRight = dstPoint.fX + srcRect.width(); |
1449 | 1350 |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1586 if (!GrPixelConfigToVkFormat(config, &pixelFormat)) { | 1487 if (!GrPixelConfigToVkFormat(config, &pixelFormat)) { |
1587 return false; | 1488 return false; |
1588 } | 1489 } |
1589 | 1490 |
1590 GrVkTexture* tgt = static_cast<GrVkTexture*>(surface->asTexture()); | 1491 GrVkTexture* tgt = static_cast<GrVkTexture*>(surface->asTexture()); |
1591 if (!tgt) { | 1492 if (!tgt) { |
1592 return false; | 1493 return false; |
1593 } | 1494 } |
1594 | 1495 |
1595 // Change layout of our target so it can be used as copy | 1496 // Change layout of our target so it can be used as copy |
1596 VkImageLayout layout = tgt->currentLayout(); | |
1597 VkPipelineStageFlags srcStageMask = GrVkMemory::LayoutToPipelineStageFlags(l
ayout); | |
1598 VkPipelineStageFlags dstStageMask = VK_PIPELINE_STAGE_TRANSFER_BIT; | |
1599 VkAccessFlags srcAccessMask = GrVkMemory::LayoutToSrcAccessMask(layout); | |
1600 VkAccessFlags dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT; | |
1601 tgt->setImageLayout(this, | 1497 tgt->setImageLayout(this, |
1602 VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, | 1498 VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, |
1603 srcAccessMask, | 1499 VK_ACCESS_TRANSFER_READ_BIT, |
1604 dstAccessMask, | 1500 VK_PIPELINE_STAGE_TRANSFER_BIT, |
1605 srcStageMask, | |
1606 dstStageMask, | |
1607 false); | 1501 false); |
1608 | 1502 |
1609 GrVkTransferBuffer* transferBuffer = | 1503 GrVkTransferBuffer* transferBuffer = |
1610 static_cast<GrVkTransferBuffer*>(this->createBuffer(rowBytes * height, | 1504 static_cast<GrVkTransferBuffer*>(this->createBuffer(rowBytes * height, |
1611 kXferGpuToCpu_GrBuff
erType, | 1505 kXferGpuToCpu_GrBuff
erType, |
1612 kStream_GrAccessPatt
ern)); | 1506 kStream_GrAccessPatt
ern)); |
1613 | 1507 |
1614 bool flipY = kBottomLeft_GrSurfaceOrigin == surface->origin(); | 1508 bool flipY = kBottomLeft_GrSurfaceOrigin == surface->origin(); |
1615 VkOffset3D offset = { | 1509 VkOffset3D offset = { |
1616 left, | 1510 left, |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1711 GrPrimitiveType primitiveType = meshes[0].primitiveType(); | 1605 GrPrimitiveType primitiveType = meshes[0].primitiveType(); |
1712 sk_sp<GrVkPipelineState> pipelineState = this->prepareDrawState(pipeline, | 1606 sk_sp<GrVkPipelineState> pipelineState = this->prepareDrawState(pipeline, |
1713 primProc, | 1607 primProc, |
1714 primitiveTyp
e, | 1608 primitiveTyp
e, |
1715 *renderPass)
; | 1609 *renderPass)
; |
1716 if (!pipelineState) { | 1610 if (!pipelineState) { |
1717 return; | 1611 return; |
1718 } | 1612 } |
1719 | 1613 |
1720 // Change layout of our render target so it can be used as the color attachm
ent | 1614 // Change layout of our render target so it can be used as the color attachm
ent |
1721 VkImageLayout layout = vkRT->currentLayout(); | |
1722 VkPipelineStageFlags srcStageMask = GrVkMemory::LayoutToPipelineStageFlags(l
ayout); | |
1723 VkPipelineStageFlags dstStageMask = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT; | |
1724 VkAccessFlags srcAccessMask = GrVkMemory::LayoutToSrcAccessMask(layout); | |
1725 VkAccessFlags dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; | |
1726 vkRT->setImageLayout(this, | 1615 vkRT->setImageLayout(this, |
1727 VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, | 1616 VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, |
1728 srcAccessMask, | 1617 VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, |
1729 dstAccessMask, | 1618 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, |
1730 srcStageMask, | |
1731 dstStageMask, | |
1732 false); | 1619 false); |
1733 | 1620 |
1734 // If we are using a stencil attachment we also need to update its layout | 1621 // If we are using a stencil attachment we also need to update its layout |
1735 if (GrStencilAttachment* stencil = vkRT->renderTargetPriv().getStencilAttach
ment()) { | 1622 if (GrStencilAttachment* stencil = vkRT->renderTargetPriv().getStencilAttach
ment()) { |
1736 GrVkStencilAttachment* vkStencil = (GrVkStencilAttachment*)stencil; | 1623 GrVkStencilAttachment* vkStencil = (GrVkStencilAttachment*)stencil; |
1737 VkImageLayout origDstLayout = vkStencil->currentLayout(); | |
1738 VkAccessFlags srcAccessMask = GrVkMemory::LayoutToSrcAccessMask(origDstL
ayout); | |
1739 VkAccessFlags dstAccessMask = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_B
IT | | |
1740 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT; | |
1741 VkPipelineStageFlags srcStageMask = | |
1742 GrVkMemory::LayoutToPipelineStageFlags(origDstLayout); | |
1743 VkPipelineStageFlags dstStageMask = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT; | |
1744 vkStencil->setImageLayout(this, | 1624 vkStencil->setImageLayout(this, |
1745 VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIM
AL, | 1625 VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIM
AL, |
1746 srcAccessMask, | 1626 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT | |
1747 dstAccessMask, | 1627 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT, |
1748 srcStageMask, | 1628 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, |
1749 dstStageMask, | |
1750 false); | 1629 false); |
1751 } | 1630 } |
1752 | 1631 |
1753 fCurrentCmdBuffer->beginRenderPass(this, renderPass, *vkRT); | 1632 fCurrentCmdBuffer->beginRenderPass(this, renderPass, *vkRT); |
1754 | 1633 |
1755 for (int i = 0; i < meshCount; ++i) { | 1634 for (int i = 0; i < meshCount; ++i) { |
1756 const GrMesh& mesh = meshes[i]; | 1635 const GrMesh& mesh = meshes[i]; |
1757 GrMesh::Iterator iter; | 1636 GrMesh::Iterator iter; |
1758 const GrNonInstancedMesh* nonIdxMesh = iter.init(mesh); | 1637 const GrNonInstancedMesh* nonIdxMesh = iter.init(mesh); |
1759 do { | 1638 do { |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1807 aglSwapBuffers(aglGetCurrentContext()); | 1686 aglSwapBuffers(aglGetCurrentContext()); |
1808 int set_a_break_pt_here = 9; | 1687 int set_a_break_pt_here = 9; |
1809 aglSwapBuffers(aglGetCurrentContext()); | 1688 aglSwapBuffers(aglGetCurrentContext()); |
1810 #elif defined(SK_BUILD_FOR_WIN32) | 1689 #elif defined(SK_BUILD_FOR_WIN32) |
1811 SwapBuf(); | 1690 SwapBuf(); |
1812 int set_a_break_pt_here = 9; | 1691 int set_a_break_pt_here = 9; |
1813 SwapBuf(); | 1692 SwapBuf(); |
1814 #endif | 1693 #endif |
1815 #endif | 1694 #endif |
1816 } | 1695 } |
OLD | NEW |