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 SrcBlendFactor : u32;
enum class ZTexOp : u32;
enum class LogicOp : u32;
struct PixelShaderConstants
{
@ -54,6 +55,9 @@ struct PixelShaderConstants
DstBlendFactor blend_dst_factor_alpha;
u32 blend_subtract;
u32 blend_subtract_alpha;
// For shader_framebuffer_fetch logic ops:
u32 logic_op_enable; // bool
LogicOp logic_op_mode;
};
struct VertexShaderConstants

View File

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