Home | History | Annotate | Download | only in vk
      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
     70