Software development isn't a matter of sitting down and generating a fixed amount of code per hour. The rate of writing code is hugely variable. It's not unusual for most of my "productive" (as in typing actual code) time to be concentrated in a few particular days in a month. The time not spent typing (or being in meetings, doing admin, etc) isn't actually "unproductive" though. It's mostly spent solving problems, and a lot of that effort happens below the level of consciousness. A lot of it actually happens during sleep. It's effort, though, and it costs. You can't do an infinite amount of it in infinitesimal time.
I suggest 2 tests to see if you're lazy or dumb:
1. Try to be more productive by sheer effort of will. Just say to yourself "this month I will write more code than usual" and set to it with a positive attitude. If you succeed you were being lazy and now you know how to not be lazy. If, as is more likely from what you've said, you fail, then you're not lazy. You're working at your maximum capacity but you have a poor understanding of what constitutes "work" in the job you do.
2. If, by the above test, you are not lazy, then look at how well you do relative to your peers. If you're holding your own (as you say you are), you're not dumb either.