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

Side by Side Diff: src/gpu/GrGpu.h

Issue 1249543003: Creating functions for uploading a mipmapped texture. (Closed) Base URL: https://chromium.googlesource.com/skia.git@master
Patch Set: Fixing iOS. Created 4 years, 11 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
OLDNEW
1 /* 1 /*
2 * Copyright 2011 Google Inc. 2 * Copyright 2011 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 #ifndef GrGpu_DEFINED 8 #ifndef GrGpu_DEFINED
9 #define GrGpu_DEFINED 9 #define GrGpu_DEFINED
10 10
11 #include "GrPipelineBuilder.h" 11 #include "GrPipelineBuilder.h"
12 #include "GrProgramDesc.h" 12 #include "GrProgramDesc.h"
13 #include "GrStencil.h" 13 #include "GrStencil.h"
14 #include "GrTextureParamsAdjuster.h" 14 #include "GrTextureParamsAdjuster.h"
15 #include "GrXferProcessor.h" 15 #include "GrXferProcessor.h"
16 #include "SkMipMapLevel.h"
16 #include "SkPath.h" 17 #include "SkPath.h"
18 #include "SkTArray.h"
17 19
18 class GrBatchTracker; 20 class GrBatchTracker;
19 class GrContext; 21 class GrContext;
20 class GrGLContext; 22 class GrGLContext;
21 class GrIndexBuffer; 23 class GrIndexBuffer;
22 class GrNonInstancedVertices; 24 class GrNonInstancedVertices;
23 class GrPath; 25 class GrPath;
24 class GrPathRange; 26 class GrPathRange;
25 class GrPathRenderer; 27 class GrPathRenderer;
26 class GrPathRendererChain; 28 class GrPathRendererChain;
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 void markContextDirty(uint32_t state = kAll_GrBackendState) { fResetBits |= state; } 76 void markContextDirty(uint32_t state = kAll_GrBackendState) { fResetBits |= state; }
75 77
76 /** 78 /**
77 * Creates a texture object. If kRenderTarget_GrSurfaceFlag the texture can 79 * Creates a texture object. If kRenderTarget_GrSurfaceFlag the texture can
78 * be used as a render target by calling GrTexture::asRenderTarget(). Not al l 80 * be used as a render target by calling GrTexture::asRenderTarget(). Not al l
79 * pixel configs can be used as render targets. Support for configs as textu res 81 * pixel configs can be used as render targets. Support for configs as textu res
80 * or render targets can be checked using GrCaps. 82 * or render targets can be checked using GrCaps.
81 * 83 *
82 * @param desc describes the texture to be created. 84 * @param desc describes the texture to be created.
83 * @param budgeted does this texture count against the resource cache bud get? 85 * @param budgeted does this texture count against the resource cache bud get?
84 * @param srcData texel data to load texture. Begins with full-size 86 * @param texels array of mipmap levels containing texel data to load.
85 * palette data for paletted textures. For compressed 87 * Begins with full-size palette data for paletted textur es.
86 * formats it contains the compressed pixel data. Otherwi se, 88 * For compressed formats it contains the compressed pixe l data.
87 * it contains width*height texels. If nullptr texture da ta 89 * Otherwise, it contains width*height texels. If there i s only one
88 * is uninitialized. 90 * element and it contains nullptr fTexels, texture data is
89 * @param rowBytes the number of bytes between consecutive rows. Zero 91 * uninitialized.
90 * means rows are tightly packed. This field is ignored 92 * @return The texture object if successful, otherwise nullptr.
91 * for compressed formats. 93 */
94 GrTexture* createTexture(const GrSurfaceDesc& desc, bool budgeted,
95 const SkTArray<SkMipMapLevel>& texels);
96
97 /**
98 * This function is a shim which creates a SkTArray<SkMipMapLevel> of size 1 .
99 * It then calls createTexture with that SkTArray.
92 * 100 *
93 * @return The texture object if successful, otherwise nullptr. 101 * @param srcData texel data to load texture. Begins with full-size
102 * palette data for paletted texture. For compressed
103 * formats it contains the compressed pixel data. Otherwise,
104 * it contains width*height texels. If nullptr texture data
105 * is uninitialized.
106 * @param rowBytes the number of bytes between consecutive rows. Zero
107 * means rows are tightly packed. This field is ignored
108 * for compressed pixel formats.
109 * @return The texture object if successful, otherwise, nullptr.
94 */ 110 */
95 GrTexture* createTexture(const GrSurfaceDesc& desc, bool budgeted, 111 GrTexture* createTexture(const GrSurfaceDesc& desc, bool budgeted,
96 const void* srcData, size_t rowBytes); 112 const void* srcData, size_t rowBytes);
97 113
98 /** 114 /**
99 * Implements GrContext::wrapBackendTexture 115 * Implements GrContext::wrapBackendTexture
100 */ 116 */
101 GrTexture* wrapBackendTexture(const GrBackendTextureDesc&, GrWrapOwnership); 117 GrTexture* wrapBackendTexture(const GrBackendTextureDesc&, GrWrapOwnership);
102 118
103 /** 119 /**
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
187 203
188 /** 204 /**
189 * Used to negotiate whether and how an intermediate draw should or must be performed before 205 * Used to negotiate whether and how an intermediate draw should or must be performed before
190 * a readPixels call. If this returns false then GrGpu could not deduce an i ntermediate draw 206 * a readPixels call. If this returns false then GrGpu could not deduce an i ntermediate draw
191 * that would allow a successful readPixels call. The passed width, height, and rowBytes, 207 * that would allow a successful readPixels call. The passed width, height, and rowBytes,
192 * must be non-zero and already reflect clipping to the src bounds. 208 * must be non-zero and already reflect clipping to the src bounds.
193 */ 209 */
194 bool getReadPixelsInfo(GrSurface* srcSurface, int readWidth, int readHeight, size_t rowBytes, 210 bool getReadPixelsInfo(GrSurface* srcSurface, int readWidth, int readHeight, size_t rowBytes,
195 GrPixelConfig readConfig, DrawPreference*, ReadPixelT empDrawInfo*); 211 GrPixelConfig readConfig, DrawPreference*, ReadPixelT empDrawInfo*);
196 212
197 /** Info struct returned by getWritePixelsInfo about performing an intermedi ate draw in order 213 /** Info struct returned by getWritePixelsInfo about performing an intermedi ate draw in order
198 to write pixels to a GrSurface for either performance or correctness rea sons. */ 214 to write pixels to a GrSurface for either performance or correctness rea sons. */
199 struct WritePixelTempDrawInfo { 215 struct WritePixelTempDrawInfo {
200 /** If the GrGpu is requesting that the caller upload to an intermediate surface and draw 216 /** If the GrGpu is requesting that the caller upload to an intermediate surface and draw
201 that to the dst then this is the descriptor for the intermediate sur face. The caller 217 that to the dst then this is the descriptor for the intermediate sur face. The caller
202 should upload the pixels such that the upper left pixel of the uploa d rect is at 0,0 in 218 should upload the pixels such that the upper left pixel of the uploa d rect is at 0,0 in
203 the intermediate surface.*/ 219 the intermediate surface.*/
204 GrSurfaceDesc fTempSurfaceDesc; 220 GrSurfaceDesc fTempSurfaceDesc;
205 /** If set, fTempSurfaceDesc's config will be a R/B swap of the src pixe l config. The caller 221 /** If set, fTempSurfaceDesc's config will be a R/B swap of the src pixe l config. The caller
206 should upload the pixels as is such that R and B will be swapped in the intermediate 222 should upload the pixels as is such that R and B will be swapped in the intermediate
207 surface. When the intermediate is drawn to the dst the shader should swap R/B again 223 surface. When the intermediate is drawn to the dst the shader should swap R/B again
208 such that the correct swizzle results in the dst. This is done to wo rk around either 224 such that the correct swizzle results in the dst. This is done to wo rk around either
209 performance or API restrictions in the backend 3D API implementation . */ 225 performance or API restrictions in the backend 3D API implementation . */
210 bool fSwapRAndB; 226 bool fSwapRAndB;
211 }; 227 };
212 228
213 /** 229 /**
214 * Used to negotiate whether and how an intermediate surface should be used to write pixels to 230 * Used to negotiate whether and how an intermediate surface should be used to write pixels to
215 * a GrSurface. If this returns false then GrGpu could not deduce an interme diate draw 231 * a GrSurface. If this returns false then GrGpu could not deduce an interme diate draw
216 * that would allow a successful transfer of the src pixels to the dst. The passed width, 232 * that would allow a successful transfer of the src pixels to the dst. The passed width,
217 * height, and rowBytes, must be non-zero and already reflect clipping to th e dst bounds. 233 * height, and rowBytes, must be non-zero and already reflect clipping to th e dst bounds.
218 */ 234 */
219 bool getWritePixelsInfo(GrSurface* dstSurface, int width, int height, size_t rowBytes, 235 bool getWritePixelsInfo(GrSurface* dstSurface, int width, int height,
220 GrPixelConfig srcConfig, DrawPreference*, WritePixel TempDrawInfo*); 236 GrPixelConfig srcConfig, DrawPreference*, WritePixel TempDrawInfo*);
221 237
222 /** 238 /**
223 * Reads a rectangle of pixels from a render target. 239 * Reads a rectangle of pixels from a render target.
224 * 240 *
225 * @param surface The surface to read from 241 * @param surface The surface to read from
226 * @param left left edge of the rectangle to read (inclusive) 242 * @param left left edge of the rectangle to read (inclusive)
227 * @param top top edge of the rectangle to read (inclusive) 243 * @param top top edge of the rectangle to read (inclusive)
228 * @param width width of rectangle to read in pixels. 244 * @param width width of rectangle to read in pixels.
229 * @param height height of rectangle to read in pixels. 245 * @param height height of rectangle to read in pixels.
(...skipping 14 matching lines...) Expand all
244 260
245 /** 261 /**
246 * Updates the pixels in a rectangle of a surface. 262 * Updates the pixels in a rectangle of a surface.
247 * 263 *
248 * @param surface The surface to write to. 264 * @param surface The surface to write to.
249 * @param left left edge of the rectangle to write (inclusive) 265 * @param left left edge of the rectangle to write (inclusive)
250 * @param top top edge of the rectangle to write (inclusive) 266 * @param top top edge of the rectangle to write (inclusive)
251 * @param width width of rectangle to write in pixels. 267 * @param width width of rectangle to write in pixels.
252 * @param height height of rectangle to write in pixels. 268 * @param height height of rectangle to write in pixels.
253 * @param config the pixel config of the source buffer 269 * @param config the pixel config of the source buffer
254 * @param buffer memory to read pixels from 270 * @param texels array of mipmap levels containing texture data
255 * @param rowBytes number of bytes between consecutive rows. Zero
256 * means rows are tightly packed.
257 */ 271 */
258 bool writePixels(GrSurface* surface, 272 bool writePixels(GrSurface* surface,
259 int left, int top, int width, int height, 273 int left, int top, int width, int height,
274 GrPixelConfig config,
275 const SkTArray<SkMipMapLevel>& texels);
276
277 /**
278 * This function is a shim which creates a SkTArray<SkMipMapLevel> of size 1 .
279 * It then calls writePixels with that SkTArray.
280 *
281 * @param buffer memory to read pixels from.
282 * @param rowBytes number of bytes between consecutive rows. Zero
283 * means rows are tightly packed.
284 */
285 bool writePixels(GrSurface* surface,
286 int left, int top, int width, int height,
260 GrPixelConfig config, const void* buffer, 287 GrPixelConfig config, const void* buffer,
261 size_t rowBytes); 288 size_t rowBytes);
262 289
263 /** 290 /**
264 * Updates the pixels in a rectangle of a surface using a GrTransferBuffer 291 * Updates the pixels in a rectangle of a surface using a GrTransferBuffer
265 * 292 *
266 * @param surface The surface to write to. 293 * @param surface The surface to write to.
267 * @param left left edge of the rectangle to write (inclusive) 294 * @param left left edge of the rectangle to write (inclusive)
268 * @param top top edge of the rectangle to write (inclusive) 295 * @param top top edge of the rectangle to write (inclusive)
269 * @param width width of rectangle to write in pixels. 296 * @param width width of rectangle to write in pixels.
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
477 virtual void onResetContext(uint32_t resetBits) = 0; 504 virtual void onResetContext(uint32_t resetBits) = 0;
478 505
479 // Called before certain draws in order to guarantee coherent results from d st reads. 506 // Called before certain draws in order to guarantee coherent results from d st reads.
480 virtual void xferBarrier(GrRenderTarget*, GrXferBarrierType) = 0; 507 virtual void xferBarrier(GrRenderTarget*, GrXferBarrierType) = 0;
481 508
482 // overridden by backend-specific derived class to create objects. 509 // overridden by backend-specific derived class to create objects.
483 // Texture size and sample size will have already been validated in base cla ss before 510 // Texture size and sample size will have already been validated in base cla ss before
484 // onCreateTexture/CompressedTexture are called. 511 // onCreateTexture/CompressedTexture are called.
485 virtual GrTexture* onCreateTexture(const GrSurfaceDesc& desc, 512 virtual GrTexture* onCreateTexture(const GrSurfaceDesc& desc,
486 GrGpuResource::LifeCycle lifeCycle, 513 GrGpuResource::LifeCycle lifeCycle,
487 const void* srcData, size_t rowBytes) = 0 ; 514 const SkTArray<SkMipMapLevel>& texels) = 0;
488 virtual GrTexture* onCreateCompressedTexture(const GrSurfaceDesc& desc, 515 virtual GrTexture* onCreateCompressedTexture(const GrSurfaceDesc& desc,
489 GrGpuResource::LifeCycle lifeCy cle, 516 GrGpuResource::LifeCycle lifeCy cle,
490 const void* srcData) = 0; 517 const SkTArray<SkMipMapLevel>& texels) = 0;
518
491 virtual GrTexture* onWrapBackendTexture(const GrBackendTextureDesc&, GrWrapO wnership) = 0; 519 virtual GrTexture* onWrapBackendTexture(const GrBackendTextureDesc&, GrWrapO wnership) = 0;
492 virtual GrRenderTarget* onWrapBackendRenderTarget(const GrBackendRenderTarge tDesc&, 520 virtual GrRenderTarget* onWrapBackendRenderTarget(const GrBackendRenderTarge tDesc&,
493 GrWrapOwnership) = 0; 521 GrWrapOwnership) = 0;
494 virtual GrVertexBuffer* onCreateVertexBuffer(size_t size, bool dynamic) = 0; 522 virtual GrVertexBuffer* onCreateVertexBuffer(size_t size, bool dynamic) = 0;
495 virtual GrIndexBuffer* onCreateIndexBuffer(size_t size, bool dynamic) = 0; 523 virtual GrIndexBuffer* onCreateIndexBuffer(size_t size, bool dynamic) = 0;
496 virtual GrTransferBuffer* onCreateTransferBuffer(size_t size, TransferType t ype) = 0; 524 virtual GrTransferBuffer* onCreateTransferBuffer(size_t size, TransferType t ype) = 0;
497 525
498 // overridden by backend-specific derived class to perform the clear. 526 // overridden by backend-specific derived class to perform the clear.
499 virtual void onClear(GrRenderTarget*, const SkIRect& rect, GrColor color) = 0; 527 virtual void onClear(GrRenderTarget*, const SkIRect& rect, GrColor color) = 0;
500 528
501 529
502 // Overridden by backend specific classes to perform a clear of the stencil clip bits. This is 530 // Overridden by backend specific classes to perform a clear of the stencil clip bits. This is
503 // ONLY used by the the clip target 531 // ONLY used by the the clip target
504 virtual void onClearStencilClip(GrRenderTarget*, const SkIRect& rect, bool i nsideClip) = 0; 532 virtual void onClearStencilClip(GrRenderTarget*, const SkIRect& rect, bool i nsideClip) = 0;
505 533
506 // overridden by backend-specific derived class to perform the draw call. 534 // overridden by backend-specific derived class to perform the draw call.
507 virtual void onDraw(const DrawArgs&, const GrNonInstancedVertices&) = 0; 535 virtual void onDraw(const DrawArgs&, const GrNonInstancedVertices&) = 0;
508 536
509 virtual bool onGetReadPixelsInfo(GrSurface* srcSurface, int readWidth, int r eadHeight, 537 virtual bool onGetReadPixelsInfo(GrSurface* srcSurface, int readWidth, int r eadHeight,
510 size_t rowBytes, GrPixelConfig readConfig, DrawPreference*, 538 size_t rowBytes, GrPixelConfig readConfig, DrawPreference*,
511 ReadPixelTempDrawInfo*) = 0; 539 ReadPixelTempDrawInfo*) = 0;
512 virtual bool onGetWritePixelsInfo(GrSurface* dstSurface, int width, int heig ht, size_t rowBytes, 540 virtual bool onGetWritePixelsInfo(GrSurface* dstSurface, int width, int heig ht,
513 GrPixelConfig srcConfig, DrawPreference*, 541 GrPixelConfig srcConfig, DrawPreference*,
514 WritePixelTempDrawInfo*) = 0; 542 WritePixelTempDrawInfo*) = 0;
515 543
516 // overridden by backend-specific derived class to perform the surface read 544 // overridden by backend-specific derived class to perform the surface read
517 virtual bool onReadPixels(GrSurface*, 545 virtual bool onReadPixels(GrSurface*,
518 int left, int top, 546 int left, int top,
519 int width, int height, 547 int width, int height,
520 GrPixelConfig, 548 GrPixelConfig,
521 void* buffer, 549 void* buffer,
522 size_t rowBytes) = 0; 550 size_t rowBytes) = 0;
523 551
524 // overridden by backend-specific derived class to perform the surface write 552 // overridden by backend-specific derived class to perform the surface write
525 virtual bool onWritePixels(GrSurface*, 553 virtual bool onWritePixels(GrSurface*,
526 int left, int top, int width, int height, 554 int left, int top, int width, int height,
527 GrPixelConfig config, const void* buffer, 555 GrPixelConfig config,
528 size_t rowBytes) = 0; 556 const SkTArray<SkMipMapLevel>& texels) = 0;
529 557
530 // overridden by backend-specific derived class to perform the surface write 558 // overridden by backend-specific derived class to perform the surface write
531 virtual bool onTransferPixels(GrSurface*, 559 virtual bool onTransferPixels(GrSurface*,
532 int left, int top, int width, int height, 560 int left, int top, int width, int height,
533 GrPixelConfig config, GrTransferBuffer* buffer , 561 GrPixelConfig config, GrTransferBuffer* buffer ,
534 size_t offset, size_t rowBytes) = 0; 562 size_t offset, size_t rowBytes) = 0;
535 563
536 // overridden by backend-specific derived class to perform the resolve 564 // overridden by backend-specific derived class to perform the resolve
537 virtual void onResolveRenderTarget(GrRenderTarget* target) = 0; 565 virtual void onResolveRenderTarget(GrRenderTarget* target) = 0;
538 566
(...skipping 12 matching lines...) Expand all
551 ResetTimestamp fResetTi mestamp; 579 ResetTimestamp fResetTi mestamp;
552 uint32_t fResetBi ts; 580 uint32_t fResetBi ts;
553 // The context owns us, not vice-versa, so this ptr is not ref'ed by Gpu. 581 // The context owns us, not vice-versa, so this ptr is not ref'ed by Gpu.
554 GrContext* fContext ; 582 GrContext* fContext ;
555 583
556 friend class GrPathRendering; 584 friend class GrPathRendering;
557 typedef SkRefCnt INHERITED; 585 typedef SkRefCnt INHERITED;
558 }; 586 };
559 587
560 #endif 588 #endif
OLDNEW
« no previous file with comments | « src/gpu/GrContext.cpp ('k') | src/gpu/GrGpu.cpp » ('j') | src/gpu/GrTextureProvider.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698