Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Copyright 2011 Joakim Sindholt <opensource@zhasha.com>
  3.  *
  4.  * Permission is hereby granted, free of charge, to any person obtaining a
  5.  * copy of this software and associated documentation files (the "Software"),
  6.  * to deal in the Software without restriction, including without limitation
  7.  * on the rights to use, copy, modify, merge, publish, distribute, sub
  8.  * license, and/or sell copies of the Software, and to permit persons to whom
  9.  * the Software is furnished to do so, subject to the following conditions:
  10.  *
  11.  * The above copyright notice and this permission notice (including the next
  12.  * paragraph) shall be included in all copies or substantial portions of the
  13.  * Software.
  14.  *
  15.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  16.  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17.  * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
  18.  * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
  19.  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  20.  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  21.  * USE OR OTHER DEALINGS IN THE SOFTWARE. */
  22.  
  23. #ifndef _NINE_VOLUME9_H_
  24. #define _NINE_VOLUME9_H_
  25.  
  26. #include "iunknown.h"
  27.  
  28. #include "pipe/p_state.h"
  29. #include "util/u_inlines.h"
  30.  
  31. struct util_hash_table;
  32.  
  33. struct NineDevice9;
  34.  
  35. struct NineVolume9
  36. {
  37.     struct NineUnknown base;
  38.  
  39.     struct pipe_resource *resource;
  40.     unsigned level;
  41.     unsigned level_actual;
  42.  
  43.     uint8_t *data; /* system memory backing */
  44.  
  45.     D3DVOLUME_DESC desc;
  46.     struct pipe_resource info;
  47.     unsigned stride;
  48.     unsigned layer_stride;
  49.  
  50.     struct pipe_transfer *transfer;
  51.     unsigned lock_count;
  52.  
  53.     struct pipe_box dirty_box[2];
  54.  
  55.     struct pipe_context *pipe;
  56.  
  57.     /* for [GS]etPrivateData/FreePrivateData */
  58.     struct util_hash_table *pdata;
  59. };
  60. static INLINE struct NineVolume9 *
  61. NineVolume9( void *data )
  62. {
  63.     return (struct NineVolume9 *)data;
  64. }
  65.  
  66. HRESULT
  67. NineVolume9_new( struct NineDevice9 *pDevice,
  68.                  struct NineUnknown *pContainer,
  69.                  struct pipe_resource *pResource,
  70.                  unsigned Level,
  71.                  D3DVOLUME_DESC *pDesc,
  72.                  struct NineVolume9 **ppOut );
  73.  
  74. /*** Nine private ***/
  75.  
  76. static INLINE void
  77. NineVolume9_SetResource( struct NineVolume9 *This,
  78.                          struct pipe_resource *resource, unsigned level )
  79. {
  80.     This->level = level;
  81.     pipe_resource_reference(&This->resource, resource);
  82. }
  83.  
  84. void
  85. NineVolume9_AddDirtyRegion( struct NineVolume9 *This,
  86.                             const struct pipe_box *box );
  87.  
  88. static INLINE void
  89. NineVolume9_ClearDirtyRegion( struct NineVolume9 *This )
  90. {
  91.     memset(&This->dirty_box, 0, sizeof(This->dirty_box));
  92. }
  93.  
  94. HRESULT
  95. NineVolume9_CopyVolume( struct NineVolume9 *This,
  96.                         struct NineVolume9 *From,
  97.                         unsigned dstx, unsigned dsty, unsigned dstz,
  98.                         struct pipe_box *pSrcBox );
  99.  
  100. HRESULT
  101. NineVolume9_UploadSelf( struct NineVolume9 *This );
  102.  
  103.  
  104. /*** Direct3D public ***/
  105.  
  106. HRESULT WINAPI
  107. NineVolume9_SetPrivateData( struct NineVolume9 *This,
  108.                             REFGUID refguid,
  109.                             const void *pData,
  110.                             DWORD SizeOfData,
  111.                             DWORD Flags );
  112.  
  113. HRESULT WINAPI
  114. NineVolume9_GetPrivateData( struct NineVolume9 *This,
  115.                             REFGUID refguid,
  116.                             void *pData,
  117.                             DWORD *pSizeOfData );
  118.  
  119. HRESULT WINAPI
  120. NineVolume9_FreePrivateData( struct NineVolume9 *This,
  121.                              REFGUID refguid );
  122.  
  123. HRESULT WINAPI
  124. NineVolume9_GetContainer( struct NineVolume9 *This,
  125.                           REFIID riid,
  126.                           void **ppContainer );
  127.  
  128. HRESULT WINAPI
  129. NineVolume9_GetDesc( struct NineVolume9 *This,
  130.                      D3DVOLUME_DESC *pDesc );
  131.  
  132. HRESULT WINAPI
  133. NineVolume9_LockBox( struct NineVolume9 *This,
  134.                      D3DLOCKED_BOX *pLockedVolume,
  135.                      const D3DBOX *pBox,
  136.                      DWORD Flags );
  137.  
  138. HRESULT WINAPI
  139. NineVolume9_UnlockBox( struct NineVolume9 *This );
  140.  
  141. #endif /* _NINE_VOLUME9_H_ */
  142.