mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 00:10:10 +01:00
zink: don't render with multisampling when it is disabled
Previously zink ignored whether multisampling was enabled and rendered with mulisampling whenever the target buffer had multiple samples. This change now will only render with multisampling when it is enabled and will use a lowering pass to make sure this case is handled correcly. Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22626>
This commit is contained in:
parent
14d5892609
commit
a004825266
3 changed files with 8 additions and 4 deletions
|
|
@ -3556,6 +3556,9 @@ zink_shader_compile(struct zink_screen *screen, struct zink_shader *zs,
|
|||
if (zink_fs_key_base(key)->force_dual_color_blend && nir->info.outputs_written & BITFIELD64_BIT(FRAG_RESULT_DATA1)) {
|
||||
NIR_PASS_V(nir, lower_dual_blend);
|
||||
}
|
||||
if (zink_fs_key_base(key)->single_sample) {
|
||||
NIR_PASS_V(nir, nir_lower_single_sampled);
|
||||
}
|
||||
if (zink_fs_key_base(key)->coord_replace_bits)
|
||||
NIR_PASS_V(nir, nir_lower_texcoord_replace, zink_fs_key_base(key)->coord_replace_bits, false, false);
|
||||
if (zink_fs_key_base(key)->point_coord_yinvert)
|
||||
|
|
|
|||
|
|
@ -637,8 +637,9 @@ zink_draw(struct pipe_context *pctx,
|
|||
VKCTX(CmdSetLineStippleEnableEXT)(batch->state->cmdbuf, rast_state->hw_state.line_stipple_enable);
|
||||
}
|
||||
if ((BATCH_CHANGED || ctx->sample_mask_changed) && screen->have_full_ds3) {
|
||||
VKCTX(CmdSetRasterizationSamplesEXT)(batch->state->cmdbuf, (VkSampleCountFlagBits)(ctx->gfx_pipeline_state.rast_samples + 1));
|
||||
VKCTX(CmdSetSampleMaskEXT)(batch->state->cmdbuf, (VkSampleCountFlagBits)(ctx->gfx_pipeline_state.rast_samples + 1), &ctx->gfx_pipeline_state.sample_mask);
|
||||
uint8_t samples = ctx->gfx_pipeline_state.multisample ? ctx->gfx_pipeline_state.rast_samples + 1 : 1;
|
||||
VKCTX(CmdSetRasterizationSamplesEXT)(batch->state->cmdbuf, (VkSampleCountFlagBits)(samples));
|
||||
VKCTX(CmdSetSampleMaskEXT)(batch->state->cmdbuf, (VkSampleCountFlagBits)(samples), &ctx->gfx_pipeline_state.sample_mask);
|
||||
ctx->sample_mask_changed = false;
|
||||
}
|
||||
if ((BATCH_CHANGED || ctx->blend_state_changed) && screen->have_full_ds3) {
|
||||
|
|
|
|||
|
|
@ -114,7 +114,7 @@ zink_create_gfx_pipeline(struct zink_screen *screen,
|
|||
|
||||
VkPipelineMultisampleStateCreateInfo ms_state = {0};
|
||||
ms_state.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO;
|
||||
ms_state.rasterizationSamples = state->rast_samples + 1;
|
||||
ms_state.rasterizationSamples = state->multisample ? state->rast_samples + 1 : 1;
|
||||
if (state->blend_state) {
|
||||
ms_state.alphaToCoverageEnable = state->blend_state->alpha_to_coverage;
|
||||
if (state->blend_state->alpha_to_one && !screen->info.feats.features.alphaToOne) {
|
||||
|
|
@ -508,7 +508,7 @@ zink_create_gfx_pipeline_output(struct zink_screen *screen, struct zink_gfx_pipe
|
|||
}
|
||||
ms_state.alphaToOneEnable = state->blend_state->alpha_to_one;
|
||||
}
|
||||
ms_state.rasterizationSamples = state->rast_samples + 1;
|
||||
ms_state.rasterizationSamples = state->multisample ? state->rast_samples + 1 : 1;
|
||||
/* "If pSampleMask is NULL, it is treated as if the mask has all bits set to 1."
|
||||
* - Chapter 27. Rasterization
|
||||
*
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue