Browse Source

anv/pipeline: Move emit_ms_state() to genX_pipeline_util.h

This will help sharing multisample state setting code.

Signed-off-by: Anuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
tags/13.0-branchpoint
Anuj Phogat 9 years ago
parent
commit
dc49dd7f10
2 changed files with 40 additions and 40 deletions
  1. 0
    40
      src/intel/vulkan/gen8_pipeline.c
  2. 40
    0
      src/intel/vulkan/genX_pipeline_util.h

+ 0
- 40
src/intel/vulkan/gen8_pipeline.c View File

@@ -44,46 +44,6 @@ emit_ia_state(struct anv_pipeline *pipeline,
}
}

static void
emit_ms_state(struct anv_pipeline *pipeline,
const VkPipelineMultisampleStateCreateInfo *info)
{
uint32_t samples = 1;
uint32_t log2_samples = 0;

/* From the Vulkan 1.0 spec:
* If pSampleMask is NULL, it is treated as if the mask has all bits
* enabled, i.e. no coverage is removed from fragments.
*
* 3DSTATE_SAMPLE_MASK.SampleMask is 16 bits.
*/
uint32_t sample_mask = 0xffff;

if (info) {
samples = info->rasterizationSamples;
log2_samples = __builtin_ffs(samples) - 1;
}

if (info && info->pSampleMask)
sample_mask &= info->pSampleMask[0];

anv_batch_emit(&pipeline->batch, GENX(3DSTATE_MULTISAMPLE), ms) {
/* The PRM says that this bit is valid only for DX9:
*
* SW can choose to set this bit only for DX9 API. DX10/OGL API's
* should not have any effect by setting or not setting this bit.
*/
ms.PixelPositionOffsetEnable = false;

ms.PixelLocation = CENTER;
ms.NumberofMultisamples = log2_samples;
}

anv_batch_emit(&pipeline->batch, GENX(3DSTATE_SAMPLE_MASK), sm) {
sm.SampleMask = sample_mask;
}
}

VkResult
genX(graphics_pipeline_create)(
VkDevice _device,

+ 40
- 0
src/intel/vulkan/genX_pipeline_util.h View File

@@ -449,6 +449,46 @@ emit_rs_state(struct anv_pipeline *pipeline,
#endif
}

static void
emit_ms_state(struct anv_pipeline *pipeline,
const VkPipelineMultisampleStateCreateInfo *info)
{
uint32_t samples = 1;
uint32_t log2_samples = 0;

/* From the Vulkan 1.0 spec:
* If pSampleMask is NULL, it is treated as if the mask has all bits
* enabled, i.e. no coverage is removed from fragments.
*
* 3DSTATE_SAMPLE_MASK.SampleMask is 16 bits.
*/
uint32_t sample_mask = 0xffff;

if (info) {
samples = info->rasterizationSamples;
log2_samples = __builtin_ffs(samples) - 1;
}

if (info && info->pSampleMask)
sample_mask &= info->pSampleMask[0];

anv_batch_emit(&pipeline->batch, GENX(3DSTATE_MULTISAMPLE), ms) {
ms.NumberofMultisamples = log2_samples;

/* The PRM says that this bit is valid only for DX9:
*
* SW can choose to set this bit only for DX9 API. DX10/OGL API's
* should not have any effect by setting or not setting this bit.
*/
ms.PixelPositionOffsetEnable = false;
ms.PixelLocation = CENTER;
}

anv_batch_emit(&pipeline->batch, GENX(3DSTATE_SAMPLE_MASK), sm) {
sm.SampleMask = sample_mask;
}
}

static const uint32_t vk_to_gen_logic_op[] = {
[VK_LOGIC_OP_COPY] = LOGICOP_COPY,
[VK_LOGIC_OP_CLEAR] = LOGICOP_CLEAR,

Loading…
Cancel
Save