radv: Translate logic ops.
radeonsi could pass them through but the enum changed between Gallium and Vulkan, so we have to translate. In progress I made the register defines a bit more readable. CC: 18.0 18.1 <mesa-stable@lists.freedesktop.org> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100430 Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
This commit is contained in:
@@ -181,6 +181,47 @@ radv_pipeline_scratch_init(struct radv_device *device,
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
static uint32_t si_translate_blend_logic_op(VkLogicOp op)
|
||||
{
|
||||
switch (op) {
|
||||
case VK_LOGIC_OP_CLEAR:
|
||||
return V_028808_ROP3_CLEAR;
|
||||
case VK_LOGIC_OP_AND:
|
||||
return V_028808_ROP3_AND;
|
||||
case VK_LOGIC_OP_AND_REVERSE:
|
||||
return V_028808_ROP3_AND_REVERSE;
|
||||
case VK_LOGIC_OP_COPY:
|
||||
return V_028808_ROP3_COPY;
|
||||
case VK_LOGIC_OP_AND_INVERTED:
|
||||
return V_028808_ROP3_AND_INVERTED;
|
||||
case VK_LOGIC_OP_NO_OP:
|
||||
return V_028808_ROP3_NO_OP;
|
||||
case VK_LOGIC_OP_XOR:
|
||||
return V_028808_ROP3_XOR;
|
||||
case VK_LOGIC_OP_OR:
|
||||
return V_028808_ROP3_OR;
|
||||
case VK_LOGIC_OP_NOR:
|
||||
return V_028808_ROP3_NOR;
|
||||
case VK_LOGIC_OP_EQUIVALENT:
|
||||
return V_028808_ROP3_EQUIVALENT;
|
||||
case VK_LOGIC_OP_INVERT:
|
||||
return V_028808_ROP3_INVERT;
|
||||
case VK_LOGIC_OP_OR_REVERSE:
|
||||
return V_028808_ROP3_OR_REVERSE;
|
||||
case VK_LOGIC_OP_COPY_INVERTED:
|
||||
return V_028808_ROP3_COPY_INVERTED;
|
||||
case VK_LOGIC_OP_OR_INVERTED:
|
||||
return V_028808_ROP3_OR_INVERTED;
|
||||
case VK_LOGIC_OP_NAND:
|
||||
return V_028808_ROP3_NAND;
|
||||
case VK_LOGIC_OP_SET:
|
||||
return V_028808_ROP3_SET;
|
||||
default:
|
||||
unreachable("Unhandled logic op");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static uint32_t si_translate_blend_function(VkBlendOp op)
|
||||
{
|
||||
switch (op) {
|
||||
@@ -600,9 +641,9 @@ radv_pipeline_init_blend_state(struct radv_pipeline *pipeline,
|
||||
}
|
||||
blend.cb_color_control = 0;
|
||||
if (vkblend->logicOpEnable)
|
||||
blend.cb_color_control |= S_028808_ROP3(vkblend->logicOp | (vkblend->logicOp << 4));
|
||||
blend.cb_color_control |= S_028808_ROP3(si_translate_blend_logic_op(vkblend->logicOp));
|
||||
else
|
||||
blend.cb_color_control |= S_028808_ROP3(0xcc);
|
||||
blend.cb_color_control |= S_028808_ROP3(V_028808_ROP3_COPY);
|
||||
|
||||
blend.db_alpha_to_mask = S_028B70_ALPHA_TO_MASK_OFFSET0(2) |
|
||||
S_028B70_ALPHA_TO_MASK_OFFSET1(2) |
|
||||
|
Reference in New Issue
Block a user