Greg Daniel | 48cf268 | 2016-02-22 09:11:32 -0500 | [diff] [blame^] | 1 | /* |
| 2 | * Copyright 2015 Google Inc. |
| 3 | * |
| 4 | * Use of this source code is governed by a BSD-style license that can be |
| 5 | * found in the LICENSE file. |
| 6 | */ |
| 7 | |
| 8 | #ifndef GrVkProgramDesc_DEFINED |
| 9 | #define GrVkProgramDesc_DEFINED |
| 10 | |
| 11 | #include "GrColor.h" |
| 12 | #include "GrProgramDesc.h" |
| 13 | #include "GrGpu.h" |
| 14 | #include "GrTypesPriv.h" |
| 15 | |
| 16 | #include "shaderc/shaderc.h" |
| 17 | #include "vulkan/vulkan.h" |
| 18 | |
| 19 | class GrVkGpu; |
| 20 | class GrVkProgramDescBuilder; |
| 21 | |
| 22 | class GrVkProgramDesc : public GrProgramDesc { |
| 23 | private: |
| 24 | friend class GrVkProgramDescBuilder; |
| 25 | }; |
| 26 | |
| 27 | /** |
| 28 | * This class can be used to build a GrProgramDesc. It also provides helpers for accessing |
| 29 | * GL specific info in the header. |
| 30 | */ |
| 31 | class GrVkProgramDescBuilder { |
| 32 | public: |
| 33 | typedef GrProgramDesc::KeyHeader KeyHeader; |
| 34 | // The key, stored in fKey, is composed of five parts(first 2 are defined in the key itself): |
| 35 | // 1. uint32_t for total key length. |
| 36 | // 2. uint32_t for a checksum. |
| 37 | // 3. Header struct defined above. |
| 38 | // 4. Backend-specific information including per-processor keys and their key lengths. |
| 39 | // Each processor's key is a variable length array of uint32_t. |
| 40 | enum { |
| 41 | // Part 3. |
| 42 | kHeaderOffset = GrVkProgramDesc::kHeaderOffset, |
| 43 | kHeaderSize = SkAlign4(sizeof(KeyHeader)), |
| 44 | // Part 4. |
| 45 | // This is the offset into the backenend specific part of the key, which includes |
| 46 | // per-processor keys. |
| 47 | kProcessorKeysOffset = kHeaderOffset + kHeaderSize, |
| 48 | }; |
| 49 | |
| 50 | /** |
| 51 | * Builds a GL specific program descriptor |
| 52 | * |
| 53 | * @param GrPrimitiveProcessor The geometry |
| 54 | * @param GrPipeline The optimized drawstate. The descriptor will represent a program |
| 55 | * which this optstate can use to draw with. The optstate contains |
| 56 | * general draw information, as well as the specific color, geometry, |
| 57 | * and coverage stages which will be used to generate the GL Program for |
| 58 | * this optstate. |
| 59 | * @param GrVkGpu A GL Gpu, the caps and Gpu object are used to output processor specific |
| 60 | * parts of the descriptor. |
| 61 | * @param GrProgramDesc The built and finalized descriptor |
| 62 | **/ |
| 63 | static bool Build(GrProgramDesc*, |
| 64 | const GrPrimitiveProcessor&, |
| 65 | const GrPipeline&, |
| 66 | const GrGLSLCaps&); |
| 67 | }; |
| 68 | |
| 69 | #endif |