ConstantManager: Add logic ops to PixelShaderConstants

This commit is contained in:
OatmealDome 2021-08-02 23:39:34 -04:00
parent 8e72136eeb
commit 04ec02c06b
3 changed files with 16 additions and 0 deletions

View File

@ -15,6 +15,7 @@ using int4 = std::array<s32, 4>;
enum class DstBlendFactor : u32; enum class DstBlendFactor : u32;
enum class SrcBlendFactor : u32; enum class SrcBlendFactor : u32;
enum class ZTexOp : u32; enum class ZTexOp : u32;
enum class LogicOp : u32;
struct PixelShaderConstants struct PixelShaderConstants
{ {
@ -54,6 +55,9 @@ struct PixelShaderConstants
DstBlendFactor blend_dst_factor_alpha; DstBlendFactor blend_dst_factor_alpha;
u32 blend_subtract; u32 blend_subtract;
u32 blend_subtract_alpha; u32 blend_subtract_alpha;
// For shader_framebuffer_fetch logic ops:
u32 logic_op_enable; // bool
LogicOp logic_op_mode;
}; };
struct VertexShaderConstants struct VertexShaderConstants

View File

@ -423,6 +423,8 @@ void WritePixelShaderCommonHeader(ShaderCode& out, APIType api_type,
"\tuint blend_dst_factor_alpha;\n" "\tuint blend_dst_factor_alpha;\n"
"\tbool blend_subtract;\n" "\tbool blend_subtract;\n"
"\tbool blend_subtract_alpha;\n" "\tbool blend_subtract_alpha;\n"
"\tbool logic_op_enable;\n"
"\tuint logic_op_mode;\n"
"}};\n\n"); "}};\n\n");
out.Write("#define bpmem_combiners(i) (bpmem_pack1[(i)].xy)\n" out.Write("#define bpmem_combiners(i) (bpmem_pack1[(i)].xy)\n"
"#define bpmem_tevind(i) (bpmem_pack1[(i)].z)\n" "#define bpmem_tevind(i) (bpmem_pack1[(i)].z)\n"

View File

@ -510,6 +510,16 @@ void PixelShaderManager::SetBlendModeChanged()
constants.blend_subtract_alpha = state.subtractAlpha; constants.blend_subtract_alpha = state.subtractAlpha;
dirty = true; dirty = true;
} }
if (constants.logic_op_enable != state.logicopenable)
{
constants.logic_op_enable = state.logicopenable;
dirty = true;
}
if (constants.logic_op_mode != state.logicmode)
{
constants.logic_op_mode = state.logicmode;
dirty = true;
}
s_bDestAlphaDirty = true; s_bDestAlphaDirty = true;
} }