summaryrefslogtreecommitdiff
path: root/src/mesa/shader/slang/Public
diff options
context:
space:
mode:
authorMichal Krol <mjkrol@gmail.org>2005-01-17 16:01:49 +0000
committerMichal Krol <mjkrol@gmail.org>2005-01-17 16:01:49 +0000
commit7d079fd7802763efd8c2d8856117b5df0b3a14e4 (patch)
tree0a9acf31e2dda0cffa14e15672a05f078515b04c /src/mesa/shader/slang/Public
parentcc9ab78158049cee104101c608d4fa8082079214 (diff)
2005-oct-19 3dlabs slang compiler, tweaked a little bit
Diffstat (limited to 'src/mesa/shader/slang/Public')
-rwxr-xr-xsrc/mesa/shader/slang/Public/ShaderLang.h232
-rwxr-xr-xsrc/mesa/shader/slang/Public/ShaderLangExt.h189
2 files changed, 421 insertions, 0 deletions
diff --git a/src/mesa/shader/slang/Public/ShaderLang.h b/src/mesa/shader/slang/Public/ShaderLang.h
new file mode 100755
index 0000000000..44285e7bd8
--- /dev/null
+++ b/src/mesa/shader/slang/Public/ShaderLang.h
@@ -0,0 +1,232 @@
+/*
+//Copyright (C) 2002-2004 3Dlabs Inc. Ltd.
+//All rights reserved.
+//
+//Redistribution and use in source and binary forms, with or without
+//modification, are permitted provided that the following conditions
+//are met:
+//
+// Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//
+// Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following
+// disclaimer in the documentation and/or other materials provided
+// with the distribution.
+//
+// Neither the name of 3Dlabs Inc. Ltd. nor the names of its
+// contributors may be used to endorse or promote products derived
+// from this software without specific prior written permission.
+//
+//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+//"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+//LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+//FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+//COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+//INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+//BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+//LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+//CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+//LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+//ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+//POSSIBILITY OF SUCH DAMAGE.
+*/
+#ifndef _COMPILER_INTERFACE_INCLUDED_
+#define _COMPILER_INTERFACE_INCLUDED_
+
+
+#ifdef _WIN32
+#define C_DECL __cdecl
+#define SH_IMPORT_EXPORT
+#else
+#define SH_IMPORT_EXPORT
+#define __fastcall
+#define C_DECL
+#endif
+
+/*
+// This is the platform independent interface between an OGL driver
+// and the shading language compiler/linker.
+*/
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/*
+// Driver must call this first, once, before doing any other
+// compiler/linker operations.
+*/
+SH_IMPORT_EXPORT int ShInitialize();
+/*
+// Driver should call this at shutdown.
+*/
+SH_IMPORT_EXPORT int __fastcall ShFinalize();
+/*
+// to be used for hardwareDataType and userDataType by ICD
+*/
+typedef enum {
+ EFloat,
+ EInt,
+ EBool,
+ EFloat_Vec2,
+ EFloat_Vec3,
+ EFloat_Vec4,
+ EInt_Vec2,
+ EInt_Vec3,
+ EInt_Vec4,
+ EBool_Vec2,
+ EBool_Vec3,
+ EBool_Vec4,
+ EFloat_Mat2,
+ EFloat_Mat3,
+ EFloat_Mat4,
+ ESampler_1D,
+ ESampler_2D,
+ ESampler_3D,
+ ESampler_Cube,
+ ESampler_1D_Shadow,
+ ESampler_2D_Shadow,
+ EStruct
+} ShBasicType;
+
+/*
+// Types of languages the compiler can consume.
+*/
+typedef enum {
+ EShLangVertex,
+ EShLangFragment,
+ EShLangPack,
+ EShLangUnpack,
+ EShLangCount,
+} EShLanguage;
+
+/*
+// Types of output the linker will create.
+*/
+typedef enum {
+ EShExVertexFragment,
+ EShExPackFragment,
+ EShExUnpackFragment,
+ EShExFragment
+} EShExecutable;
+
+/*
+// Optimization level for the compiler.
+*/
+typedef enum {
+ EShOptNoGeneration,
+ EShOptNone,
+ EShOptSimple, /* Optimizations that can be done quickly */
+ EShOptFull, /* Optimizations that will take more time */
+} EShOptimizationLevel;
+
+/*
+// Build a table for bindings. This can be used for locating
+// attributes, uniforms, globals, etc., as needed.
+*/
+typedef struct {
+ char* name;
+ int binding;
+} ShBinding;
+
+typedef struct {
+ int numBindings;
+ ShBinding* bindings; /* array of bindings */
+} ShBindingTable;
+
+/*
+// ShHandle held by but opaque to the driver. It is allocated,
+// managed, and de-allocated by the compiler/linker. It's contents
+// are defined by and used by the compiler and linker. For example,
+// symbol table information and object code passed from the compiler
+// to the linker can be stored where ShHandle points.
+//
+// If handle creation fails, 0 will be returned.
+*/
+typedef void* ShHandle;
+
+/*
+// Driver calls these to create and destroy compiler/linker
+// objects.
+*/
+SH_IMPORT_EXPORT ShHandle ShConstructCompiler(const EShLanguage, int debugOptions); /* one per shader */
+SH_IMPORT_EXPORT ShHandle ShConstructLinker(const EShExecutable, int debugOptions); /* one per shader pair */
+SH_IMPORT_EXPORT ShHandle ShConstructUniformMap(); /* one per uniform namespace (currently entire program object) */
+SH_IMPORT_EXPORT void ShDestruct(ShHandle);
+
+/*
+// The return value of ShCompile is boolean, indicating
+// success or failure.
+//
+// The info-log should be written by ShCompile into
+// ShHandle, so it can answer future queries.
+*/
+SH_IMPORT_EXPORT int ShCompile(
+ const ShHandle,
+ const char* const shaderStrings[],
+ const int numStrings,
+ const EShOptimizationLevel,
+ int debugOptions
+ );
+
+
+/*
+// Similar to ShCompile, but accepts an opaque handle to an
+// intermediate language structure.
+*/
+SH_IMPORT_EXPORT int ShCompileIntermediate(
+ ShHandle compiler,
+ ShHandle intermediate,
+ const EShOptimizationLevel,
+ int debuggable /* boolean */
+ );
+
+SH_IMPORT_EXPORT int ShLink(
+ const ShHandle, /* linker object */
+ const ShHandle h[], /* compiler objects to link together */
+ const int numHandles,
+ ShHandle uniformMap, /* updated with new uniforms */
+ short int** uniformsAccessed, /* returned with indexes of uniforms accessed */
+ int* numUniformsAccessed);
+
+/*
+// ShSetEncrpytionMethod is a place-holder for specifying
+// how source code is encrypted.
+*/
+SH_IMPORT_EXPORT void ShSetEncryptionMethod(ShHandle);
+
+/*
+// All the following return 0 if the information is not
+// available in the object passed down, or the object is bad.
+*/
+SH_IMPORT_EXPORT const char* ShGetInfoLog(const ShHandle);
+SH_IMPORT_EXPORT const void* ShGetExecutable(const ShHandle);
+SH_IMPORT_EXPORT int ShSetVirtualAttributeBindings(const ShHandle, const ShBindingTable*); /* to detect user aliasing */
+SH_IMPORT_EXPORT int ShSetFixedAttributeBindings(const ShHandle, const ShBindingTable*); /* to force any physical mappings */
+SH_IMPORT_EXPORT int ShGetPhysicalAttributeBindings(const ShHandle, const ShBindingTable**); /* for all attributes */
+/*
+// Tell the linker to never assign a vertex attribute to this list of physical attributes
+*/
+SH_IMPORT_EXPORT int ShExcludeAttributes(const ShHandle, int *attributes, int count);
+
+/*
+// Returns the location ID of the named uniform.
+// Returns -1 if error.
+*/
+SH_IMPORT_EXPORT int ShGetUniformLocation(const ShHandle uniformMap, const char* name);
+SH_IMPORT_EXPORT char* ShGetUniformName(const ShHandle linker, int virtualLocation);
+
+enum TDebugOptions {
+ EDebugOpNone = 0x000,
+ EDebugOpIntermediate = 0x001,
+ EDebugOpAssembly = 0x002,
+ EDebugOpObjectCode = 0x004,
+ EDebugOpLinkMaps = 0x008
+};
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* _COMPILER_INTERFACE_INCLUDED_ */
diff --git a/src/mesa/shader/slang/Public/ShaderLangExt.h b/src/mesa/shader/slang/Public/ShaderLangExt.h
new file mode 100755
index 0000000000..bb669f327e
--- /dev/null
+++ b/src/mesa/shader/slang/Public/ShaderLangExt.h
@@ -0,0 +1,189 @@
+//
+//Copyright (C) 2002-2004 3Dlabs Inc. Ltd.
+//All rights reserved.
+//
+//Redistribution and use in source and binary forms, with or without
+//modification, are permitted provided that the following conditions
+//are met:
+//
+// Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//
+// Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following
+// disclaimer in the documentation and/or other materials provided
+// with the distribution.
+//
+// Neither the name of 3Dlabs Inc. Ltd. nor the names of its
+// contributors may be used to endorse or promote products derived
+// from this software without specific prior written permission.
+//
+//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+//"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+//LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+//FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+//COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+//INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+//BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+//LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+//CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+//LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+//ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+//POSSIBILITY OF SUCH DAMAGE.
+//
+#ifndef _SHADERLANG_EXTENSION_INCLUDED_
+#define _SHADERLANG_EXTENSION_INCLUDED_
+
+#include "ShaderLang.h"
+
+//
+// This is the platform independent interface between an OGL driver
+// and the shading language compiler/linker.
+//
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+typedef enum {
+ EReserved = 0,
+ EFixed,
+ ERecommended,
+ EFloating
+} ShPriority;
+
+typedef enum {
+ ESymbol = 0,
+ EFloatConst,
+ EFloatConstPtr,
+ EIntConst,
+ EIntConstPtr,
+ EBoolConst,
+ EBoolConstPtr
+} ShDataType;
+
+// this definition will eventually go once we move to the new linker interface in the driver
+typedef enum {
+ EVirtualBinding,
+ EPhysicalBinding
+} ShVirtualPhysicalBinding;
+
+typedef struct {
+ int size; // out - total physical size for the binding in floats - P10
+ int location; // in-out - virtualLocation for all cases
+ int functionPriority; // out - used for giving priorities to function bindings
+ int proEpilogue; // out - essentially a bool defining whether its a prologue/epilogue or not, 1 means it is
+ int builtInName; // out - basically a bool value, 0 means not a builtInName, 1 means its a builtInName
+ int arraySize; // out - size of the array in units of its type - if the binding is for an array
+ ShPriority bindingPriority; // in-out - EFixed, ERecommended, EFloating
+ ShDataType bindingDataType; // in-out - whether its a symbol name or a constant value
+ ShBasicType hardwareDataType; // out - bool are loaded as floats on the hardware
+ ShBasicType userDataType; // out - mat3 -> mat3, ivec2 -> ivec2, vec2 -> vec2
+ ShBasicType basicUserType; // out - mat3 -> float, ivec2 ->int, vec2 -> float
+ int sizeOfType; // out - for vec3 -> 3, for float -> 1, for mat3 -> 3, mat3[10] -> 3
+ int matrix; // out - essentially a boolean, 0 means vector, 1 means matrix
+ union { // in-out
+ char* name;
+ float floatVal;
+ float* floatValPtr;
+ int intVal;
+ int* intValPtr;
+ };
+ // A pointer to ShP10PhysicalBinding or ShP20PhysicalBinding
+ void* targetDependentData; // in-out
+} ShBindingExt;
+
+//
+// to specify the type of binding
+//
+typedef enum {
+ EAttribute,
+ EUniform,
+ EVarying,
+ EFunction,
+ EConstant,
+ EFunctionRelocation,
+ EArbVertexLocal,
+ EArbVertexEnv,
+ EArbFragmentLocal,
+ EArbFragmentEnv,
+ EState,
+ ENoBindingType } ShBindingType;
+
+typedef struct {
+ // a pointer to ShBindingExt
+ ShBindingExt* pBinding;
+ int numOfBindings;
+ ShBindingType type;
+} ShBindingTableExt;
+
+typedef struct {
+ ShBindingTableExt *bindingTable;
+ int numOfBindingTables;
+} ShBindingList;
+
+SH_IMPORT_EXPORT ShHandle ShConstructBindings();
+SH_IMPORT_EXPORT ShHandle ShConstructLibrary();
+
+SH_IMPORT_EXPORT ShHandle ShAddBinding(ShHandle bindingHandle,
+ ShBindingExt* binding,
+ ShBindingType type);
+SH_IMPORT_EXPORT ShHandle ShAddBindingTable(ShHandle bindingHandle,
+ ShBindingTableExt *bindingTable,
+ ShBindingType type);
+
+SH_IMPORT_EXPORT int ShLinkExt(
+ const ShHandle, // linker object
+ const ShHandle h[], // compiler objects to link together
+ const int numHandles);
+
+SH_IMPORT_EXPORT ShBindingList* ShGetBindingList(const ShHandle linkerHandle);
+SH_IMPORT_EXPORT ShBindingTableExt* ShGetBindingTable(const ShHandle linkerHandle, ShBindingType type);
+SH_IMPORT_EXPORT int ShGetUniformLocationExt(const ShHandle linkerHandle, const char* name);
+SH_IMPORT_EXPORT int ShSetFixedAttributeBindingsExt(const ShHandle, const ShBindingTableExt*);
+SH_IMPORT_EXPORT int ShGetUniformLocationExt2(const ShHandle handle, const char* name, int* location, int* offset);
+SH_IMPORT_EXPORT int ShSetVirtualLocation(const ShHandle handle, ShBindingType type, int bindingIndex, int virtualLocation);
+SH_IMPORT_EXPORT int ShGetVirtualLocation(const ShHandle handle, ShBindingType type, int bindingIndex, int *virtualLocation);
+//
+// To get the bindings object from the linker object (after the link is done so that
+// bindings can be added to the list)
+//
+SH_IMPORT_EXPORT ShHandle ShGetBindings(const ShHandle linkerHandle);
+SH_IMPORT_EXPORT int ShAddLibraryCode(ShHandle library, const char* name, const ShHandle objectCodes[], const int numHandles);
+
+/*****************************************************************************
+ This code is used by the new shared linker
+ *****************************************************************************/
+//
+// Each programmable unit has a UnitExecutable. Targets may subclass
+// and append to this as desired.
+//
+typedef struct {
+ int name; // name of unit to which executable is targeted
+ int entry; // a target specific entry point
+ int count; // size of executable
+ const void* code; // read-only code
+} ShUnitExecutable;
+
+//
+// The "void*" returned from ShGetExecutable() will be an ShExecutable
+//
+typedef struct {
+ int count; // count of unit executables
+ ShUnitExecutable* executables;
+} ShExecutable;
+
+SH_IMPORT_EXPORT ShExecutable* ShGetExecutableExt(const ShHandle linkerHandle);
+
+typedef struct {
+ int numThread;
+ int stackSpacePerThread;
+ int visBufferValidity; // essenatially a boolean
+ int shaderFragTerminationStatus; // essentially a boolean
+} ShDeviceInfo;
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif // _SHADERLANG_EXTENSION_INCLUDED_