| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "cc/resources/resource_provider.h" | 5 #include "cc/resources/resource_provider.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 79 } | 79 } |
| 80 | 80 |
| 81 GLenum TextureToStorageFormat(ResourceFormat format) { | 81 GLenum TextureToStorageFormat(ResourceFormat format) { |
| 82 GLenum storage_format = GL_RGBA8_OES; | 82 GLenum storage_format = GL_RGBA8_OES; |
| 83 switch (format) { | 83 switch (format) { |
| 84 case RGBA_8888: | 84 case RGBA_8888: |
| 85 break; | 85 break; |
| 86 case BGRA_8888: | 86 case BGRA_8888: |
| 87 storage_format = GL_BGRA8_EXT; | 87 storage_format = GL_BGRA8_EXT; |
| 88 break; | 88 break; |
| 89 case RGBA_F16: |
| 90 storage_format = GL_RGBA16F_EXT; |
| 91 break; |
| 89 case RGBA_4444: | 92 case RGBA_4444: |
| 90 case ALPHA_8: | 93 case ALPHA_8: |
| 91 case LUMINANCE_8: | 94 case LUMINANCE_8: |
| 92 case RGB_565: | 95 case RGB_565: |
| 93 case ETC1: | 96 case ETC1: |
| 94 case RED_8: | 97 case RED_8: |
| 95 case LUMINANCE_F16: | 98 case LUMINANCE_F16: |
| 96 NOTREACHED(); | 99 NOTREACHED(); |
| 97 break; | 100 break; |
| 98 } | 101 } |
| 99 | 102 |
| 100 return storage_format; | 103 return storage_format; |
| 101 } | 104 } |
| 102 | 105 |
| 103 bool IsFormatSupportedForStorage(ResourceFormat format, bool use_bgra) { | 106 bool IsFormatSupportedForStorage(ResourceFormat format, bool use_bgra) { |
| 104 switch (format) { | 107 switch (format) { |
| 105 case RGBA_8888: | 108 case RGBA_8888: |
| 109 case RGBA_F16: |
| 106 return true; | 110 return true; |
| 107 case BGRA_8888: | 111 case BGRA_8888: |
| 108 return use_bgra; | 112 return use_bgra; |
| 109 case RGBA_4444: | 113 case RGBA_4444: |
| 110 case ALPHA_8: | 114 case ALPHA_8: |
| 111 case LUMINANCE_8: | 115 case LUMINANCE_8: |
| 112 case RGB_565: | 116 case RGB_565: |
| 113 case ETC1: | 117 case ETC1: |
| 114 case RED_8: | 118 case RED_8: |
| 115 case LUMINANCE_F16: | 119 case LUMINANCE_F16: |
| 116 return false; | 120 return false; |
| 117 } | 121 } |
| 118 return false; | 122 return false; |
| 119 } | 123 } |
| 120 | 124 |
| 121 GrPixelConfig ToGrPixelConfig(ResourceFormat format) { | 125 GrPixelConfig ToGrPixelConfig(ResourceFormat format) { |
| 122 switch (format) { | 126 switch (format) { |
| 123 case RGBA_8888: | 127 case RGBA_8888: |
| 124 return kRGBA_8888_GrPixelConfig; | 128 return kRGBA_8888_GrPixelConfig; |
| 125 case BGRA_8888: | 129 case BGRA_8888: |
| 126 return kBGRA_8888_GrPixelConfig; | 130 return kBGRA_8888_GrPixelConfig; |
| 127 case RGBA_4444: | 131 case RGBA_4444: |
| 128 return kRGBA_4444_GrPixelConfig; | 132 return kRGBA_4444_GrPixelConfig; |
| 133 case RGBA_F16: |
| 134 return kRGBA_half_GrPixelConfig; |
| 129 default: | 135 default: |
| 130 break; | 136 break; |
| 131 } | 137 } |
| 132 DCHECK(false) << "Unsupported resource format."; | 138 DCHECK(false) << "Unsupported resource format."; |
| 133 return kSkia8888_GrPixelConfig; | 139 return kSkia8888_GrPixelConfig; |
| 134 } | 140 } |
| 135 | 141 |
| 136 class ScopedSetActiveTexture { | 142 class ScopedSetActiveTexture { |
| 137 public: | 143 public: |
| 138 ScopedSetActiveTexture(GLES2Interface* gl, GLenum unit) | 144 ScopedSetActiveTexture(GLES2Interface* gl, GLenum unit) |
| (...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 530 case LUMINANCE_8: | 536 case LUMINANCE_8: |
| 531 return true; | 537 return true; |
| 532 case BGRA_8888: | 538 case BGRA_8888: |
| 533 return caps.texture_format_bgra8888; | 539 return caps.texture_format_bgra8888; |
| 534 case ETC1: | 540 case ETC1: |
| 535 return caps.texture_format_etc1; | 541 return caps.texture_format_etc1; |
| 536 case RED_8: | 542 case RED_8: |
| 537 return caps.texture_rg; | 543 return caps.texture_rg; |
| 538 case LUMINANCE_F16: | 544 case LUMINANCE_F16: |
| 539 return caps.texture_half_float_linear; | 545 return caps.texture_half_float_linear; |
| 546 case RGBA_F16: |
| 547 // TODO(ccameron): This will always return false on pixel tests, which |
| 548 // makes it un-test-able until we upgrade Mesa. |
| 549 // https://crbug.com/687720 |
| 550 return caps.texture_half_float_linear && caps.color_buffer_float; |
| 540 } | 551 } |
| 541 | 552 |
| 542 NOTREACHED(); | 553 NOTREACHED(); |
| 543 return false; | 554 return false; |
| 544 } | 555 } |
| 545 | 556 |
| 546 bool ResourceProvider::InUseByConsumer(ResourceId id) { | 557 bool ResourceProvider::InUseByConsumer(ResourceId id) { |
| 547 Resource* resource = GetResource(id); | 558 Resource* resource = GetResource(id); |
| 548 return resource->lock_for_read_count > 0 || resource->exported_count > 0 || | 559 return resource->lock_for_read_count > 0 || resource->exported_count > 0 || |
| 549 resource->lost; | 560 resource->lost; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 569 } | 580 } |
| 570 | 581 |
| 571 ResourceId ResourceProvider::CreateResource( | 582 ResourceId ResourceProvider::CreateResource( |
| 572 const gfx::Size& size, | 583 const gfx::Size& size, |
| 573 TextureHint hint, | 584 TextureHint hint, |
| 574 ResourceFormat format, | 585 ResourceFormat format, |
| 575 const gfx::ColorSpace& color_space) { | 586 const gfx::ColorSpace& color_space) { |
| 576 DCHECK(!size.IsEmpty()); | 587 DCHECK(!size.IsEmpty()); |
| 577 switch (settings_.default_resource_type) { | 588 switch (settings_.default_resource_type) { |
| 578 case RESOURCE_TYPE_GPU_MEMORY_BUFFER: | 589 case RESOURCE_TYPE_GPU_MEMORY_BUFFER: |
| 579 // GPU memory buffers don't support LUMINANCE_F16. | 590 // GPU memory buffers don't support LUMINANCE_F16 or RGBA_F16 yet. |
| 580 if (format != LUMINANCE_F16) { | 591 if (format != LUMINANCE_F16 && format != RGBA_F16) { |
| 581 return CreateGLTexture( | 592 return CreateGLTexture( |
| 582 size, hint, RESOURCE_TYPE_GPU_MEMORY_BUFFER, format, | 593 size, hint, RESOURCE_TYPE_GPU_MEMORY_BUFFER, format, |
| 583 gfx::BufferUsage::GPU_READ_CPU_READ_WRITE, color_space); | 594 gfx::BufferUsage::GPU_READ_CPU_READ_WRITE, color_space); |
| 584 } | 595 } |
| 585 // Fall through and use a regular texture. | 596 // Fall through and use a regular texture. |
| 586 case RESOURCE_TYPE_GL_TEXTURE: | 597 case RESOURCE_TYPE_GL_TEXTURE: |
| 587 return CreateGLTexture(size, hint, RESOURCE_TYPE_GL_TEXTURE, format, | 598 return CreateGLTexture(size, hint, RESOURCE_TYPE_GL_TEXTURE, format, |
| 588 gfx::BufferUsage::GPU_READ_CPU_READ_WRITE, | 599 gfx::BufferUsage::GPU_READ_CPU_READ_WRITE, |
| 589 color_space); | 600 color_space); |
| 590 | 601 |
| (...skipping 1572 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2163 | 2174 |
| 2164 const int kImportance = 2; | 2175 const int kImportance = 2; |
| 2165 pmd->CreateSharedGlobalAllocatorDump(guid); | 2176 pmd->CreateSharedGlobalAllocatorDump(guid); |
| 2166 pmd->AddOwnershipEdge(dump->guid(), guid, kImportance); | 2177 pmd->AddOwnershipEdge(dump->guid(), guid, kImportance); |
| 2167 } | 2178 } |
| 2168 | 2179 |
| 2169 return true; | 2180 return true; |
| 2170 } | 2181 } |
| 2171 | 2182 |
| 2172 } // namespace cc | 2183 } // namespace cc |
| OLD | NEW |