Home | History | Annotate | Download | only in jitter
      1 /****************************************************************************
      2 * Copyright (C) 2014-2015 Intel Corporation.   All Rights Reserved.
      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 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
      8 * and/or sell copies of the Software, and to permit persons to whom the
      9 * 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 NONINFRINGEMENT.  IN NO EVENT SHALL
     18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
     20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
     21 * IN THE SOFTWARE.
     22 *
     23 * @file streamout_jit.h
     24 *
     25 * @brief Definition of the streamout jitter
     26 *
     27 * Notes:
     28 *
     29 ******************************************************************************/
     30 #pragma once
     31 
     32 #include "common/formats.h"
     33 #include "core/state.h"
     34 
     35 //////////////////////////////////////////////////////////////////////////
     36 /// STREAMOUT_DECL - Stream decl
     37 //////////////////////////////////////////////////////////////////////////
     38 struct STREAMOUT_DECL
     39 {
     40     // Buffer that stream maps to.
     41     DWORD bufferIndex;
     42 
     43     // attribute to stream
     44     uint32_t attribSlot;
     45 
     46     // attribute component mask
     47     uint32_t componentMask;
     48 
     49     // indicates this decl is a hole
     50     bool hole;
     51 };
     52 
     53 //////////////////////////////////////////////////////////////////////////
     54 /// STREAMOUT_STREAM - Stream decls
     55 //////////////////////////////////////////////////////////////////////////
     56 struct STREAMOUT_STREAM
     57 {
     58     // numnber of decls for this stream
     59     uint32_t numDecls;
     60 
     61     // array of numDecls decls
     62     STREAMOUT_DECL decl[128];
     63 };
     64 
     65 //////////////////////////////////////////////////////////////////////////
     66 /// State required for streamout jit
     67 //////////////////////////////////////////////////////////////////////////
     68 struct STREAMOUT_COMPILE_STATE
     69 {
     70     // number of verts per primitive
     71     uint32_t numVertsPerPrim;
     72     uint32_t offsetAttribs; ///< attrib offset to subtract from all STREAMOUT_DECL::attribSlot values.
     73 
     74     uint64_t streamMask;
     75 
     76     // stream decls
     77     STREAMOUT_STREAM stream;
     78 
     79     bool operator==(const STREAMOUT_COMPILE_STATE &other) const
     80     {
     81         if (numVertsPerPrim != other.numVertsPerPrim) return false;
     82         if (stream.numDecls != other.stream.numDecls) return false;
     83 
     84         for (uint32_t i = 0; i < stream.numDecls; ++i)
     85         {
     86             if (stream.decl[i].bufferIndex != other.stream.decl[i].bufferIndex) return false;
     87             if (stream.decl[i].attribSlot != other.stream.decl[i].attribSlot) return false;
     88             if (stream.decl[i].componentMask != other.stream.decl[i].componentMask) return false;
     89             if (stream.decl[i].hole != other.stream.decl[i].hole) return false;
     90         }
     91 
     92         return true;
     93     }
     94 };
     95