Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Copyright © 2012 Intel Corporation
  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.  
  24. #include "intel_batchbuffer.h"
  25.  
  26. #include "brw_context.h"
  27. #include "brw_defines.h"
  28. #include "brw_multisample_state.h"
  29.  
  30. /**
  31.  * 3DSTATE_MULTISAMPLE
  32.  */
  33. void
  34. gen8_emit_3dstate_multisample(struct brw_context *brw, unsigned num_samples)
  35. {
  36.    assert(num_samples <= 16);
  37.  
  38.    unsigned log2_samples = ffs(MAX2(num_samples, 1)) - 1;
  39.  
  40.    BEGIN_BATCH(2);
  41.    OUT_BATCH(GEN8_3DSTATE_MULTISAMPLE << 16 | (2 - 2));
  42.    OUT_BATCH(MS_PIXEL_LOCATION_CENTER | log2_samples << 1);
  43.    ADVANCE_BATCH();
  44. }
  45.  
  46. /**
  47.  * 3DSTATE_SAMPLE_PATTERN
  48.  */
  49. void
  50. gen8_emit_3dstate_sample_pattern(struct brw_context *brw)
  51. {
  52.    BEGIN_BATCH(9);
  53.    OUT_BATCH(_3DSTATE_SAMPLE_PATTERN << 16 | (9 - 2));
  54.  
  55.    /* 16x MSAA
  56.     * XXX: Need to program these.
  57.     */
  58.    OUT_BATCH(0);
  59.    OUT_BATCH(0);
  60.    OUT_BATCH(0);
  61.    OUT_BATCH(0);
  62.  
  63.    /* 8x MSAA */
  64.    OUT_BATCH(brw_multisample_positions_8x[1]); /* sample positions 7654 */
  65.    OUT_BATCH(brw_multisample_positions_8x[0]); /* sample positions 3210 */
  66.  
  67.    /* 4x MSAA */
  68.    OUT_BATCH(brw_multisample_positions_4x);
  69.  
  70.    /* 1x and 2x MSAA */
  71.    OUT_BATCH(brw_multisample_positions_1x_2x);
  72.    ADVANCE_BATCH();
  73. }
  74.  
  75.  
  76. static void
  77. upload_multisample_state(struct brw_context *brw)
  78. {
  79.    gen8_emit_3dstate_multisample(brw, brw->num_samples);
  80.    gen6_emit_3dstate_sample_mask(brw, gen6_determine_sample_mask(brw));
  81. }
  82.  
  83. const struct brw_tracked_state gen8_multisample_state = {
  84.    .dirty = {
  85.       .mesa = _NEW_MULTISAMPLE,
  86.       .brw = BRW_NEW_CONTEXT |
  87.              BRW_NEW_NUM_SAMPLES,
  88.    },
  89.    .emit = upload_multisample_state
  90. };
  91.