Why were 3D games on the Amiga not faster than on similar 16 bit systems like the Atari ST

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP











up vote
19
down vote

favorite












It seems that 3D games, especially simulations like Falcon, were not faster (fps) on the Amiga than on the Atari ST - even a bit slower due to the CPU clock.



I was wondering why this is the case, since the Agnus seems to me as an early model of a GPU, capable of drawing vector lines and even fill out polygons. Was it not capable to display the typical number of 3D objects in those games or was it simply not used, since it would require a complete different codeline for the Amiga with respect to 3D rendering ?










share|improve this question























  • What does "faster" mean? more frames per second or something?
    – Wilson
    Sep 19 at 7:46










  • yes, more fps, I update the question
    – Marco
    Sep 19 at 8:23










  • Mind to support your assumption with some data? Link frame rates used and how they differ?
    – Raffzahn
    Sep 19 at 10:39






  • 2




    That is a little tough for me, since I did not the comparison by myself. I have a print magazine from 1990, which only covered simulations cross-system and there almost was for every game the statement that the 3D aspects between Amiga and Atari ST would be more or less the same
    – Marco
    Sep 19 at 11:15






  • 2




    Would it be worth (someone's) while to add an answer talking about how as 3d graphics algorithms developed, they were frequently better able to be implemented on graphics systems that used a "chunky" approach vs the Amiga's (and many other older systems) "planar" approach?
    – Damien_The_Unbeliever
    Sep 19 at 13:47














up vote
19
down vote

favorite












It seems that 3D games, especially simulations like Falcon, were not faster (fps) on the Amiga than on the Atari ST - even a bit slower due to the CPU clock.



I was wondering why this is the case, since the Agnus seems to me as an early model of a GPU, capable of drawing vector lines and even fill out polygons. Was it not capable to display the typical number of 3D objects in those games or was it simply not used, since it would require a complete different codeline for the Amiga with respect to 3D rendering ?










share|improve this question























  • What does "faster" mean? more frames per second or something?
    – Wilson
    Sep 19 at 7:46










  • yes, more fps, I update the question
    – Marco
    Sep 19 at 8:23










  • Mind to support your assumption with some data? Link frame rates used and how they differ?
    – Raffzahn
    Sep 19 at 10:39






  • 2




    That is a little tough for me, since I did not the comparison by myself. I have a print magazine from 1990, which only covered simulations cross-system and there almost was for every game the statement that the 3D aspects between Amiga and Atari ST would be more or less the same
    – Marco
    Sep 19 at 11:15






  • 2




    Would it be worth (someone's) while to add an answer talking about how as 3d graphics algorithms developed, they were frequently better able to be implemented on graphics systems that used a "chunky" approach vs the Amiga's (and many other older systems) "planar" approach?
    – Damien_The_Unbeliever
    Sep 19 at 13:47












up vote
19
down vote

favorite









up vote
19
down vote

favorite











It seems that 3D games, especially simulations like Falcon, were not faster (fps) on the Amiga than on the Atari ST - even a bit slower due to the CPU clock.



I was wondering why this is the case, since the Agnus seems to me as an early model of a GPU, capable of drawing vector lines and even fill out polygons. Was it not capable to display the typical number of 3D objects in those games or was it simply not used, since it would require a complete different codeline for the Amiga with respect to 3D rendering ?










share|improve this question















It seems that 3D games, especially simulations like Falcon, were not faster (fps) on the Amiga than on the Atari ST - even a bit slower due to the CPU clock.



I was wondering why this is the case, since the Agnus seems to me as an early model of a GPU, capable of drawing vector lines and even fill out polygons. Was it not capable to display the typical number of 3D objects in those games or was it simply not used, since it would require a complete different codeline for the Amiga with respect to 3D rendering ?







amiga






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Sep 19 at 18:08

























asked Sep 19 at 6:31









Marco

6021411




6021411











  • What does "faster" mean? more frames per second or something?
    – Wilson
    Sep 19 at 7:46










  • yes, more fps, I update the question
    – Marco
    Sep 19 at 8:23










  • Mind to support your assumption with some data? Link frame rates used and how they differ?
    – Raffzahn
    Sep 19 at 10:39






  • 2




    That is a little tough for me, since I did not the comparison by myself. I have a print magazine from 1990, which only covered simulations cross-system and there almost was for every game the statement that the 3D aspects between Amiga and Atari ST would be more or less the same
    – Marco
    Sep 19 at 11:15






  • 2




    Would it be worth (someone's) while to add an answer talking about how as 3d graphics algorithms developed, they were frequently better able to be implemented on graphics systems that used a "chunky" approach vs the Amiga's (and many other older systems) "planar" approach?
    – Damien_The_Unbeliever
    Sep 19 at 13:47
















  • What does "faster" mean? more frames per second or something?
    – Wilson
    Sep 19 at 7:46










  • yes, more fps, I update the question
    – Marco
    Sep 19 at 8:23










  • Mind to support your assumption with some data? Link frame rates used and how they differ?
    – Raffzahn
    Sep 19 at 10:39






  • 2




    That is a little tough for me, since I did not the comparison by myself. I have a print magazine from 1990, which only covered simulations cross-system and there almost was for every game the statement that the 3D aspects between Amiga and Atari ST would be more or less the same
    – Marco
    Sep 19 at 11:15






  • 2




    Would it be worth (someone's) while to add an answer talking about how as 3d graphics algorithms developed, they were frequently better able to be implemented on graphics systems that used a "chunky" approach vs the Amiga's (and many other older systems) "planar" approach?
    – Damien_The_Unbeliever
    Sep 19 at 13:47















What does "faster" mean? more frames per second or something?
– Wilson
Sep 19 at 7:46




What does "faster" mean? more frames per second or something?
– Wilson
Sep 19 at 7:46












yes, more fps, I update the question
– Marco
Sep 19 at 8:23




yes, more fps, I update the question
– Marco
Sep 19 at 8:23












Mind to support your assumption with some data? Link frame rates used and how they differ?
– Raffzahn
Sep 19 at 10:39




Mind to support your assumption with some data? Link frame rates used and how they differ?
– Raffzahn
Sep 19 at 10:39




2




2




That is a little tough for me, since I did not the comparison by myself. I have a print magazine from 1990, which only covered simulations cross-system and there almost was for every game the statement that the 3D aspects between Amiga and Atari ST would be more or less the same
– Marco
Sep 19 at 11:15




That is a little tough for me, since I did not the comparison by myself. I have a print magazine from 1990, which only covered simulations cross-system and there almost was for every game the statement that the 3D aspects between Amiga and Atari ST would be more or less the same
– Marco
Sep 19 at 11:15




2




2




Would it be worth (someone's) while to add an answer talking about how as 3d graphics algorithms developed, they were frequently better able to be implemented on graphics systems that used a "chunky" approach vs the Amiga's (and many other older systems) "planar" approach?
– Damien_The_Unbeliever
Sep 19 at 13:47




Would it be worth (someone's) while to add an answer talking about how as 3d graphics algorithms developed, they were frequently better able to be implemented on graphics systems that used a "chunky" approach vs the Amiga's (and many other older systems) "planar" approach?
– Damien_The_Unbeliever
Sep 19 at 13:47










3 Answers
3






active

oldest

votes

















up vote
21
down vote



accepted










There are a few reasons why multi-platform 3D games turned out to be no faster on the Amiga than on other 68000-based platforms without its blitter:



The developers may have targetted the lowest common denominator system and not taken advantage of the blitter when they ported to the Amiga. Early games and poor conversions tended to be like this.



A naive implementation by somebody unfamiliar with the hardware may well fail to use the blitter's line-drawing and space-filling operations efficiently, thus losing the benefit. If one draws and fills individual polygons and then blits them to the framebuffer, that is a lot of wasteful work. AmigaOS itself didn't set a good example here.



Finally, the blitter is a pure 2D device which offers no acceleration for 3D calculations, so the main CPU needs to do those. This involves a lot of matrix multiplication, and the 68000's MULU/MULS instructions are very slow, taking about 70 cycles. (The exact number of cycles is data-dependent because the microcode uses an iterative algorithm.) At 7.09MHz that's a shade over 100,000 multiplies per second, or 2,000 per 50Hz field. Even if the blitter was infinitely-fast, this still sets an upper limit of a few hundred points on screen or compromise on frame rate.






share|improve this answer


















  • 3




    "that's a shade over 100,000 multiplies per second" ;-)
    – Nigel Touch
    Sep 19 at 12:56







  • 2




    Actually the biggest performance hit in 3D calculations usually comes from the perspective divide, as divide instructions are much slower than multiply instructions. Of course like Tommy said with multiplies, in practice games would avoid using an actual divide instruction.
    – Ross Ridge
    Sep 19 at 14:22






  • 1




    @RossRidge but both the final column and final row are invariably 0, 0, 0, 1 assuming you're doing only linear transforms. So you can just multiply by the inner 3x3 and then add the final column as a translation. I think another common optimisation is spotting that most of the time you're just doing rotation, so elements are in the range [-1, 1], giving a great opportunity for locally-limited-precision arithmetic. E.g. 8x8 matrix arithmetic into a 16.16 space. But then the divides have to occur in the objective space, which further helps your point — 8x8 multiply vs at least 16x16 divide!
    – Tommy
    Sep 19 at 20:09






  • 2




    The AtariST has a slightly higher clock than the Amiga, but most of the cpu time was spent in drawing the picture. The Amiga had an edge in theory because the blitter has a fill mode so you could draw lines and use the blitter to do the fill, but the constraints made it so that it wasn't that useful in games, however it was used a lot in demos
    – Thomas
    Sep 19 at 23:56






  • 1




    If a lot of objects are cuboids, you could probably exploit the fact that your x, y or z coordinates are used more than once but I don't know if any games did this.
    – user3570736
    Sep 20 at 7:46


















up vote
7
down vote













The thing the Agnus has that speeds up 3D games is the polygon fill feature. Blitting by itself is not so much a standard operation driving 3D performance. It can help 2D games and windowed GUIs a lot, however, one of the reasons the Atari ST got a (much simpler) blitter as well in later releases.



3D Games are CPU-heavy, or rather performance is driven how fast you can do vector arithmetics and trigonometric functions (which would mainly be done by table lookups in older games) - Agnus doesn't help here, even a 68881 wouldn't help much, as fixed-point integer maths done by a 68k are still faster. We're talking mainly integer operations here, and that is driven by raw CPU speed and bus contention.






share|improve this answer




















  • Polygon fill doesn't really help with 3D though, because you have to draw the boundaries, fill the polygon and then later blit it into place, all stealing memory access cycles away from the CPU. It's faster to use the CPU to fill, rather than doing so many blitter operations (3 line draws, one fill, blit into target image).
    – user
    Sep 20 at 8:10










  • @user Yep - That's what I was trying to convey with "bus contention". Fill, however, can be made a lot faster or slower by the layout of your video memory and allocation of bitplanes - The more linear, the better. The Amiga was a bit complicated in that respect, I seem to recall.
    – tofro
    Sep 20 at 8:16

















up vote
5
down vote













Agnes doesn't help much with 3D acceleration. It has a blitter which is capable of filling polygons, but they must then be copied in to the display bitmap so it's actually slower than just filling with the CPU. Additionally the blitter requires the horizontal limits of the polygon to be rendered first, meaning an additional line draw per vertex.



The biggest performance limitation for 3D on the Amiga is memory bandwidth. In fact all 16 bit home machines of the time were the same, memory bandwidth was the biggest challenge.



The maximum fill rate can be achieved by using unrolled CPU loops that write directly in to bitmaps. There is then no copy stage, and no need to line draw vertexes.



The general strategy used by most high performance 3D on the Amiga is to calculate all vectors in one go, allowing as much data to be kept in CPU registers to avoid memory reads. The display is then rendered by the CPU alone as outlined above.



Since the Amiga had the same CPU as the Atari ST running at a similar speed, but with actually a little bit less memory bandwidth performance was about the same. The Amiga could do some tricks to improve things, such as variable colour depth on different parts of the screen and sprites for low overhead overlays, but in practice they tended not to be that significant performance-wise.






share|improve this answer




















    Your Answer







    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "648"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    convertImagesToLinks: false,
    noModals: false,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: null,
    bindNavPrevention: true,
    postfix: "",
    noCode: true, onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













     

    draft saved


    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fretrocomputing.stackexchange.com%2fquestions%2f7626%2fwhy-were-3d-games-on-the-amiga-not-faster-than-on-similar-16-bit-systems-like-th%23new-answer', 'question_page');

    );

    Post as a guest






























    3 Answers
    3






    active

    oldest

    votes








    3 Answers
    3






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes








    up vote
    21
    down vote



    accepted










    There are a few reasons why multi-platform 3D games turned out to be no faster on the Amiga than on other 68000-based platforms without its blitter:



    The developers may have targetted the lowest common denominator system and not taken advantage of the blitter when they ported to the Amiga. Early games and poor conversions tended to be like this.



    A naive implementation by somebody unfamiliar with the hardware may well fail to use the blitter's line-drawing and space-filling operations efficiently, thus losing the benefit. If one draws and fills individual polygons and then blits them to the framebuffer, that is a lot of wasteful work. AmigaOS itself didn't set a good example here.



    Finally, the blitter is a pure 2D device which offers no acceleration for 3D calculations, so the main CPU needs to do those. This involves a lot of matrix multiplication, and the 68000's MULU/MULS instructions are very slow, taking about 70 cycles. (The exact number of cycles is data-dependent because the microcode uses an iterative algorithm.) At 7.09MHz that's a shade over 100,000 multiplies per second, or 2,000 per 50Hz field. Even if the blitter was infinitely-fast, this still sets an upper limit of a few hundred points on screen or compromise on frame rate.






    share|improve this answer


















    • 3




      "that's a shade over 100,000 multiplies per second" ;-)
      – Nigel Touch
      Sep 19 at 12:56







    • 2




      Actually the biggest performance hit in 3D calculations usually comes from the perspective divide, as divide instructions are much slower than multiply instructions. Of course like Tommy said with multiplies, in practice games would avoid using an actual divide instruction.
      – Ross Ridge
      Sep 19 at 14:22






    • 1




      @RossRidge but both the final column and final row are invariably 0, 0, 0, 1 assuming you're doing only linear transforms. So you can just multiply by the inner 3x3 and then add the final column as a translation. I think another common optimisation is spotting that most of the time you're just doing rotation, so elements are in the range [-1, 1], giving a great opportunity for locally-limited-precision arithmetic. E.g. 8x8 matrix arithmetic into a 16.16 space. But then the divides have to occur in the objective space, which further helps your point — 8x8 multiply vs at least 16x16 divide!
      – Tommy
      Sep 19 at 20:09






    • 2




      The AtariST has a slightly higher clock than the Amiga, but most of the cpu time was spent in drawing the picture. The Amiga had an edge in theory because the blitter has a fill mode so you could draw lines and use the blitter to do the fill, but the constraints made it so that it wasn't that useful in games, however it was used a lot in demos
      – Thomas
      Sep 19 at 23:56






    • 1




      If a lot of objects are cuboids, you could probably exploit the fact that your x, y or z coordinates are used more than once but I don't know if any games did this.
      – user3570736
      Sep 20 at 7:46















    up vote
    21
    down vote



    accepted










    There are a few reasons why multi-platform 3D games turned out to be no faster on the Amiga than on other 68000-based platforms without its blitter:



    The developers may have targetted the lowest common denominator system and not taken advantage of the blitter when they ported to the Amiga. Early games and poor conversions tended to be like this.



    A naive implementation by somebody unfamiliar with the hardware may well fail to use the blitter's line-drawing and space-filling operations efficiently, thus losing the benefit. If one draws and fills individual polygons and then blits them to the framebuffer, that is a lot of wasteful work. AmigaOS itself didn't set a good example here.



    Finally, the blitter is a pure 2D device which offers no acceleration for 3D calculations, so the main CPU needs to do those. This involves a lot of matrix multiplication, and the 68000's MULU/MULS instructions are very slow, taking about 70 cycles. (The exact number of cycles is data-dependent because the microcode uses an iterative algorithm.) At 7.09MHz that's a shade over 100,000 multiplies per second, or 2,000 per 50Hz field. Even if the blitter was infinitely-fast, this still sets an upper limit of a few hundred points on screen or compromise on frame rate.






    share|improve this answer


















    • 3




      "that's a shade over 100,000 multiplies per second" ;-)
      – Nigel Touch
      Sep 19 at 12:56







    • 2




      Actually the biggest performance hit in 3D calculations usually comes from the perspective divide, as divide instructions are much slower than multiply instructions. Of course like Tommy said with multiplies, in practice games would avoid using an actual divide instruction.
      – Ross Ridge
      Sep 19 at 14:22






    • 1




      @RossRidge but both the final column and final row are invariably 0, 0, 0, 1 assuming you're doing only linear transforms. So you can just multiply by the inner 3x3 and then add the final column as a translation. I think another common optimisation is spotting that most of the time you're just doing rotation, so elements are in the range [-1, 1], giving a great opportunity for locally-limited-precision arithmetic. E.g. 8x8 matrix arithmetic into a 16.16 space. But then the divides have to occur in the objective space, which further helps your point — 8x8 multiply vs at least 16x16 divide!
      – Tommy
      Sep 19 at 20:09






    • 2




      The AtariST has a slightly higher clock than the Amiga, but most of the cpu time was spent in drawing the picture. The Amiga had an edge in theory because the blitter has a fill mode so you could draw lines and use the blitter to do the fill, but the constraints made it so that it wasn't that useful in games, however it was used a lot in demos
      – Thomas
      Sep 19 at 23:56






    • 1




      If a lot of objects are cuboids, you could probably exploit the fact that your x, y or z coordinates are used more than once but I don't know if any games did this.
      – user3570736
      Sep 20 at 7:46













    up vote
    21
    down vote



    accepted







    up vote
    21
    down vote



    accepted






    There are a few reasons why multi-platform 3D games turned out to be no faster on the Amiga than on other 68000-based platforms without its blitter:



    The developers may have targetted the lowest common denominator system and not taken advantage of the blitter when they ported to the Amiga. Early games and poor conversions tended to be like this.



    A naive implementation by somebody unfamiliar with the hardware may well fail to use the blitter's line-drawing and space-filling operations efficiently, thus losing the benefit. If one draws and fills individual polygons and then blits them to the framebuffer, that is a lot of wasteful work. AmigaOS itself didn't set a good example here.



    Finally, the blitter is a pure 2D device which offers no acceleration for 3D calculations, so the main CPU needs to do those. This involves a lot of matrix multiplication, and the 68000's MULU/MULS instructions are very slow, taking about 70 cycles. (The exact number of cycles is data-dependent because the microcode uses an iterative algorithm.) At 7.09MHz that's a shade over 100,000 multiplies per second, or 2,000 per 50Hz field. Even if the blitter was infinitely-fast, this still sets an upper limit of a few hundred points on screen or compromise on frame rate.






    share|improve this answer














    There are a few reasons why multi-platform 3D games turned out to be no faster on the Amiga than on other 68000-based platforms without its blitter:



    The developers may have targetted the lowest common denominator system and not taken advantage of the blitter when they ported to the Amiga. Early games and poor conversions tended to be like this.



    A naive implementation by somebody unfamiliar with the hardware may well fail to use the blitter's line-drawing and space-filling operations efficiently, thus losing the benefit. If one draws and fills individual polygons and then blits them to the framebuffer, that is a lot of wasteful work. AmigaOS itself didn't set a good example here.



    Finally, the blitter is a pure 2D device which offers no acceleration for 3D calculations, so the main CPU needs to do those. This involves a lot of matrix multiplication, and the 68000's MULU/MULS instructions are very slow, taking about 70 cycles. (The exact number of cycles is data-dependent because the microcode uses an iterative algorithm.) At 7.09MHz that's a shade over 100,000 multiplies per second, or 2,000 per 50Hz field. Even if the blitter was infinitely-fast, this still sets an upper limit of a few hundred points on screen or compromise on frame rate.







    share|improve this answer














    share|improve this answer



    share|improve this answer








    edited Sep 19 at 16:45









    Brian H

    14.5k51127




    14.5k51127










    answered Sep 19 at 9:43









    pndc

    5,63722540




    5,63722540







    • 3




      "that's a shade over 100,000 multiplies per second" ;-)
      – Nigel Touch
      Sep 19 at 12:56







    • 2




      Actually the biggest performance hit in 3D calculations usually comes from the perspective divide, as divide instructions are much slower than multiply instructions. Of course like Tommy said with multiplies, in practice games would avoid using an actual divide instruction.
      – Ross Ridge
      Sep 19 at 14:22






    • 1




      @RossRidge but both the final column and final row are invariably 0, 0, 0, 1 assuming you're doing only linear transforms. So you can just multiply by the inner 3x3 and then add the final column as a translation. I think another common optimisation is spotting that most of the time you're just doing rotation, so elements are in the range [-1, 1], giving a great opportunity for locally-limited-precision arithmetic. E.g. 8x8 matrix arithmetic into a 16.16 space. But then the divides have to occur in the objective space, which further helps your point — 8x8 multiply vs at least 16x16 divide!
      – Tommy
      Sep 19 at 20:09






    • 2




      The AtariST has a slightly higher clock than the Amiga, but most of the cpu time was spent in drawing the picture. The Amiga had an edge in theory because the blitter has a fill mode so you could draw lines and use the blitter to do the fill, but the constraints made it so that it wasn't that useful in games, however it was used a lot in demos
      – Thomas
      Sep 19 at 23:56






    • 1




      If a lot of objects are cuboids, you could probably exploit the fact that your x, y or z coordinates are used more than once but I don't know if any games did this.
      – user3570736
      Sep 20 at 7:46













    • 3




      "that's a shade over 100,000 multiplies per second" ;-)
      – Nigel Touch
      Sep 19 at 12:56







    • 2




      Actually the biggest performance hit in 3D calculations usually comes from the perspective divide, as divide instructions are much slower than multiply instructions. Of course like Tommy said with multiplies, in practice games would avoid using an actual divide instruction.
      – Ross Ridge
      Sep 19 at 14:22






    • 1




      @RossRidge but both the final column and final row are invariably 0, 0, 0, 1 assuming you're doing only linear transforms. So you can just multiply by the inner 3x3 and then add the final column as a translation. I think another common optimisation is spotting that most of the time you're just doing rotation, so elements are in the range [-1, 1], giving a great opportunity for locally-limited-precision arithmetic. E.g. 8x8 matrix arithmetic into a 16.16 space. But then the divides have to occur in the objective space, which further helps your point — 8x8 multiply vs at least 16x16 divide!
      – Tommy
      Sep 19 at 20:09






    • 2




      The AtariST has a slightly higher clock than the Amiga, but most of the cpu time was spent in drawing the picture. The Amiga had an edge in theory because the blitter has a fill mode so you could draw lines and use the blitter to do the fill, but the constraints made it so that it wasn't that useful in games, however it was used a lot in demos
      – Thomas
      Sep 19 at 23:56






    • 1




      If a lot of objects are cuboids, you could probably exploit the fact that your x, y or z coordinates are used more than once but I don't know if any games did this.
      – user3570736
      Sep 20 at 7:46








    3




    3




    "that's a shade over 100,000 multiplies per second" ;-)
    – Nigel Touch
    Sep 19 at 12:56





    "that's a shade over 100,000 multiplies per second" ;-)
    – Nigel Touch
    Sep 19 at 12:56





    2




    2




    Actually the biggest performance hit in 3D calculations usually comes from the perspective divide, as divide instructions are much slower than multiply instructions. Of course like Tommy said with multiplies, in practice games would avoid using an actual divide instruction.
    – Ross Ridge
    Sep 19 at 14:22




    Actually the biggest performance hit in 3D calculations usually comes from the perspective divide, as divide instructions are much slower than multiply instructions. Of course like Tommy said with multiplies, in practice games would avoid using an actual divide instruction.
    – Ross Ridge
    Sep 19 at 14:22




    1




    1




    @RossRidge but both the final column and final row are invariably 0, 0, 0, 1 assuming you're doing only linear transforms. So you can just multiply by the inner 3x3 and then add the final column as a translation. I think another common optimisation is spotting that most of the time you're just doing rotation, so elements are in the range [-1, 1], giving a great opportunity for locally-limited-precision arithmetic. E.g. 8x8 matrix arithmetic into a 16.16 space. But then the divides have to occur in the objective space, which further helps your point — 8x8 multiply vs at least 16x16 divide!
    – Tommy
    Sep 19 at 20:09




    @RossRidge but both the final column and final row are invariably 0, 0, 0, 1 assuming you're doing only linear transforms. So you can just multiply by the inner 3x3 and then add the final column as a translation. I think another common optimisation is spotting that most of the time you're just doing rotation, so elements are in the range [-1, 1], giving a great opportunity for locally-limited-precision arithmetic. E.g. 8x8 matrix arithmetic into a 16.16 space. But then the divides have to occur in the objective space, which further helps your point — 8x8 multiply vs at least 16x16 divide!
    – Tommy
    Sep 19 at 20:09




    2




    2




    The AtariST has a slightly higher clock than the Amiga, but most of the cpu time was spent in drawing the picture. The Amiga had an edge in theory because the blitter has a fill mode so you could draw lines and use the blitter to do the fill, but the constraints made it so that it wasn't that useful in games, however it was used a lot in demos
    – Thomas
    Sep 19 at 23:56




    The AtariST has a slightly higher clock than the Amiga, but most of the cpu time was spent in drawing the picture. The Amiga had an edge in theory because the blitter has a fill mode so you could draw lines and use the blitter to do the fill, but the constraints made it so that it wasn't that useful in games, however it was used a lot in demos
    – Thomas
    Sep 19 at 23:56




    1




    1




    If a lot of objects are cuboids, you could probably exploit the fact that your x, y or z coordinates are used more than once but I don't know if any games did this.
    – user3570736
    Sep 20 at 7:46





    If a lot of objects are cuboids, you could probably exploit the fact that your x, y or z coordinates are used more than once but I don't know if any games did this.
    – user3570736
    Sep 20 at 7:46











    up vote
    7
    down vote













    The thing the Agnus has that speeds up 3D games is the polygon fill feature. Blitting by itself is not so much a standard operation driving 3D performance. It can help 2D games and windowed GUIs a lot, however, one of the reasons the Atari ST got a (much simpler) blitter as well in later releases.



    3D Games are CPU-heavy, or rather performance is driven how fast you can do vector arithmetics and trigonometric functions (which would mainly be done by table lookups in older games) - Agnus doesn't help here, even a 68881 wouldn't help much, as fixed-point integer maths done by a 68k are still faster. We're talking mainly integer operations here, and that is driven by raw CPU speed and bus contention.






    share|improve this answer




















    • Polygon fill doesn't really help with 3D though, because you have to draw the boundaries, fill the polygon and then later blit it into place, all stealing memory access cycles away from the CPU. It's faster to use the CPU to fill, rather than doing so many blitter operations (3 line draws, one fill, blit into target image).
      – user
      Sep 20 at 8:10










    • @user Yep - That's what I was trying to convey with "bus contention". Fill, however, can be made a lot faster or slower by the layout of your video memory and allocation of bitplanes - The more linear, the better. The Amiga was a bit complicated in that respect, I seem to recall.
      – tofro
      Sep 20 at 8:16














    up vote
    7
    down vote













    The thing the Agnus has that speeds up 3D games is the polygon fill feature. Blitting by itself is not so much a standard operation driving 3D performance. It can help 2D games and windowed GUIs a lot, however, one of the reasons the Atari ST got a (much simpler) blitter as well in later releases.



    3D Games are CPU-heavy, or rather performance is driven how fast you can do vector arithmetics and trigonometric functions (which would mainly be done by table lookups in older games) - Agnus doesn't help here, even a 68881 wouldn't help much, as fixed-point integer maths done by a 68k are still faster. We're talking mainly integer operations here, and that is driven by raw CPU speed and bus contention.






    share|improve this answer




















    • Polygon fill doesn't really help with 3D though, because you have to draw the boundaries, fill the polygon and then later blit it into place, all stealing memory access cycles away from the CPU. It's faster to use the CPU to fill, rather than doing so many blitter operations (3 line draws, one fill, blit into target image).
      – user
      Sep 20 at 8:10










    • @user Yep - That's what I was trying to convey with "bus contention". Fill, however, can be made a lot faster or slower by the layout of your video memory and allocation of bitplanes - The more linear, the better. The Amiga was a bit complicated in that respect, I seem to recall.
      – tofro
      Sep 20 at 8:16












    up vote
    7
    down vote










    up vote
    7
    down vote









    The thing the Agnus has that speeds up 3D games is the polygon fill feature. Blitting by itself is not so much a standard operation driving 3D performance. It can help 2D games and windowed GUIs a lot, however, one of the reasons the Atari ST got a (much simpler) blitter as well in later releases.



    3D Games are CPU-heavy, or rather performance is driven how fast you can do vector arithmetics and trigonometric functions (which would mainly be done by table lookups in older games) - Agnus doesn't help here, even a 68881 wouldn't help much, as fixed-point integer maths done by a 68k are still faster. We're talking mainly integer operations here, and that is driven by raw CPU speed and bus contention.






    share|improve this answer












    The thing the Agnus has that speeds up 3D games is the polygon fill feature. Blitting by itself is not so much a standard operation driving 3D performance. It can help 2D games and windowed GUIs a lot, however, one of the reasons the Atari ST got a (much simpler) blitter as well in later releases.



    3D Games are CPU-heavy, or rather performance is driven how fast you can do vector arithmetics and trigonometric functions (which would mainly be done by table lookups in older games) - Agnus doesn't help here, even a 68881 wouldn't help much, as fixed-point integer maths done by a 68k are still faster. We're talking mainly integer operations here, and that is driven by raw CPU speed and bus contention.







    share|improve this answer












    share|improve this answer



    share|improve this answer










    answered Sep 19 at 11:31









    tofro

    12.4k32671




    12.4k32671











    • Polygon fill doesn't really help with 3D though, because you have to draw the boundaries, fill the polygon and then later blit it into place, all stealing memory access cycles away from the CPU. It's faster to use the CPU to fill, rather than doing so many blitter operations (3 line draws, one fill, blit into target image).
      – user
      Sep 20 at 8:10










    • @user Yep - That's what I was trying to convey with "bus contention". Fill, however, can be made a lot faster or slower by the layout of your video memory and allocation of bitplanes - The more linear, the better. The Amiga was a bit complicated in that respect, I seem to recall.
      – tofro
      Sep 20 at 8:16
















    • Polygon fill doesn't really help with 3D though, because you have to draw the boundaries, fill the polygon and then later blit it into place, all stealing memory access cycles away from the CPU. It's faster to use the CPU to fill, rather than doing so many blitter operations (3 line draws, one fill, blit into target image).
      – user
      Sep 20 at 8:10










    • @user Yep - That's what I was trying to convey with "bus contention". Fill, however, can be made a lot faster or slower by the layout of your video memory and allocation of bitplanes - The more linear, the better. The Amiga was a bit complicated in that respect, I seem to recall.
      – tofro
      Sep 20 at 8:16















    Polygon fill doesn't really help with 3D though, because you have to draw the boundaries, fill the polygon and then later blit it into place, all stealing memory access cycles away from the CPU. It's faster to use the CPU to fill, rather than doing so many blitter operations (3 line draws, one fill, blit into target image).
    – user
    Sep 20 at 8:10




    Polygon fill doesn't really help with 3D though, because you have to draw the boundaries, fill the polygon and then later blit it into place, all stealing memory access cycles away from the CPU. It's faster to use the CPU to fill, rather than doing so many blitter operations (3 line draws, one fill, blit into target image).
    – user
    Sep 20 at 8:10












    @user Yep - That's what I was trying to convey with "bus contention". Fill, however, can be made a lot faster or slower by the layout of your video memory and allocation of bitplanes - The more linear, the better. The Amiga was a bit complicated in that respect, I seem to recall.
    – tofro
    Sep 20 at 8:16




    @user Yep - That's what I was trying to convey with "bus contention". Fill, however, can be made a lot faster or slower by the layout of your video memory and allocation of bitplanes - The more linear, the better. The Amiga was a bit complicated in that respect, I seem to recall.
    – tofro
    Sep 20 at 8:16










    up vote
    5
    down vote













    Agnes doesn't help much with 3D acceleration. It has a blitter which is capable of filling polygons, but they must then be copied in to the display bitmap so it's actually slower than just filling with the CPU. Additionally the blitter requires the horizontal limits of the polygon to be rendered first, meaning an additional line draw per vertex.



    The biggest performance limitation for 3D on the Amiga is memory bandwidth. In fact all 16 bit home machines of the time were the same, memory bandwidth was the biggest challenge.



    The maximum fill rate can be achieved by using unrolled CPU loops that write directly in to bitmaps. There is then no copy stage, and no need to line draw vertexes.



    The general strategy used by most high performance 3D on the Amiga is to calculate all vectors in one go, allowing as much data to be kept in CPU registers to avoid memory reads. The display is then rendered by the CPU alone as outlined above.



    Since the Amiga had the same CPU as the Atari ST running at a similar speed, but with actually a little bit less memory bandwidth performance was about the same. The Amiga could do some tricks to improve things, such as variable colour depth on different parts of the screen and sprites for low overhead overlays, but in practice they tended not to be that significant performance-wise.






    share|improve this answer
























      up vote
      5
      down vote













      Agnes doesn't help much with 3D acceleration. It has a blitter which is capable of filling polygons, but they must then be copied in to the display bitmap so it's actually slower than just filling with the CPU. Additionally the blitter requires the horizontal limits of the polygon to be rendered first, meaning an additional line draw per vertex.



      The biggest performance limitation for 3D on the Amiga is memory bandwidth. In fact all 16 bit home machines of the time were the same, memory bandwidth was the biggest challenge.



      The maximum fill rate can be achieved by using unrolled CPU loops that write directly in to bitmaps. There is then no copy stage, and no need to line draw vertexes.



      The general strategy used by most high performance 3D on the Amiga is to calculate all vectors in one go, allowing as much data to be kept in CPU registers to avoid memory reads. The display is then rendered by the CPU alone as outlined above.



      Since the Amiga had the same CPU as the Atari ST running at a similar speed, but with actually a little bit less memory bandwidth performance was about the same. The Amiga could do some tricks to improve things, such as variable colour depth on different parts of the screen and sprites for low overhead overlays, but in practice they tended not to be that significant performance-wise.






      share|improve this answer






















        up vote
        5
        down vote










        up vote
        5
        down vote









        Agnes doesn't help much with 3D acceleration. It has a blitter which is capable of filling polygons, but they must then be copied in to the display bitmap so it's actually slower than just filling with the CPU. Additionally the blitter requires the horizontal limits of the polygon to be rendered first, meaning an additional line draw per vertex.



        The biggest performance limitation for 3D on the Amiga is memory bandwidth. In fact all 16 bit home machines of the time were the same, memory bandwidth was the biggest challenge.



        The maximum fill rate can be achieved by using unrolled CPU loops that write directly in to bitmaps. There is then no copy stage, and no need to line draw vertexes.



        The general strategy used by most high performance 3D on the Amiga is to calculate all vectors in one go, allowing as much data to be kept in CPU registers to avoid memory reads. The display is then rendered by the CPU alone as outlined above.



        Since the Amiga had the same CPU as the Atari ST running at a similar speed, but with actually a little bit less memory bandwidth performance was about the same. The Amiga could do some tricks to improve things, such as variable colour depth on different parts of the screen and sprites for low overhead overlays, but in practice they tended not to be that significant performance-wise.






        share|improve this answer












        Agnes doesn't help much with 3D acceleration. It has a blitter which is capable of filling polygons, but they must then be copied in to the display bitmap so it's actually slower than just filling with the CPU. Additionally the blitter requires the horizontal limits of the polygon to be rendered first, meaning an additional line draw per vertex.



        The biggest performance limitation for 3D on the Amiga is memory bandwidth. In fact all 16 bit home machines of the time were the same, memory bandwidth was the biggest challenge.



        The maximum fill rate can be achieved by using unrolled CPU loops that write directly in to bitmaps. There is then no copy stage, and no need to line draw vertexes.



        The general strategy used by most high performance 3D on the Amiga is to calculate all vectors in one go, allowing as much data to be kept in CPU registers to avoid memory reads. The display is then rendered by the CPU alone as outlined above.



        Since the Amiga had the same CPU as the Atari ST running at a similar speed, but with actually a little bit less memory bandwidth performance was about the same. The Amiga could do some tricks to improve things, such as variable colour depth on different parts of the screen and sprites for low overhead overlays, but in practice they tended not to be that significant performance-wise.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Sep 19 at 14:27









        user

        1,734211




        1,734211



























             

            draft saved


            draft discarded















































             


            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fretrocomputing.stackexchange.com%2fquestions%2f7626%2fwhy-were-3d-games-on-the-amiga-not-faster-than-on-similar-16-bit-systems-like-th%23new-answer', 'question_page');

            );

            Post as a guest













































































            Popular posts from this blog

            How to check contact read email or not when send email to Individual?

            Displaying single band from multi-band raster using QGIS

            How many registers does an x86_64 CPU actually have?