Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.
29235 Discussions

Intel graphic library routines should be updated for x64.

coolman
Beginner
1,659 Views

For example, function 

LINETOAREX

result = LINETOAREX (loc(fx), loc(fy), loc(tx) loc(ty), loc(C), loc(S), cnt)

fx

(Input) INTEGER(2). From x viewport coordinate array.

fy

(Input) INTEGER(2). From y viewport coordinate array.

tx

(Input) INTEGER(2). To x viewport coordinate array.

ty

(Input) INTEGER(2). To y viewport coordinate array.

C

(Input) INTEGER(4). Color array.

S

(Input) INTEGER(4). Style array.

cnt

(Input) INTEGER(4). Length of each coordinate array; also the length of the color array and style array. All of the arrays should be the same size.


in file ifqwin.f90, 

INTERFACE
INTEGER(2) FUNCTION LINETOAREX(PFX,PFY, PTX, PTY, PC, PS, COUNT)
!DEC$ ATTRIBUTES DEFAULT :: LINETOAREX
INTEGER(4) PFX,PFY, PTX, PTY, PC, PS, COUNT
!DEC$ ATTRIBUTES DECORATE, C, ALIAS:"_linetoarrayex" :: LINETOAREX
END FUNCTION
END INTERFACE

for x64, the red part is incorrect

 

0 Kudos
1 Solution
andrew_4619
Honored Contributor III
1,353 Views

OK  LINETOAREX is an Intel creation it is not a thin wrapper to sdk graphic functions but one woudl assume under the lid it makes a series of sdk calls for some other C library.

 

There is a bug as the OP describes. The intel help show it passed with loc(var), the Intel interface does not reflect that. One can seen why despite being wrong it will still work. In X64 it will not down to the different address sizes. A throwback. Passing without loc will give an error as you will be passing arrays to a scaler so the compile will show and error (which you can set an option for  it to ignore). 

View solution in original post

0 Kudos
10 Replies
Andrew_Smith
Valued Contributor I
1,571 Views
Those arguments are not memory addresses. So why would they need different size integers for 64 bit?
0 Kudos
garraleta_fortran
1,564 Views

How well MOVETO and LINETO work together

0 Kudos
coolman
Beginner
1,511 Views

when PARALLEL implement, moveto and lineto together have to run asynchronously

0 Kudos
coolman
Beginner
1,515 Views

see the call 

result = LINETOAREX (loc(fx), loc(fy), loc(tx) loc(ty), loc(C), loc(S), cnt)

0 Kudos
Andrew_Smith
Valued Contributor I
1,459 Views
Your call is compatible with the interface declaration. The arguments are declared with the Fortran default of pass by reference
0 Kudos
Andrew_Smith
Valued Contributor I
1,457 Views
You don't need to add loc(...) to your arguments since the address will be passed anyway in Fortran. Unless the interface specifies to pass by value
0 Kudos
coolman
Beginner
1,401 Views

the call usage is from the help document. when compilered , warning #6075: The data type of the actual argument does not match the definition. [LOC]

0 Kudos
garraleta_fortran
1,373 Views

In Intel Visual Fortran Composer XE 2013 with Visual Studio 2008, it works fine in 32-bit and fails in 64-bit

0 Kudos
coolman
Beginner
1,288 Views

It is very strange that the pragram can run successfully when compilered with optimization options on. 

0 Kudos
andrew_4619
Honored Contributor III
1,354 Views

OK  LINETOAREX is an Intel creation it is not a thin wrapper to sdk graphic functions but one woudl assume under the lid it makes a series of sdk calls for some other C library.

 

There is a bug as the OP describes. The intel help show it passed with loc(var), the Intel interface does not reflect that. One can seen why despite being wrong it will still work. In X64 it will not down to the different address sizes. A throwback. Passing without loc will give an error as you will be passing arrays to a scaler so the compile will show and error (which you can set an option for  it to ignore). 

0 Kudos
Reply