mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-06-10 01:18:18 +02:00
kk: Support VK_EXT_blend_operation_advanced
Already supported by blend lowering, just needs to be wired up. Reviewed-by: Aitor Camacho <aitor@lunarg.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41888>
This commit is contained in:
parent
8a65042bee
commit
2263841ced
3 changed files with 41 additions and 32 deletions
|
|
@ -607,7 +607,7 @@ Khronos extensions that are not part of any Vulkan version:
|
|||
VK_EXT_astc_decode_mode DONE (panvk)
|
||||
VK_EXT_attachment_feedback_loop_dynamic_state DONE (anv, kk, lvp, panvk, radv, tu, vn)
|
||||
VK_EXT_attachment_feedback_loop_layout DONE (anv, hk, kk, lvp, nvk, panvk, radv, tu, v3dv, vn)
|
||||
VK_EXT_blend_operation_advanced DONE (hk, lvp, vn)
|
||||
VK_EXT_blend_operation_advanced DONE (hk, kk, lvp, vn)
|
||||
VK_EXT_border_color_swizzle DONE (anv, hasvk, hk, lvp, nvk, panvk, pvr, radv/gfx10+, tu, v3dv, vn)
|
||||
VK_EXT_buffer_device_address DONE (anv, dzn/sm6.6+, hasvk, hk, kk, nvk, panvk, radv, vn)
|
||||
VK_EXT_calibrated_timestamps DONE (anv, hasvk, hk, kk, nvk, panvk/v10+, lvp, radv, vn, tu/a750+)
|
||||
|
|
|
|||
|
|
@ -156,6 +156,7 @@ kk_get_device_extensions(const struct kk_instance *instance,
|
|||
|
||||
.EXT_attachment_feedback_loop_layout = true,
|
||||
.EXT_attachment_feedback_loop_dynamic_state = true,
|
||||
.EXT_blend_operation_advanced = true,
|
||||
.EXT_calibrated_timestamps = true,
|
||||
.EXT_conditional_rendering = true,
|
||||
.EXT_debug_marker = true,
|
||||
|
|
@ -380,6 +381,9 @@ kk_get_device_features(
|
|||
/* VK_EXT_attachment_feedback_loop_dynamic_state */
|
||||
.attachmentFeedbackLoopDynamicState = true,
|
||||
|
||||
/* VK_EXT_blend_operation_advanced */
|
||||
.advancedBlendCoherentOperations = true,
|
||||
|
||||
/* VK_EXT_conditional_rendering */
|
||||
.conditionalRendering = true,
|
||||
.inheritedConditionalRendering = true,
|
||||
|
|
@ -661,6 +665,14 @@ kk_get_device_properties(const struct kk_physical_device *pdev,
|
|||
/* VK_KHR_push_descriptor */
|
||||
.maxPushDescriptors = KK_MAX_PUSH_DESCRIPTORS,
|
||||
|
||||
/* VK_EXT_blend_operation_advanced */
|
||||
.advancedBlendMaxColorAttachments = KK_MAX_RTS,
|
||||
.advancedBlendIndependentBlend = true,
|
||||
.advancedBlendNonPremultipliedSrcColor = true,
|
||||
.advancedBlendNonPremultipliedDstColor = true,
|
||||
.advancedBlendCorrelatedOverlap = true,
|
||||
.advancedBlendAllOperations = true,
|
||||
|
||||
/* VK_EXT_custom_border_color */
|
||||
.maxCustomBorderColorSamplers = 4000,
|
||||
|
||||
|
|
|
|||
|
|
@ -352,42 +352,39 @@ kk_lower_fs_blend(nir_shader *nir,
|
|||
static_assert(ARRAY_SIZE(opts.rt) == 8, "max RTs out of sync");
|
||||
|
||||
for (unsigned i = 0; i < ARRAY_SIZE(opts.rt); ++i) {
|
||||
enum pipe_format format =
|
||||
const struct vk_color_blend_attachment_state *att =
|
||||
&state->cb->attachments[i];
|
||||
nir_lower_blend_rt *rt = &opts.rt[i];
|
||||
|
||||
rt->format =
|
||||
vk_format_to_pipe_format(state->rp->color_attachment_formats[i]);
|
||||
if (state->cb->attachments[i].blend_enable) {
|
||||
opts.rt[i] = (nir_lower_blend_rt){
|
||||
.format = format,
|
||||
rt->colormask = att->write_mask;
|
||||
|
||||
.rgb.src_factor = vk_blend_factor_to_pipe(
|
||||
state->cb->attachments[i].src_color_blend_factor),
|
||||
.rgb.dst_factor = vk_blend_factor_to_pipe(
|
||||
state->cb->attachments[i].dst_color_blend_factor),
|
||||
.rgb.func =
|
||||
vk_blend_op_to_pipe(state->cb->attachments[i].color_blend_op),
|
||||
if (!att->blend_enable) {
|
||||
rt->rgb.src_factor = rt->alpha.src_factor = PIPE_BLENDFACTOR_ONE;
|
||||
rt->rgb.dst_factor = rt->alpha.dst_factor = PIPE_BLENDFACTOR_ZERO;
|
||||
rt->rgb.func = rt->alpha.func = PIPE_BLEND_ADD;
|
||||
} else if (att->color_blend_op >= VK_BLEND_OP_ZERO_EXT) {
|
||||
rt->advanced_blend = true;
|
||||
rt->blend_mode = vk_advanced_blend_op_to_pipe(att->color_blend_op);
|
||||
rt->src_premultiplied = att->src_premultiplied;
|
||||
rt->dst_premultiplied = att->dst_premultiplied;
|
||||
rt->overlap = vk_blend_overlap_to_pipe(att->blend_overlap);
|
||||
|
||||
.alpha.src_factor = vk_blend_factor_to_pipe(
|
||||
state->cb->attachments[i].src_alpha_blend_factor),
|
||||
.alpha.dst_factor = vk_blend_factor_to_pipe(
|
||||
state->cb->attachments[i].dst_alpha_blend_factor),
|
||||
.alpha.func =
|
||||
vk_blend_op_to_pipe(state->cb->attachments[i].alpha_blend_op),
|
||||
|
||||
.colormask = state->cb->attachments[i].write_mask,
|
||||
};
|
||||
/* Unused by runtime and not supported */
|
||||
assert(!att->clamp_results);
|
||||
} else {
|
||||
opts.rt[i] = (nir_lower_blend_rt){
|
||||
.format = format,
|
||||
rt->rgb.src_factor =
|
||||
vk_blend_factor_to_pipe(att->src_color_blend_factor);
|
||||
rt->rgb.dst_factor =
|
||||
vk_blend_factor_to_pipe(att->dst_color_blend_factor);
|
||||
rt->rgb.func = vk_blend_op_to_pipe(att->color_blend_op);
|
||||
|
||||
.rgb.src_factor = PIPE_BLENDFACTOR_ONE,
|
||||
.rgb.dst_factor = PIPE_BLENDFACTOR_ZERO,
|
||||
.rgb.func = PIPE_BLEND_ADD,
|
||||
|
||||
.alpha.src_factor = PIPE_BLENDFACTOR_ONE,
|
||||
.alpha.dst_factor = PIPE_BLENDFACTOR_ZERO,
|
||||
.alpha.func = PIPE_BLEND_ADD,
|
||||
|
||||
.colormask = state->cb->attachments[i].write_mask,
|
||||
};
|
||||
rt->alpha.src_factor =
|
||||
vk_blend_factor_to_pipe(att->src_alpha_blend_factor);
|
||||
rt->alpha.dst_factor =
|
||||
vk_blend_factor_to_pipe(att->dst_alpha_blend_factor);
|
||||
rt->alpha.func = vk_blend_op_to_pipe(att->alpha_blend_op);
|
||||
}
|
||||
}
|
||||
/* Fold constant offset srcs for IO. */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue