AMD and Intel share a large common instruction set, but there exist things called "extensions" that are unique instructions only available on certain processors. This goes for both CPUs and GPUs. Often times, there will be equivalent instructions between the two kinds of processors that behave differently. An example would be the bit manipulation instruction sets for intel and AMD processors. Intel processors use the BMI instruction set. Likewise, AMD has the ABM instruction set which does similar bit manipulation.
An example of why this can be problematic is if there are instructions that one CPU has that another does not. An example would be during the transition when BMI was introduced, only certain CPUs had instructions like PDEP (parallel bit deposit) and PEXT (parallel bit extraction). These are useful instructions to speedily do certain actions like Morton Encoding, which can introduce what is known as locality of reference in memory, which, in laymens terms, means that things that reside close together in geometric orientation (like two objects in a game that are side by side) will reside next to each other in memory, so that they speed up access by cache. These instructions mean that the CPU has special circuitry inside to do the complex math needed to do generate a morton code. There are alternatives to doing a morton encoding routine in software if your CPU lacks the circuitry to do these parallel bit manipulations, but they either eat up more RAM (using a look up table) or they perform slower (using a multiply-no-carry operation of a number upon itself, then using more basic bit manipulation in a second cycle to place the bits manually).
Often when you see a logo before a game, like when you see an intel logo or AMD logo flash before a game, it'll mean they worked closely with the vendor to implement these special instructions in the game so that, if the hardware is there, it'll take advantage of them.
This applies to GPUs, as I said, as well. There are extensions for both DirectX and OpenGL that are unique to certain graphics card instruction sets per manufacturer. This is compounded because the official drivers for DirectX and OpenGL by their respective groups are usually slow to roll things like certain extensions into what is known as the "core" profile, a set of standard instructions that GPU manufacturers have to adhere to to be "directX" or "openGL" complient. Things like Vulkan and DirectX12 are meant to reduce this, by, in simple terms, making programmers able to programmatically "create" these extensions in software, instead of waiting for them to roll into the core profile. Philosophically, Nvidia and AMD operate differently regarding their drivers for OpenGL and DirectX. Nvidia's drivers -- the implementation of these extensions -- are closed source, and thus only Nvidia can change or add extensions to the driver. They usually are very quick in Windows, adding the latest and greatest extensions to their drivers quickly and professionally, but if they don't think a certain extension is worth adding, it'll languish. By contrast, AMD's drivers are open sourced. This means anyone can create their own drivers, and thus their own extensions, but AMD leaves that largely up to hobbyists. That means, in windows, they usually lag behind Nvidia drivers and extensions, but can be more quick to adopt new extensions, and especially over on the linux and OSX side of things, their drivers are usually much better because hobbyists will put in effort that nvidia will not.
Long story short, different manufacturers have different tricks in their hardware that certain games and applications take advantage of when they 'code to the metal.'
My answer to the question? Both. I need to have all sorts of hardware available to me when I make stuff to make sure it works everywhere.