summaryrefslogtreecommitdiff
path: root/src/mesa/shader/slang/Public/ShaderLangExt.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/shader/slang/Public/ShaderLangExt.h')
-rwxr-xr-xsrc/mesa/shader/slang/Public/ShaderLangExt.h189
1 files changed, 189 insertions, 0 deletions
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_