<p>Nico Huber has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/27146">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">gfx_test: Refactor to allow Restrictions (No_Elaboration_Code)<br><br>Move the `Ada.Numerics.Discrete_Random.Generator` into the Main()<br>procedure.<br><br>Change-Id: I63c72501fd7d49574042fc5a459d6751a776a1f1<br>Signed-off-by: Nico Huber <nico.h@gmx.de><br>---<br>M gfxtest/hw-gfx-gma-gfx_test.adb<br>1 file changed, 31 insertions(+), 25 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/libgfxinit refs/changes/46/27146/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/gfxtest/hw-gfx-gma-gfx_test.adb b/gfxtest/hw-gfx-gma-gfx_test.adb</span><br><span>index 736b93d..fc1868f 100644</span><br><span>--- a/gfxtest/hw-gfx-gma-gfx_test.adb</span><br><span>+++ b/gfxtest/hw-gfx-gma-gfx_test.adb</span><br><span>@@ -20,8 +20,8 @@</span><br><span> Seed : constant := 12345;</span><br><span> </span><br><span> package Rand_P is new Ada.Numerics.Discrete_Random (Natural);</span><br><span style="color: hsl(0, 100%, 40%);">- Gen : Rand_P.Generator;</span><br><span style="color: hsl(0, 100%, 40%);">- function Rand return Int32 is (Int32 (Rand_P.Random (Gen)));</span><br><span style="color: hsl(120, 100%, 40%);">+ function Rand (Gen : Rand_P.Generator)</span><br><span style="color: hsl(120, 100%, 40%);">+ return Int32 is (Int32 (Rand_P.Random (Gen)));</span><br><span> </span><br><span> Start_X : constant := 0;</span><br><span> Start_Y : constant := 0;</span><br><span>@@ -341,7 +341,7 @@</span><br><span> </span><br><span> Pipes : GMA.Pipe_Configs;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- procedure Prepare_Configs (Rotation : Rotation_Type)</span><br><span style="color: hsl(120, 100%, 40%);">+ procedure Prepare_Configs (Rotation : Rotation_Type; Gen : Rand_P.Generator)</span><br><span> is</span><br><span> use type HW.GFX.GMA.Port_Type;</span><br><span> </span><br><span>@@ -366,7 +366,7 @@</span><br><span> end if;</span><br><span> end if;</span><br><span> Prepare_Cursors (Cursors (Pipe), Offset);</span><br><span style="color: hsl(0, 100%, 40%);">- Pipes (Pipe).Cursor := Cursors (Pipe) (Cursor_Size'Val (Rand mod 3));</span><br><span style="color: hsl(120, 100%, 40%);">+ Pipes (Pipe).Cursor := Cursors (Pipe) (Cursor_Size'Val (Rand (Gen) mod 3));</span><br><span> end loop;</span><br><span> </span><br><span> GMA.Dump_Configs (Pipes);</span><br><span>@@ -427,18 +427,14 @@</span><br><span> Color : Pipe_Index;</span><br><span> Size : Cursor_Size;</span><br><span> end record;</span><br><span style="color: hsl(0, 100%, 40%);">- function Cursor_Rand return Int32 is (Rand mod 51 - 25);</span><br><span style="color: hsl(0, 100%, 40%);">- Cursor_Infos : array (Pipe_Index) of Cursor_Info :=</span><br><span style="color: hsl(0, 100%, 40%);">- (others =></span><br><span style="color: hsl(0, 100%, 40%);">- (Color => Pipe_Index'Val (Rand mod 3),</span><br><span style="color: hsl(0, 100%, 40%);">- Size => Cursor_Size'Val (Rand mod 3),</span><br><span style="color: hsl(0, 100%, 40%);">- X_Velo => 3 * Cursor_Rand,</span><br><span style="color: hsl(0, 100%, 40%);">- Y_Velo => 3 * Cursor_Rand,</span><br><span style="color: hsl(0, 100%, 40%);">- others => Cursor_Rand));</span><br><span style="color: hsl(120, 100%, 40%);">+ function Cursor_Rand (Gen : Rand_P.Generator)</span><br><span style="color: hsl(120, 100%, 40%);">+ return Int32 is (Rand (Gen) mod 51 - 25);</span><br><span style="color: hsl(120, 100%, 40%);">+ Cursor_Infos : array (Pipe_Index) of Cursor_Info;</span><br><span> </span><br><span> procedure Move_Cursors</span><br><span> (Pipes : in out GMA.Pipe_Configs;</span><br><span style="color: hsl(0, 100%, 40%);">- Time_MS : in Natural)</span><br><span style="color: hsl(120, 100%, 40%);">+ Time_MS : in Natural;</span><br><span style="color: hsl(120, 100%, 40%);">+ Gen : in Rand_P.Generator)</span><br><span> is</span><br><span> procedure Select_New_Cursor</span><br><span> (P : in Pipe_Index;</span><br><span>@@ -448,12 +444,12 @@</span><br><span> Old_C : constant Cursor_Type := C;</span><br><span> begin</span><br><span> -- change either size or color</span><br><span style="color: hsl(0, 100%, 40%);">- if Rand mod 2 = 0 then</span><br><span style="color: hsl(120, 100%, 40%);">+ if Rand (Gen) mod 2 = 0 then</span><br><span> CI.Color := Pipe_Index'Val</span><br><span style="color: hsl(0, 100%, 40%);">- ((Pipe_Index'Pos (CI.Color) + 1 + Rand mod 2) mod 3);</span><br><span style="color: hsl(120, 100%, 40%);">+ ((Pipe_Index'Pos (CI.Color) + 1 + Rand (Gen) mod 2) mod 3);</span><br><span> else</span><br><span> CI.Size := Cursor_Size'Val</span><br><span style="color: hsl(0, 100%, 40%);">- ((Cursor_Size'Pos (CI.Size) + 1 + Rand mod 2) mod 3);</span><br><span style="color: hsl(120, 100%, 40%);">+ ((Cursor_Size'Pos (CI.Size) + 1 + Rand (Gen) mod 2) mod 3);</span><br><span> end if;</span><br><span> C := Cursors (CI.Color) (CI.Size);</span><br><span> C.Center_X := Old_C.Center_X;</span><br><span>@@ -482,8 +478,8 @@</span><br><span> Update : Boolean := False;</span><br><span> begin</span><br><span> if Cnt mod 16 = 0 then</span><br><span style="color: hsl(0, 100%, 40%);">- CI.X_Acc := Cursor_Rand;</span><br><span style="color: hsl(0, 100%, 40%);">- CI.Y_Acc := Cursor_Rand;</span><br><span style="color: hsl(120, 100%, 40%);">+ CI.X_Acc := Cursor_Rand (Gen);</span><br><span style="color: hsl(120, 100%, 40%);">+ CI.Y_Acc := Cursor_Rand (Gen);</span><br><span> end if;</span><br><span> CI.X_Velo := CI.X_Velo + CI.X_Acc;</span><br><span> CI.Y_Velo := CI.Y_Velo + CI.Y_Acc;</span><br><span>@@ -537,6 +533,8 @@</span><br><span> Dev_Init,</span><br><span> Initialized : Boolean;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ Gen : Rand_P.Generator;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> function iopl (level : Interfaces.C.int) return Interfaces.C.int;</span><br><span> pragma Import (C, iopl, "iopl");</span><br><span> begin</span><br><span>@@ -584,7 +582,7 @@</span><br><span> if Initialized then</span><br><span> Backup_GTT;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- Prepare_Configs (Rotation);</span><br><span style="color: hsl(120, 100%, 40%);">+ Prepare_Configs (Rotation, Gen);</span><br><span> </span><br><span> GMA.Update_Outputs (Pipes);</span><br><span> </span><br><span>@@ -600,6 +598,14 @@</span><br><span> end loop;</span><br><span> end loop;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ Cursor_Infos :=</span><br><span style="color: hsl(120, 100%, 40%);">+ (others =></span><br><span style="color: hsl(120, 100%, 40%);">+ (Color => Pipe_Index'Val (Rand (Gen) mod 3),</span><br><span style="color: hsl(120, 100%, 40%);">+ Size => Cursor_Size'Val (Rand (Gen) mod 3),</span><br><span style="color: hsl(120, 100%, 40%);">+ X_Velo => 3 * Cursor_Rand (Gen),</span><br><span style="color: hsl(120, 100%, 40%);">+ Y_Velo => 3 * Cursor_Rand (Gen),</span><br><span style="color: hsl(120, 100%, 40%);">+ others => Cursor_Rand (Gen)));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> if Delay_MS < Primary_Delay_MS + Secondary_Delay_MS then</span><br><span> Script_Cursors (Pipes, Delay_MS);</span><br><span> else -- getting bored?</span><br><span>@@ -609,10 +615,10 @@</span><br><span> New_Pipes : GMA.Pipe_Configs := Pipes;</span><br><span> </span><br><span> function Rand_Div (Num : Position_Type) return Position_Type is</span><br><span style="color: hsl(0, 100%, 40%);">- (case Rand mod 4 is</span><br><span style="color: hsl(0, 100%, 40%);">- when 3 => Rand mod Num / 3,</span><br><span style="color: hsl(0, 100%, 40%);">- when 2 => Rand mod Num / 2,</span><br><span style="color: hsl(0, 100%, 40%);">- when 1 => Rand mod Num,</span><br><span style="color: hsl(120, 100%, 40%);">+ (case Rand (Gen) mod 4 is</span><br><span style="color: hsl(120, 100%, 40%);">+ when 3 => Rand (Gen) mod Num / 3,</span><br><span style="color: hsl(120, 100%, 40%);">+ when 2 => Rand (Gen) mod Num / 2,</span><br><span style="color: hsl(120, 100%, 40%);">+ when 1 => Rand (Gen) mod Num,</span><br><span> when others => 0);</span><br><span> begin</span><br><span> Rand_P.Reset (Gen, Seed);</span><br><span>@@ -645,10 +651,10 @@</span><br><span> end loop;</span><br><span> GMA.Dump_Configs (New_Pipes);</span><br><span> GMA.Update_Outputs (New_Pipes);</span><br><span style="color: hsl(0, 100%, 40%);">- Move_Cursors (New_Pipes, Secondary_Delay_MS);</span><br><span style="color: hsl(120, 100%, 40%);">+ Move_Cursors (New_Pipes, Secondary_Delay_MS, Gen);</span><br><span> Delay_MS := Delay_MS - Secondary_Delay_MS;</span><br><span> end loop;</span><br><span style="color: hsl(0, 100%, 40%);">- Move_Cursors (New_Pipes, Delay_MS);</span><br><span style="color: hsl(120, 100%, 40%);">+ Move_Cursors (New_Pipes, Delay_MS, Gen);</span><br><span> end;</span><br><span> end if;</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/27146">change 27146</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://review.coreboot.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://review.coreboot.org/27146"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: libgfxinit </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I63c72501fd7d49574042fc5a459d6751a776a1f1 </div>
<div style="display:none"> Gerrit-Change-Number: 27146 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Nico Huber <nico.h@gmx.de> </div>