1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243
|
#!/usr/bin/ruby -EUTF-8
# for Ruby 1.9
# Synopsis:
#
# pageNumberLookup.rb filename.html > outputFile.html
#
# This script is used to replace symbolic references to locations in the OpenCL
# specification with page number references. This can be used when you want the
# reference page to refer to section XYZ of the OpenCL spec with a link and have
# the link open the spec document to section XYZ. This approach is based on the
# "named destination" feature for PDF files.
#
# Ideally we wanted to link to the named destinations, but inconsistencies between
# versions of MS Word and other limitations prevent us from doing that at this time.
# So, this is a second-best solution in which we map symbolic names to page
# numbers, then the link will open the spec to the specified page. To use this
# solution, refer to a section in the spec using a symbolic name that you make up
# in a <olink /> element with a uri attribute that is the symbolic name. Then add
# the keyword to the lookup table below with the corresponding page number from
# the Spec.
#
# For example to link to the spec section for gl_sharing, use:
#
# <olink uri="gl_sharing">OpenCL Specification</olink>
#
# The xsltproc program generates a temporary HTML file where the XML line above
# is transformed into a line containing a placeholder URL:
#
# <a href="http://www.khronos.org/registry/cl/specs/opencl-XXX.pdf#namedest=gl_sharing">
# OpenCL Specification</a>
#
# When this lookup program is run on the temporary HTML file, it will look up the
# keyword and replace the placeholder text in the HTML file with the final URL.
# The final URL is specified below in Specnames. This transforms the placeholder
# line into the final form, in this manner:
#
# <a href="http://www.khronos.org/registry/cl/specs/opencl-1.2.pdf#page=279">
# OpenCL Specification</a>
#
# (You can control what the first part of the URL is by modifying the SpecBaseUrl
# variable in the opencl-man.xsl file.)
# Here are the real spec filenames of the OpenCL 1.2 spec documents (see comments above):
Core = "opencl-1.2.pdf"
Ext = "opencl-1.2-extensions.pdf"
###############################################################################
# Spec page number mapping here. First string in quotes. Commas between values.
# The comments are for reference to see where this content can be found in the spec.
#
Pagenums = {
"classDiagram" => [Core, 20], # 2.1 - OpenCL Class Diagram
"clGetPlatformIDs" => [Core, 33], # 4.1 - Querying Platform Info
"clGetPlatformInfo" => [Core, 33], # 4.1 - Querying Platform Info
"clGetDeviceIDs" => [Core, 35], # 4.2 - Querying Devices
"clGetDeviceInfo" => [Core, 37], # 4.2 - Querying Devices
"cl_khr_fp64" => [Core, 46], # 4.2 - Querying Devices
"clCreateSubDevices" => [Core, 49], # 4.3 - Partitioning a Device
"clRetainDevice" => [Core, 52], # 4.3 - Partitioning a Device
"clReleaseDevice" => [Core, 52], # 4.3 - Partitioning a Device
"clCreateContext" => [Core, 54], # 4.4 - Contexts
"clCreateContextFromType" => [Core, 56], # 4.4 - Contexts
"clRetainContext" => [Core, 57], # 4.4 - Contexts
"clReleaseContext" => [Core, 57], # 4.4 - Contexts
"clGetContextInfo" => [Core, 58], # 4.4 - Contexts
"clCreateCommandQueue" => [Core, 61], # 5.1 - Command Queues
"clRetainCommandQueue" => [Core, 62], # 5.1 - Command Queues
"clReleaseCommandQueue" => [Core, 63], # 5.1 - Command Queues
"clGetCommandQueueInfo" => [Core, 63], # 5.1 - Command Queues
"clCreateBuffer" => [Core, 66], # 5.2.1 - Creating Buffer Objects
"clCreateSubBuffer" => [Core, 69], # 5.2.1 - Creating Buffer Objects
"clEnqueueReadBuffer" => [Core, 72], # 5.2.2 - Reading, Writing, Copying Buffer Objects
"clEnqueueWriteBuffer" => [Core, 72], # 5.2.2 - Reading, Writing, Copying Buffer Objects
"clEnqueueReadBufferRect" => [Core, 74], # 5.2.2 - Reading, Writing and Copying Buffer Objects
"clEnqueueWriteBufferRect" => [Core, 75], # 5.2.2 - Reading, Writing and Copying Buffer Objects
"clEnqueueCopyBuffer" => [Core, 79], # 5.2.2 - Reading, Writing, Copying Buffer Objects
"clEnqueueCopyBufferRect" => [Core, 81], # 5.2.2 - Reading, Writing and Copying Buffer Objects
"clEnqueueFillBuffer" => [Core, 84], # 5.2.2 - Reading, Writing and Copying Buffer Objects
"clEnqueueMapBuffer" => [Core, 86], # 5.2.3 - Mapping Buffer Objects
"clCreateImage" => [Core, 90], # 5.3.1 - Creating Image Objects
"cl_image_format" => [Core, 92], # 5.3.1.1 - Image Format Descriptor
"imageDescriptor" => [Core, 95], # 5.3.1.2 - Image Descriptor
"clGetSupportedImageFormats" => [Core, 96], # 5.3.2 - Querying List of Supported Image Formats
"supportedImageFormats" => [Core, 97], # 5.3.2.1 - Supported Image Formats
"clEnqueueReadImage" => [Core, 98], # 5.3.3 - Reading, Writing and Copying Image Objects
"clEnqueueWriteImage" => [Core, 99], # 5.3.3 - Reading, Writing and Copying Image Objects
"clEnqueueCopyImage" => [Core, 104], # 5.3.3 - Reading, Writing and Copying Image Objects
"clEnqueueFillImage" => [Core, 105], # 5.3.3 - Reading, Writing and Copying Image Objects
"clEnqueueCopyImageToBuffer" => [Core, 107], # 5.3.4 - Copying between Image and Buffer Objects
"clEnqueueCopyBufferToImage" => [Core, 110], # 5.3.4 - Copying between Image and Buffer Objects
"clEnqueueMapImage" => [Core, 112], # 5.3.5 - Mapping Image Objects
"clGetImageInfo" => [Core, 116], # 5.3.6 - Image Object Queries
"clRetainMemObject" => [Core, 118], # 5.4.1 - Retaining and Releasing Memory Objects
"clReleaseMemObject" => [Core, 118], # 5.4.1 - Retaining and Releasing Memory Objects
"clSetMemObjectDestructorCallback" => [Core, 119], # 5.4.1 - Retaining and Releasing Memory Objects
"clEnqueueUnmapMemObject" => [Core, 120], # 5.4.2 - Unmapping Mapped Memory Objects
"clEnqueueMigrateMemObjects" => [Core, 123], # 5.4.4 - Migrating Memory Objects
"clGetMemObjectInfo" => [Core, 125], # 5.4.5 - Memory Object Queries
"clCreateSampler" => [Core, 128], # 5.5.1 - Creating Sampler Objects
"clRetainSampler" => [Core, 129], # 5.5.1 - Creating Sampler Objects
"clReleaseSampler" => [Core, 129], # 5.5.1 - Creating Sampler Objects
"clGetSamplerInfo" => [Core, 130], # 5.5.2 - Sampler Object Queries
"clCreateProgramWithSource" => [Core, 132], # 5.6.1 - Creating Program Objects
"clCreateProgramWithBinary" => [Core, 133], # 5.6.1 - Creating Program Objects
"clCreateProgramWithBuiltInKernels" => [Core, 135], # 5.6.1 - Creating Program Objects
"clRetainProgram" => [Core, 136], # 5.6.1 - Creating Program Objects
"clReleaseProgram" => [Core, 136], # 5.6.1 - Creating Program Objects
"clBuildProgram" => [Core, 137], # 5.6.2 - Building Program Executables
"clCompileProgram" => [Core, 139], # 5.6.3 - Separate Compilation and Linking of Programs
"clLinkProgram" => [Core, 142], # 5.6.3 - Separate Compilation and Linking of Programs
"clUnloadPlatformCompiler" => [Core, 149], # 5.6.6 - Unloading the OpenCL Compiler
"clGetProgramInfo" => [Core, 150], # 5.6.7 - Program Object Queries (updated for 1.2 rev 14)
"clGetProgramBuildInfo" => [Core, 153], # 5.6.7 - Program Object Queries
"clCreateKernel" => [Core, 157], # 5.7.1 - Creating Kernel Objects
"clCreateKernelsInProgram" => [Core, 158], # 5.7.1 - Creating Kernel Objects
"clRetainKernel" => [Core, 159], # 5.7.1 - Creating Kernel Objects
"clReleaseKernel" => [Core, 159], # 5.7.1 - Creating Kernel Objects
"clSetKernelArg" => [Core, 160], # 5.7.2 - Setting Kernel Arguments
"clGetKernelInfo" => [Core, 162], # 5.7.3 - Kernel Object Queries (updated for 1.2 rev 14)
"clGetKernelWorkGroupInfo" => [Core, 164], # 5.7.3 - Kernel Object Queries
"clGetKernelArgInfo" => [Core, 166], # 5.7.3 - Kernel Object Queries (updated for 1.2 rev 14)
"clEnqueueNDRangeKernel" => [Core, 169], # 5.8 - Executing Kernels (updated for 1.2 rev 14)
"clEnqueueTask" => [Core, 172], # 5.8 - Executing Kernels (updated for 1.2 rev 14)
"clEnqueueNativeKernel" => [Core, 174], # 5.8 - Executing Kernels (updated for 1.2 rev 14)
"clCreateUserEvent" => [Core, 178], # 5.9 - Event Objects
"clSetUserEventStatus" => [Core, 178], # 5.9 - Event Objects
"clWaitForEvents" => [Core, 179], # 5.9 - Event Objects
"clGetEventInfo" => [Core, 180], # 5.9 - Event Objects
"clSetEventCallback" => [Core, 183], # 5.9 - Event Objects
"clRetainEvent" => [Core, 184], # 5.9 - Event Objects
"clReleaseEvent" => [Core, 185], # 5.9 - Event Objects
"clEnqueueMarkerWithWaitList" => [Core, 186], # 5.10 - Markers, Barriers and Waiting for Events
"clEnqueueBarrierWithWaitList" => [Core, 187], # 5.10 - Markers, Barriers and Waiting for Events
"clGetEventProfilingInfo" => [Core, 190], # 5.12 - Profiling Operations on Memory Objects and Kernels
"clFlush" => [Core, 193], # 5.13 - Flush and Finish
"clFinish" => [Core, 193], # 5.13 - Flush and Finish
"scalarDataTypes" => [Core, 195], # 6.1.1 - Built-in Scalar Data Types
"vectorDataTypes" => [Core, 198], # 6.1.2 - Built-in Vector Data Types
"otherDataTypes" => [Core, 199], # 6.1.3 - Other Built-in Data Types
"reservedDataTypes" => [Core, 200], # 6.1.4 - Reserved Data Types
"convert_T" => [Core, 207], # 6.2.3 - Explicit Conversions
"as_typen" => [Core, 212], # 6.2.4.2 - Reinterpreting Types Using as_typen()
"operators" => [Core, 215], # 6.3 - Operators
"addressSpaceQualifier" => [Core, 222], # 6.5 - Address Space Qualifiers
"accessQualifiers" => [Core, 226], # 6.6 - Access Qualifiers
"functionQualifiers" => [Core, 227], # 6.7 - Function Qualifiers
"storageQualifiers" => [Core, 230], # 6.8 - Storage-class Qualifiers
"restrictions" => [Core, 231], # 6.9 - Restrictions
"preprocessorDirectives" => [Core, 234], # 6.10 - Preprocessor Directives and Macros
"attribute" => [Core, 236], # 6.11. - Attribute Qualifiers
"attributes-types" => [Core, 237], # 6.11.1 - Specifying Attributes of Types
"attributes-variables" => [Core, 239], # 6.11.3 - Specifying Attributes of Variables
"attributes-blocksAndControlFlow" => [Core, 241], # 6.11.4 - Specifying Attributes of Blocks and Control...
"workItemFunctions" => [Core, 242], # 6.12.1 - Work-Item Functions
"mathFunctions" => [Core, 244], # 6.12.2 - Math Functions
"mathConstants" => [Core, 251], # 6.12.2 - Table at end of Math Functions
"FP_CONTRACT" => [Core, 252], # 6.12.2.1 - Floating-point macros and pragmas
"macroLimits" => [Core, 252], # 6.12.2.1 - Floating-point macros and pragmas
"integerFunctions" => [Core, 256], # 6.12.3 - Integer Functions
"commonFunctions" => [Core, 260], # 6.12.4 - Common Functions
"geometricFunctions" => [Core, 262], # 6.12.5 - Geometric Functions
"relationalFunctions" => [Core, 264], # 6.12.6 - Relational Functions
"vectorDataLoadandStoreFunctions" => [Core, 267], # 6.12.7 - Vector Data Load and Store Functions
"synchFunctions" => [Core, 274], # 6.12.8 - Synchronization Functions
"explicitMemoryFenceFunctions" => [Core, 275], # 6.12.9 - Explicit Memory Fence Functions
"asyncCopyFunctions" => [Core, 276], # 6.12.10 - Async Copies from Global to Local Memory...
"atomicFunctions" => [Core, 279], # 6.12.11 - Atomic Functions for 32-bit integers
"miscVectorFunctions" => [Core, 282], # 6.12.12 Miscellaneous Vector Functions
"printfFunction" => [Core, 284], # 6.12.13 - printf
"imageFunctions" => [Core, 292], # 6.12.14 - Image Read and Write Functions
"sampler_t" => [Core, 292], # 6.12.14.1 - Samplers
"imageQueryFunctions" => [Core, 311], # 6.12.14.5 - Built-in Image Query Functions
"imageAddressFiltering" => [Core, 326], # 8 - Image Addressing and Filtering
"referenceWong" => [Core, 355], # 11 - References (to Wong paper)
"deprecated" => [Core, 373], # F - Changes
"EXTENSION" => [Ext, 6], # 9.1 - Compiler Directives for Optional Extensions
"clGetExtensionFunctionAddressForPlatform" => [Ext, 7], # 9.2 - Getting OpenCL API Extension Function Pointers
"cl_khr_int64_base_atomics" => [Ext, 10], # 9.3 - 64-bit Atomics
"cl_khr_int64_extended_atomics" => [Ext, 10], # 9.3 - 64-bit Atomics
"atom_add" => [Ext, 10], # 9.3 - 64-bit Atomics
"imageFunctions3D" => [Ext, 12], # 9.4 - Writing to 3D image memory objects
"cl_khr_3d_image_writes" => [Ext, 12], # 9.4 - Writing to 3D image memory objects
"cl_khr_fp16" => [Ext, 14], # 9.5 - Half Floating-Point
"imageFunctionsHalf" => [Ext, 27], # 9.5.8 - Image Read and Write Functions (half)
"cl_khr_gl_sharing" => [Ext, 39], # 9.6 - Creating CL context from a GL context or share group
"clGetGLContextInfoKHR" => [Ext, 43], # 9.6.5 - Additions to section 9.8 of the...
"clCreateFromGLBuffer" => [Ext, 49], # 9.7.2 - CL Buffer Objects -> GL Buffer Objects
"clCreateFromGLTexture" => [Ext, 50], # 9.7.3 - CL Image Objects -> GL Textures
"clCreateFromGLRenderbuffer" => [Ext, 53], # 9.7.4 - CL Image Objects -> GL Renderbuffers
"clGetGLObjectInfo" => [Ext, 54], # 9.7.5 - Querying GL object information from a CL...
"clGetGLTextureInfo" => [Ext, 55], # 9.7.5 - Querying GL object information from a CL...
"clEnqueueAcquireGLObjects" => [Ext, 56], # 9.7.6 - Sharing memory objects that map to GL objects...
"clEnqueueReleaseGLObjects" => [Ext, 58], # 9.7.6 - Sharing memory objects that map to GL objects...
"cl_khr_gl_event" => [Ext, 61], # 9.8 - Creating CL event objets
"clCreateEventFromGLsyncKHR" => [Ext, 62], # 9.8.4 - Additions to Chapter 5
"cl_khr_d3d10_sharing" => [Ext, 66], # 9.9 - Sharing Memory Objects with Direct3D 10
"clGetDeviceIDsFromD3D10KHR" => [Ext, 71], # 9.9.7.1 - Querying OpenCL Devices Corresponding to... 11...
"clCreateFromD3D10BufferKHR" => [Ext, 73], # 9.9.7.3 - Sharing Direct3D 10 Buffer Resources as OpenCL...
"clCreateFromD3D10Texture2DKHR" => [Ext, 74], # 9.9.7.4 - Sharing Direct3D 10 Texture and Resources...
"clCreateFromD3D10Texture3DKHR" => [Ext, 75], # 9.9.7.4 - Sharing Direct3D 10 Texture and...
"clEnqueueAcquireD3D10ObjectsKHR" => [Ext, 77], # 9.9.7.6 - Sharing memory objects created from Direct3D 10..
"clEnqueueReleaseD3D10ObjectsKHR" => [Ext, 79], # 9.9.7.6 - Sharing memory objects created from...
"cl_khr_dx9_media_sharing" => [Ext, 83], # 9.10 - DX9 Media Surface Sharing
"clGetDeviceIDsFromDX9MediaAdapterKHR" => [Ext, 88], # 9.10.7.1 - Querying OpenCL Devices corresponding....
"clCreateFromDX9MediaSurfaceKHR" => [Ext, 89], # 9.10.7.2 Creating Media Resources as OpenCL Image Objects
"clEnqueueAcquireDX9MediaSurfacesKHR" => [Ext, 92], # 9.10.7.4 - Sharing Memory Objects created from Media Surfaces
"clEnqueueReleaseDX9MediaSurfacesKHR" => [Ext, 93], # 9.10.7.4 - Sharing Memory Objects...
"cl_khr_d3d11_sharing" => [Ext, 97], # 9.11 - Sharing Memory Objects with Direct3D 11
"clGetDeviceIDsFromD3D11KHR" => [Ext, 102], # 9.11.7.1 - Querying OpenCL Devices Corresponding to Direct3D
"clCreateFromD3D11BufferKHR" => [Ext, 104], # 9.11.7.3 - Sharing Direct3D 11 Buffer Resources
"clCreateFromD3D11Texture2DKHR" => [Ext, 105], # 9.11.7.4 - Sharing Direct3D 11 Texture and Resources...
"clCreateFromD3D11Texture3DKHR" => [Ext, 106], # 9.11.7.4 - Sharing Direct3D 11 Texture and Resources....
"clEnqueueAcquireD3D11ObjectsKHR" => [Ext, 108], # 9.11.7.6 - Sharing memory objects created from Direct3D 11...
"clEnqueueReleaseD3D11ObjectsKHR" => [Ext, 110], # 9.11.7.6 - Sharing memory objects created from Direct3D 11...
"cl_khr_icd" => [Ext, 113], # 9.12 - OpenCL Installable Client Driver (ICD)
"clIcdGetPlatformIDsKHR" => [Ext, 116], # 9.12.9 - Additions to chapter 4...
}
###############################################################################
# Copy the specified file to the output, substituting any references to spec page numbers
#
IO.foreach(ARGV[0]) do |line|
if line.match("namedest=")
keyword = line.sub(/^.*namedest=/, "").sub(/\".*$/, "").chomp.rstrip
if Pagenums.has_key?(keyword)
specName = Pagenums.fetch(keyword)[0]
pageNum = Pagenums.fetch(keyword)[1]
#puts "specName=" + specName + ", pageNum=" + pageNum.to_s
puts line.sub(/namedest=[^\s]*\"/, "page=" + pageNum.to_s + '"').sub(/opencl-1.x-latest.pdf/, specName)
else
abort("Spec page number for keyword \"" + keyword + "\" not found in " + $0) + '"'
end
else
puts line
end
end
|