Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(622)

Side by Side Diff: src/gpu/vk/GrVkGpu.cpp

Issue 1761473002: Get Vk compiling post-MIP map changes (Closed) Base URL: https://skia.googlesource.com/skia@shaderc
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/gpu/vk/GrVkGpu.h ('k') | src/gpu/vk/GrVkTexture.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 // TODO: This should fall back to drawing or copying to change config of dstSurface to 252 // TODO: This should fall back to drawing or copying to change config of dstSurface to
253 // match that of srcConfig. 253 // match that of srcConfig.
254 return false; 254 return false;
255 } 255 }
256 256
257 return true; 257 return true;
258 } 258 }
259 259
260 bool GrVkGpu::onWritePixels(GrSurface* surface, 260 bool GrVkGpu::onWritePixels(GrSurface* surface,
261 int left, int top, int width, int height, 261 int left, int top, int width, int height,
262 GrPixelConfig config, const void* buffer, 262 GrPixelConfig config,
263 size_t rowBytes) { 263 const SkTArray<GrMipLevel>& texels) {
264 GrVkTexture* vkTex = static_cast<GrVkTexture*>(surface->asTexture()); 264 GrVkTexture* vkTex = static_cast<GrVkTexture*>(surface->asTexture());
265 if (!vkTex) { 265 if (!vkTex) {
266 return false; 266 return false;
267 } 267 }
268 268
269 // TODO: We're ignoring MIP levels here.
270
269 // We assume Vulkan doesn't do sRGB <-> linear conversions when reading and writing pixels. 271 // We assume Vulkan doesn't do sRGB <-> linear conversions when reading and writing pixels.
270 if (GrPixelConfigIsSRGB(surface->config()) != GrPixelConfigIsSRGB(config)) { 272 if (GrPixelConfigIsSRGB(surface->config()) != GrPixelConfigIsSRGB(config)) {
271 return false; 273 return false;
272 } 274 }
273 275
274 bool success = false; 276 bool success = false;
275 if (GrPixelConfigIsCompressed(vkTex->desc().fConfig)) { 277 if (GrPixelConfigIsCompressed(vkTex->desc().fConfig)) {
276 // We check that config == desc.fConfig in GrGpu::getWritePixelsInfo() 278 // We check that config == desc.fConfig in GrGpu::getWritePixelsInfo()
277 SkASSERT(config == vkTex->desc().fConfig); 279 SkASSERT(config == vkTex->desc().fConfig);
278 // TODO: add compressed texture support 280 // TODO: add compressed texture support
(...skipping 13 matching lines...) Expand all
292 VkAccessFlags dstAccessMask = VK_ACCESS_HOST_WRITE_BIT; 294 VkAccessFlags dstAccessMask = VK_ACCESS_HOST_WRITE_BIT;
293 vkTex->setImageLayout(this, 295 vkTex->setImageLayout(this,
294 VK_IMAGE_LAYOUT_GENERAL, 296 VK_IMAGE_LAYOUT_GENERAL,
295 srcAccessMask, 297 srcAccessMask,
296 dstAccessMask, 298 dstAccessMask,
297 srcStageMask, 299 srcStageMask,
298 dstStageMask, 300 dstStageMask,
299 false); 301 false);
300 } 302 }
301 success = this->uploadTexData(vkTex, left, top, width, height, config, 303 success = this->uploadTexData(vkTex, left, top, width, height, config,
302 buffer, rowBytes); 304 texels.begin()->fPixels, texels.begin()->f RowBytes);
303 } 305 }
304 306
305 if (success) { 307 if (success) {
306 vkTex->texturePriv().dirtyMipMaps(true); 308 vkTex->texturePriv().dirtyMipMaps(true);
307 return true; 309 return true;
308 } 310 }
309 311
310 return false; 312 return false;
311 } 313 }
312 314
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
457 this->submitCommandBuffer(kSkip_SyncQueue); 459 this->submitCommandBuffer(kSkip_SyncQueue);
458 460
459 transferBuffer->unref(); 461 transferBuffer->unref();
460 } 462 }
461 463
462 return true; 464 return true;
463 } 465 }
464 466
465 //////////////////////////////////////////////////////////////////////////////// 467 ////////////////////////////////////////////////////////////////////////////////
466 GrTexture* GrVkGpu::onCreateTexture(const GrSurfaceDesc& desc, GrGpuResource::Li feCycle lifeCycle, 468 GrTexture* GrVkGpu::onCreateTexture(const GrSurfaceDesc& desc, GrGpuResource::Li feCycle lifeCycle,
467 const void* srcData, size_t rowBytes) { 469 const SkTArray<GrMipLevel>& texels) {
468 bool renderTarget = SkToBool(desc.fFlags & kRenderTarget_GrSurfaceFlag); 470 bool renderTarget = SkToBool(desc.fFlags & kRenderTarget_GrSurfaceFlag);
469 471
470 VkFormat pixelFormat; 472 VkFormat pixelFormat;
471 if (!GrPixelConfigToVkFormat(desc.fConfig, &pixelFormat)) { 473 if (!GrPixelConfigToVkFormat(desc.fConfig, &pixelFormat)) {
472 return nullptr; 474 return nullptr;
473 } 475 }
474 476
475 if (!fVkCaps->isConfigTexturable(desc.fConfig)) { 477 if (!fVkCaps->isConfigTexturable(desc.fConfig)) {
476 return nullptr; 478 return nullptr;
477 } 479 }
(...skipping 14 matching lines...) Expand all
492 } 494 }
493 495
494 // For now we will set the VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT and 496 // For now we will set the VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT and
495 // VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT on every texture since we do not know whether or not we 497 // VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT on every texture since we do not know whether or not we
496 // will be using this texture in some copy or not. Also this assumes, as is the current case, 498 // will be using this texture in some copy or not. Also this assumes, as is the current case,
497 // that all render targets in vulkan are also texutres. If we change this pr actice of setting 499 // that all render targets in vulkan are also texutres. If we change this pr actice of setting
498 // both bits, we must make sure to set the destination bit if we are uploadi ng srcData to the 500 // both bits, we must make sure to set the destination bit if we are uploadi ng srcData to the
499 // texture. 501 // texture.
500 usageFlags |= VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_ BIT; 502 usageFlags |= VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_ BIT;
501 503
502 VkFlags memProps = (srcData && linearTiling) ? VK_MEMORY_PROPERTY_HOST_VISIB LE_BIT : 504 VkFlags memProps = (!texels.empty() && linearTiling) ? VK_MEMORY_PROPERTY_HO ST_VISIBLE_BIT :
503 VK_MEMORY_PROPERTY_DEVICE_LOC AL_BIT; 505 VK_MEMORY_PROPERTY_DE VICE_LOCAL_BIT;
504 506
505 // This ImageDesc refers to the texture that will be read by the client. Thu s even if msaa is 507 // This ImageDesc refers to the texture that will be read by the client. Thu s even if msaa is
506 // requested, this ImageDesc describes the resolved texutre. Therefore we al ways have samples set 508 // requested, this ImageDesc describes the resolved texutre. Therefore we al ways have samples set
507 // to 1. 509 // to 1.
508 GrVkImage::ImageDesc imageDesc; 510 GrVkImage::ImageDesc imageDesc;
509 imageDesc.fImageType = VK_IMAGE_TYPE_2D; 511 imageDesc.fImageType = VK_IMAGE_TYPE_2D;
510 imageDesc.fFormat = pixelFormat; 512 imageDesc.fFormat = pixelFormat;
511 imageDesc.fWidth = desc.fWidth; 513 imageDesc.fWidth = desc.fWidth;
512 imageDesc.fHeight = desc.fHeight; 514 imageDesc.fHeight = desc.fHeight;
513 imageDesc.fLevels = 1; 515 imageDesc.fLevels = 1;
(...skipping 13 matching lines...) Expand all
527 this->clear(rect, GrColor_TRANSPARENT_BLACK, tex->asRenderTarget()); 529 this->clear(rect, GrColor_TRANSPARENT_BLACK, tex->asRenderTarget());
528 #endif 530 #endif
529 } else { 531 } else {
530 tex = GrVkTexture::CreateNewTexture(this, desc, lifeCycle, imageDesc); 532 tex = GrVkTexture::CreateNewTexture(this, desc, lifeCycle, imageDesc);
531 } 533 }
532 534
533 if (!tex) { 535 if (!tex) {
534 return nullptr; 536 return nullptr;
535 } 537 }
536 538
537 if (srcData) { 539 // TODO: We're ignoring MIP levels here.
538 if (!this->uploadTexData(tex, 0, 0, desc.fWidth, desc.fHeight, desc.fCon fig, srcData, 540 if (!texels.empty()) {
539 rowBytes)) { 541 if (!this->uploadTexData(tex, 0, 0, desc.fWidth, desc.fHeight, desc.fCon fig,
542 texels.begin()->fPixels, texels.begin()->fRowBy tes)) {
540 tex->unref(); 543 tex->unref();
541 return nullptr; 544 return nullptr;
542 } 545 }
543 } 546 }
544 547
545 return tex; 548 return tex;
546 } 549 }
547 550
548 //////////////////////////////////////////////////////////////////////////////// 551 ////////////////////////////////////////////////////////////////////////////////
549 552
(...skipping 852 matching lines...) Expand 10 before | Expand all | Expand 10 after
1402 int set_a_break_pt_here = 9; 1405 int set_a_break_pt_here = 9;
1403 aglSwapBuffers(aglGetCurrentContext()); 1406 aglSwapBuffers(aglGetCurrentContext());
1404 #elif defined(SK_BUILD_FOR_WIN32) 1407 #elif defined(SK_BUILD_FOR_WIN32)
1405 SwapBuf(); 1408 SwapBuf();
1406 int set_a_break_pt_here = 9; 1409 int set_a_break_pt_here = 9;
1407 SwapBuf(); 1410 SwapBuf();
1408 #endif 1411 #endif
1409 #endif 1412 #endif
1410 } 1413 }
1411 1414
OLDNEW
« no previous file with comments | « src/gpu/vk/GrVkGpu.h ('k') | src/gpu/vk/GrVkTexture.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698