anv: implement VK_EXT_color_write_enable
v2: Add missing gfx 7/7.5 dynamic state emission Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Reviewed-by: Tapani Pälli <tapani.palli@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10206>
This commit is contained in:

committed by
Marge Bot

parent
82eb7c04e7
commit
b15bfe92f7
@@ -1126,6 +1126,19 @@ is_dual_src_blend_factor(VkBlendFactor factor)
|
||||
factor == VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA;
|
||||
}
|
||||
|
||||
static inline uint32_t *
|
||||
write_disabled_blend(uint32_t *state)
|
||||
{
|
||||
struct GENX(BLEND_STATE_ENTRY) entry = {
|
||||
.WriteDisableAlpha = true,
|
||||
.WriteDisableRed = true,
|
||||
.WriteDisableGreen = true,
|
||||
.WriteDisableBlue = true,
|
||||
};
|
||||
GENX(BLEND_STATE_ENTRY_pack)(NULL, state, &entry);
|
||||
return state + GENX(BLEND_STATE_ENTRY_length);
|
||||
}
|
||||
|
||||
static void
|
||||
emit_cb_state(struct anv_graphics_pipeline *pipeline,
|
||||
const VkPipelineColorBlendStateCreateInfo *info,
|
||||
@@ -1181,15 +1194,12 @@ emit_cb_state(struct anv_graphics_pipeline *pipeline,
|
||||
assert(i < 8);
|
||||
|
||||
if (info == NULL || binding->index >= info->attachmentCount) {
|
||||
/* Default everything to disabled */
|
||||
struct GENX(BLEND_STATE_ENTRY) entry = {
|
||||
.WriteDisableAlpha = true,
|
||||
.WriteDisableRed = true,
|
||||
.WriteDisableGreen = true,
|
||||
.WriteDisableBlue = true,
|
||||
};
|
||||
GENX(BLEND_STATE_ENTRY_pack)(NULL, state_pos, &entry);
|
||||
state_pos += GENX(BLEND_STATE_ENTRY_length);
|
||||
state_pos = write_disabled_blend(state_pos);
|
||||
continue;
|
||||
}
|
||||
|
||||
if ((pipeline->dynamic_state.color_writes & (1u << binding->index)) == 0) {
|
||||
state_pos = write_disabled_blend(state_pos);
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -1903,6 +1913,9 @@ has_color_buffer_write_enabled(const struct anv_graphics_pipeline *pipeline,
|
||||
if (!shader_bin)
|
||||
return false;
|
||||
|
||||
if (!pipeline->dynamic_state.color_writes)
|
||||
return false;
|
||||
|
||||
const struct anv_pipeline_bind_map *bind_map = &shader_bin->bind_map;
|
||||
for (int i = 0; i < bind_map->surface_count; i++) {
|
||||
struct anv_pipeline_binding *binding = &bind_map->surface_to_descriptor[i];
|
||||
|
Reference in New Issue
Block a user