I think the problem is that the non-feedback motion blur shaders sample previous unfiltered frames (i.e., no color correction). The feedback shader samples a previous filtered frame (i.e., with the color correction applied). However, I forgot that the Cg feedback needs something added to the preset that slang does not. Here’s what it should look like:
shaders = "4"
shader0 = "../../motionblur/shaders/feedback.cg"
scale_type0 = source
scale0 = 1.0
filter_linear0 = false
feedback_pass = 0
shader1 = "../shaders/color/gba-color.cg
filter_linear1 = false
shader2 = "../shaders/lcd_cgwg/lcd-grid.cg"
filter_linear2 = "false"
wrap_mode2 = "clamp_to_border"
scale_type_x2 = "source"
scale_x2 = "4.000000"
scale_type_y2 = "source"
scale_y2 = "4.000000"
shader3 = "shader-files/gb-pass-5.cg"
filter_linear3 = "true"
wrap_mode3 = "clamp_to_border"
parameters = "SCALE;OUT_X;OUT_Y;GRID_STRENGTH;mixfactor"
GRID_STRENGTH = "0.150000"
SCALE = "1.0"
OUT_X = "3200.0"
OUT_Y = "1600.0"
mixfactor = "0.50"
textures = "BORDER"
BORDER = "resources/gba-border-square-4x.png"
BORDER_linear = "true"
BORDER_wrap_mode = "clamp_to_border"
BORDER_mipmap = "false"
EDIT: well, maybe not because this one–using motionblur-simple–seems to work fine for me, too:
shaders = "4"
shader0 = "../../motionblur/shaders/motionblur-simple.cg"
scale_type0 = source
scale0 = 1.0
filter_linear0 = false
shader1 = "../shaders/color/gba-color.cg
filter_linear1 = false
shader2 = "../shaders/lcd_cgwg/lcd-grid.cg"
filter_linear2 = "false"
wrap_mode2 = "clamp_to_border"
scale_type_x2 = "source"
scale_x2 = "4.000000"
scale_type_y2 = "source"
scale_y2 = "4.000000"
shader3 = "shader-files/gb-pass-5.cg"
filter_linear3 = "true"
wrap_mode3 = "clamp_to_border"
parameters = "SCALE;OUT_X;OUT_Y;GRID_STRENGTH;mixfactor"
GRID_STRENGTH = "0.150000"
SCALE = "1.0"
OUT_X = "3200.0"
OUT_Y = "1600.0"
mixfactor = "0.50"
textures = "BORDER"
BORDER = "resources/gba-border-square-4x.png"
BORDER_linear = "true"
BORDER_wrap_mode = "clamp_to_border"
BORDER_mipmap = "false"