Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Copyright © 2014 Broadcom
  3.  * Copyright (C) 2012 Rob Clark <robclark@freedesktop.org>
  4.  *
  5.  * Permission is hereby granted, free of charge, to any person obtaining a
  6.  * copy of this software and associated documentation files (the "Software"),
  7.  * to deal in the Software without restriction, including without limitation
  8.  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  9.  * and/or sell copies of the Software, and to permit persons to whom the
  10.  * Software is furnished to do so, subject to the following conditions:
  11.  *
  12.  * The above copyright notice and this permission notice (including the next
  13.  * paragraph) shall be included in all copies or substantial portions of the
  14.  * Software.
  15.  *
  16.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  17.  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  18.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  19.  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  20.  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  21.  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  22.  * IN THE SOFTWARE.
  23.  */
  24.  
  25. #ifndef VC4_RESOURCE_H
  26. #define VC4_RESOURCE_H
  27.  
  28. #include "vc4_screen.h"
  29. #include "vc4_packet.h"
  30. #include "util/u_transfer.h"
  31.  
  32. struct vc4_transfer {
  33.         struct pipe_transfer base;
  34.         void *map;
  35. };
  36.  
  37. struct vc4_resource_slice {
  38.         uint32_t offset;
  39.         uint32_t stride;
  40.         uint32_t size;
  41.         /** One of VC4_TILING_FORMAT_* */
  42.         uint8_t tiling;
  43. };
  44.  
  45. struct vc4_surface {
  46.         struct pipe_surface base;
  47.         uint32_t offset;
  48.         uint32_t stride;
  49.         uint8_t tiling;
  50. };
  51.  
  52. struct vc4_resource {
  53.         struct u_resource base;
  54.         struct vc4_bo *bo;
  55.         struct vc4_resource_slice slices[VC4_MAX_MIP_LEVELS];
  56.         uint32_t cube_map_stride;
  57.         int cpp;
  58.         bool tiled;
  59.         /** One of VC4_TEXTURE_TYPE_* */
  60.         enum vc4_texture_data_type vc4_format;
  61.  
  62.         /**
  63.          * Number of times the resource has been written to.
  64.          *
  65.          * This is used to track when we need to update this shadow resource
  66.          * from its parent in the case of GL_TEXTURE_BASE_LEVEL (which we
  67.          * can't support in hardware) or GL_UNSIGNED_INTEGER index buffers.
  68.          */
  69.         uint64_t writes;
  70.  
  71.         /**
  72.          * Resource containing the non-GL_TEXTURE_BASE_LEVEL-rebased texture
  73.          * contents, or the 4-byte index buffer.
  74.          *
  75.          * If the parent is set for an texture, then this resource is actually
  76.          * the texture contents just starting from the sampler_view's
  77.          * first_level.
  78.          *
  79.          * If the parent is set for an index index buffer, then this resource
  80.          * is actually a shadow containing a 2-byte index buffer starting from
  81.          * the ib's offset.
  82.          */
  83.         struct pipe_resource *shadow_parent;
  84. };
  85.  
  86. static INLINE struct vc4_resource *
  87. vc4_resource(struct pipe_resource *prsc)
  88. {
  89.         return (struct vc4_resource *)prsc;
  90. }
  91.  
  92. static INLINE struct vc4_surface *
  93. vc4_surface(struct pipe_surface *psurf)
  94. {
  95.         return (struct vc4_surface *)psurf;
  96. }
  97.  
  98. static INLINE struct vc4_transfer *
  99. vc4_transfer(struct pipe_transfer *ptrans)
  100. {
  101.         return (struct vc4_transfer *)ptrans;
  102. }
  103.  
  104. void vc4_resource_screen_init(struct pipe_screen *pscreen);
  105. void vc4_resource_context_init(struct pipe_context *pctx);
  106. struct pipe_resource *vc4_resource_create(struct pipe_screen *pscreen,
  107.                                           const struct pipe_resource *tmpl);
  108. void vc4_update_shadow_baselevel_texture(struct pipe_context *pctx,
  109.                                          struct pipe_sampler_view *view);
  110. void vc4_update_shadow_index_buffer(struct pipe_context *pctx,
  111.                                     const struct pipe_index_buffer *ib);
  112. void vc4_dump_surface(struct pipe_surface *psurf);
  113.  
  114. #endif /* VC4_RESOURCE_H */
  115.