11/****************************************************************************
22*
3- * Copyright (c) 2005 - 2020 by Vivante Corp. All rights reserved.
3+ * Copyright (c) 2005 - 2021 by Vivante Corp. All rights reserved.
44*
55* The material in this file is confidential and contains trade secrets
66* of Vivante Corporation. This is proprietary information owned by
7070/* 0.0.1.47 Save the HW specific attributes in VIR_Shader 05/26/2020 */
7171/* 0.0.1.48 Add a new variable to save the symbol ID of the register spill base address in VIR_Shader 07/13/2020 */
7272/* 0.0.1.49 Save the RA instruction ID in VIR_Instruction 08/11/2020 */
73- #define gcdVIR_SHADER_BINARY_FILE_VERSION gcmCC(SHADER_64BITMODE, 0, 1, 49)
74- #define gcdVIR_PROGRAM_BINARY_FILE_VERSION gcmCC(SHADER_64BITMODE, 0, 1, 49)
73+ /* 0.0.1.50 Always save enclose function ID 01/19/2021 */
74+ /* 0.0.1.51 Add a new enumeration for VIR_InstFlag 01/25/2021 */
75+ /* 0.0.1.52 Save the linkage information for VIR_Symbol 02/23/2021 */
76+ /* 0.0.1.53 Change the layout of VIR_OPERAND_REL_INFO 02/24/2021 */
77+ /* 0.0.1.54 Save VIR_OPERAND_REL_INFO 02/25/2021 */
78+ /* 0.0.1.55 Change the value of VIR_SymFlagExt 03/03/2021 */
79+ #define gcdVIR_SHADER_BINARY_FILE_VERSION gcmCC(SHADER_64BITMODE, 0, 1, 55)
80+ #define gcdVIR_PROGRAM_BINARY_FILE_VERSION gcmCC(SHADER_64BITMODE, 0, 1, 55)
81+
82+ /*********************** VIR SHADER BINARY FILE SUB VERSION *********************/
83+ #define gcdVIR_SHADER_BINARY_SUB_VERSION gcmCC(SHADER_64BITMODE, 0, 0, 0)
84+
85+ /******************** VIR SHADER LIBRARY BINARY FILE VERSION *********************/
86+ /* Current vir shader CL/VX library version */
87+ /* 0.0.0.0 Start to set vir shader cl/vx library version, 12/23/2020 */
88+ /* 0.0.0.1 Change vir shader cl/vx library version to add long/ulong intrinsic functions, 03/15/2021 */
89+ #define gcdVIR_SHADER_CL_LIBRARY_FILE_VERSION gcmCC(SHADER_64BITMODE, 0, 0, 1)
90+
91+ /* Current vir shader graphic library version */
92+ /* 0.0.0.0 Start to set vir shader library version, 12/23/2020 */
93+ #define gcdVIR_SHADER_GRAPHICS_LIBRARY_FILE_VERSION gcmCC(SHADER_64BITMODE, 0, 0, 0)
7594
7695#if !defined(gcdTARGETHOST_BIGENDIAN )
7796#define gcdTARGETHOST_BIGENDIAN 0 /* default host little endian, to change the
@@ -421,31 +440,39 @@ typedef enum _VSC_IMAGE_FORMAT
421440 VSC_IMAGE_FORMAT_NONE = 0x00000000 ,
422441 /*F32.*/
423442 VSC_IMAGE_FORMAT_RGBA32F ,
443+ VSC_IMAGE_FORMAT_RGB32F ,
424444 VSC_IMAGE_FORMAT_RG32F ,
425445 VSC_IMAGE_FORMAT_R32F ,
426446 /*I32.*/
427447 VSC_IMAGE_FORMAT_RGBA32I ,
448+ VSC_IMAGE_FORMAT_RGB32I ,
428449 VSC_IMAGE_FORMAT_RG32I ,
429450 VSC_IMAGE_FORMAT_R32I ,
430451 /*UI32.*/
431452 VSC_IMAGE_FORMAT_RGBA32UI ,
453+ VSC_IMAGE_FORMAT_RGB32UI ,
432454 VSC_IMAGE_FORMAT_RG32UI ,
433455 VSC_IMAGE_FORMAT_R32UI ,
434456 /*F16.*/
435457 VSC_IMAGE_FORMAT_RGBA16F ,
458+ VSC_IMAGE_FORMAT_RGB16F ,
436459 VSC_IMAGE_FORMAT_RG16F ,
437460 VSC_IMAGE_FORMAT_R16F ,
438461 /*I16.*/
439462 VSC_IMAGE_FORMAT_RGBA16I ,
463+ VSC_IMAGE_FORMAT_RGB16I ,
440464 VSC_IMAGE_FORMAT_RG16I ,
441465 VSC_IMAGE_FORMAT_R16I ,
442466 /*UI16.*/
443467 VSC_IMAGE_FORMAT_RGBA16UI ,
468+ VSC_IMAGE_FORMAT_RGB16UI ,
444469 VSC_IMAGE_FORMAT_RG16UI ,
445470 VSC_IMAGE_FORMAT_R16UI ,
446471 /*F16 SNORM/UNORM.*/
447472 VSC_IMAGE_FORMAT_RGBA16 ,
448473 VSC_IMAGE_FORMAT_RGBA16_SNORM ,
474+ VSC_IMAGE_FORMAT_RGB16 ,
475+ VSC_IMAGE_FORMAT_RGB16_SNORM ,
449476 VSC_IMAGE_FORMAT_RG16 ,
450477 VSC_IMAGE_FORMAT_RG16_SNORM ,
451478 VSC_IMAGE_FORMAT_R16 ,
@@ -454,26 +481,33 @@ typedef enum _VSC_IMAGE_FORMAT
454481 VSC_IMAGE_FORMAT_BGRA8_UNORM ,
455482 VSC_IMAGE_FORMAT_RGBA8 ,
456483 VSC_IMAGE_FORMAT_RGBA8_SNORM ,
484+ VSC_IMAGE_FORMAT_RGB8 ,
485+ VSC_IMAGE_FORMAT_RGB8_SNORM ,
457486 VSC_IMAGE_FORMAT_RG8 ,
458487 VSC_IMAGE_FORMAT_RG8_SNORM ,
459488 VSC_IMAGE_FORMAT_R8 ,
460489 VSC_IMAGE_FORMAT_R8_SNORM ,
461490 /*I8.*/
462491 VSC_IMAGE_FORMAT_RGBA8I ,
492+ VSC_IMAGE_FORMAT_RGB8I ,
463493 VSC_IMAGE_FORMAT_RG8I ,
464494 VSC_IMAGE_FORMAT_R8I ,
465495 /*UI8.*/
466496 VSC_IMAGE_FORMAT_RGBA8UI ,
497+ VSC_IMAGE_FORMAT_RGB8UI ,
467498 VSC_IMAGE_FORMAT_RG8UI ,
468499 VSC_IMAGE_FORMAT_R8UI ,
469500 /*F-PACK.*/
470501 VSC_IMAGE_FORMAT_R5G6B5_UNORM_PACK16 ,
502+ VSC_IMAGE_FORMAT_R5G5B5_UNORM_PACK16 ,
471503 VSC_IMAGE_FORMAT_ABGR8_UNORM_PACK32 ,
472504 VSC_IMAGE_FORMAT_ABGR8I_PACK32 ,
473505 VSC_IMAGE_FORMAT_ABGR8UI_PACK32 ,
474506 VSC_IMAGE_FORMAT_A2R10G10B10_UNORM_PACK32 ,
475507 VSC_IMAGE_FORMAT_A2B10G10R10_UNORM_PACK32 ,
476508 VSC_IMAGE_FORMAT_A2B10G10R10UI_PACK32 ,
509+
510+ VSC_IMAGE_FORMAT_COUNT ,
477511} VSC_IMAGE_FORMAT ;
478512
479513typedef enum _VSC_ADDRSPACE
@@ -667,6 +701,8 @@ typedef struct _VSC_DRV_CALLBACKS
667701 PFN_FREE_VIDMEM_CB pfnFreeVidMemCb ;
668702}VSC_DRV_CALLBACKS , * PVSC_DRV_CALLBACKS ;
669703
704+ #define __MINIMUM_VID_MEM_ALIGN_SIZE__ 256
705+
670706/* VSC hardware (chip) configuration that poses on (re)-compiling */
671707typedef struct _VSC_HW_CONFIG
672708{
@@ -731,7 +767,7 @@ typedef struct _VSC_HW_CONFIG
731767 gctUINT canSrc0OfImgLdStBeTemp : 1 ;
732768
733769 gctUINT hasPSIOInterlock : 1 ;
734- gctUINT support128BppImage : 1 ;
770+ gctUINT support128bppTexture : 1 ;
735771 gctUINT supportMSAATexture : 1 ;
736772 gctUINT supportPerCompDepForLS : 1 ;
737773 gctUINT supportImgAddr : 1 ;
@@ -794,7 +830,23 @@ typedef struct _VSC_HW_CONFIG
794830 gctUINT hasUSCAtomicFix2 : 1 ;
795831 gctUINT hasFloatingMadFix : 1 ;
796832 gctUINT hasA0WriteEnableFix : 1 ;
797- gctUINT reserved1 : 26 ;
833+ gctUINT dstTexI2FInstDeprecate : 1 ;
834+ gctUINT hasAluFp16InstSupport : 1 ;
835+ gctUINT has14BitPcDual16 : 1 ;
836+ gctUINT ldstConv4RoundingMode : 1 ;
837+ gctUINT fullPackModeSupport : 1 ;
838+ gctUINT hasFp32ToFp16ConvFix : 1 ;
839+ gctUINT ldDststSrc2DenormFp32 : 1 ;
840+ gctUINT supportFloatOrdNotEqual : 1 ;
841+ gctUINT hasCallRetFix : 1 ;
842+ gctUINT supportJmpAfterEndPC : 1 ;
843+ gctUINT hasImgLdCompCountFix : 1 ;
844+ /* CModel and some old chips have the different behavior, CModel doesn't calculate shift all the time. */
845+ gctUINT CalcShiftForImgLdSt : 1 ;
846+ gctUINT supportFP32FMA : 1 ;
847+ gctUINT hasVec2IntMulMad : 1 ;
848+ gctUINT hasVec4IntMulMad : 1 ;
849+ gctUINT reserved1 : 11 ;
798850
799851 /* Last word */
800852 /* Followings will be removed after shader programming is removed out of VSC */
@@ -833,6 +885,7 @@ typedef struct _VSC_HW_CONFIG
833885 gctUINT maxTotalInstCount ;
834886 gctUINT maxVSInstCount ;
835887 gctUINT maxPSInstCount ;
888+ gctUINT maxInstCountUnderDual16 ;
836889 gctUINT maxHwNativeTotalConstRegCount ;
837890 gctUINT maxTotalConstRegCount ;
838891 gctUINT unifiedConst ;
@@ -960,6 +1013,7 @@ typedef gcsGLSLCaps VSC_GL_API_CONFIG, *PVSC_GL_API_CONFIG;
9601013#define VSC_COMPILER_FLAG_ENABLE_DUAL16_FOR_VK 0x00200000 /* It is a temp option to enable dual16 for vulkan. we need to remove after verify all vulkan cases. */
9611014#define VSC_COMPILER_FLAG_USE_CONST_REG_FOR_UBO 0x00400000
9621015#define VSC_COMPILER_FLAG_FORCE_GEN_FLOAT_MAD 0x00800000 /* Force generate a floating MAD, no matter if HW can support it. */
1016+ #define VSC_COMPILER_FLAG_ALWAYS_EMIT_OUTPUT 0x01000000
9631017
9641018#define VSC_COMPILER_FLAG_COMPILE_FULL_LEVELS 0x0000000F
9651019
@@ -1006,6 +1060,9 @@ VSC_SHADER_STAGE_BIT;
10061060#define VSC_CPT_SHADER_STAGE_CS 0
10071061
10081062typedef void * SHADER_HANDLE ;
1063+ typedef void * PROGRAM_RESOURCE_LAYOUT_HANDLE ;
1064+ typedef void * SHADER_RESOURCE_LAYOUT_HANDLE ;
1065+ typedef void * PROGRAM_LINKER_PARAM_HANDLE ;
10091066typedef void * VSC_PRIV_DATA_HANDLE ;
10101067
10111068typedef enum _VSC_SHADER_RESOURCE_TYPE
@@ -1225,6 +1282,36 @@ gceSTATUS vscFinalizeHwPipelineShadersStates(VSC_SYS_CONTEXT* pSysCtx, VSC_HW_PI
12251282gceSTATUS vscCreatePrivateData (VSC_CORE_SYS_CONTEXT * pCoreSysCtx , VSC_PRIV_DATA_HANDLE * phOutPrivData , gctBOOL bForOCL );
12261283gceSTATUS vscDestroyPrivateData (VSC_CORE_SYS_CONTEXT * pCoreSysCtx , VSC_PRIV_DATA_HANDLE hPrivData );
12271284
1285+ /* Two ways to save VSC_PROGRAM_LINKER_PARAM binary:
1286+ * 1) compiler allocates memory and return the memory in *pBinary and size in pSizeInByte
1287+ * if (* pBinary) is NULL when calling the function
1288+ * 2) Allocate memory in (*pBinary), size in pSizeInByte
1289+ * 3) Only save cfg and pPgResourceLayout to binary.
1290+ */
1291+ gceSTATUS vscSaveProgramLinkerParamToBinary (
1292+ IN PROGRAM_LINKER_PARAM_HANDLE handle ,
1293+ OUT void * * pBinary ,
1294+ OUT gctUINT * pSizeInByte );
1295+
1296+ /* read VSC_PROGRAM_LINKER_PARAM from binary
1297+ * binary is the out from vscSaveProgramLinkerParamToBinary function.
1298+ * sizeInByte is length of binary.
1299+ * If pLayout is empty, the function will allocate memory space.
1300+ * Only read cfg and pPgResourceLayout from binary.
1301+ */
1302+ gceSTATUS vscReadProgramLinkerParamFromBinary (
1303+ IN void * binary ,
1304+ IN gctUINT sizeInByte ,
1305+ OUT VSC_PROGRAM_LINKER_PARAM * * pParam );
1306+
1307+ /*
1308+ * Destroy all VSC_SHADER_COMPILER_PARAM's pointer member variables.
1309+ * But memory pointed to by param pointer will not be destroyed.
1310+ */
1311+ gceSTATUS vscDestroyProgramLinkerParam (
1312+ IN OUT VSC_PROGRAM_LINKER_PARAM * param );
1313+
1314+
12281315/* Create a shader with content unfilled. In general, driver calls this
12291316 function to create a shader, and then pass this shader handle to shader
12301317 generator. Or alternatively, shader generator can directly call this
@@ -1235,6 +1322,9 @@ gceSTATUS vscCreateShader(SHADER_HANDLE* pShaderHandle,
12351322 gctUINT shStage );
12361323gceSTATUS vscDestroyShader (SHADER_HANDLE hShader );
12371324
1325+ /* Get VIR Shader version. */
1326+ gceSTATUS vscGetShaderVersion (OUT gctUINT32 * shaderVersion );
1327+
12381328/* Print (dump) shader */
12391329gceSTATUS vscPrintShader (SHADER_HANDLE hShader ,
12401330 gctFILE hFile ,
@@ -1412,6 +1502,16 @@ vscImageSamplerNeedLibFuncForHWCfg(
14121502 gctUINT * KeyofImgSampler /* the key state of the image-sampler pair */
14131503 );
14141504
1505+ /* For given image descriptor and sampler value for HW cfg, do we
1506+ * need to do recompilation for the image read due to the component count issue ? */
1507+ gctBOOL
1508+ vscImageSamplerHasImgLdCompCountIssue (
1509+ void * pImageDesc ,
1510+ gctUINT imageSamplerValue ,
1511+ VSC_HW_CONFIG * pHwCfg ,
1512+ gctUINT * pKeyofImgSampler
1513+ );
1514+
14151515/* For given image descriptorfor HW cfg, do we
14161516 * need to do recompilation for the image write ? */
14171517gctBOOL
@@ -1470,6 +1570,49 @@ gceSTATUS vscGetTemporaryDir(OUT gctSTRING gcTmpDir);
14701570
14711571void vscSetIsLibraryShader (SHADER_HANDLE hShader , gctBOOL bIsLibraryShader );
14721572
1573+ /****************************************************************************
1574+ Following are for driver to query some information.
1575+ *****************************************************************************/
1576+ gctBOOL
1577+ vscQueryImgLdStSuppport (
1578+ IN VSC_HW_CONFIG * pHwCfg ,
1579+ IN gctBOOL bUseInGraphicStage
1580+ );
1581+
1582+ gctBOOL
1583+ vscQueryTexldUSupport (
1584+ IN VSC_HW_CONFIG * pHwCfg
1585+ );
1586+
1587+ /****************************************************************************
1588+ Following are for the OpenCL SPIR-V/VIR_Shader support.
1589+ *****************************************************************************/
1590+ gctUINT
1591+ vscGetKernelFunctionCount (
1592+ IN SHADER_HANDLE pKernelShaderHandle
1593+ );
1594+
1595+ gceSTATUS
1596+ vscGetKernelFunctionNameByIndex (
1597+ IN SHADER_HANDLE pKernelShaderHandle ,
1598+ IN gctUINT kernelIndex ,
1599+ OUT gctSTRING * pFuncNameString
1600+ );
1601+
1602+ gceSTATUS
1603+ vscLinkKernel (
1604+ OUT SHADER_HANDLE destShaderHandle ,
1605+ IN SHADER_HANDLE * srcShaderHandles ,
1606+ IN gctUINT count ,
1607+ IN VSC_SYS_CONTEXT * sysCtx
1608+ );
1609+
1610+ gceSTATUS
1611+ vscLoadKernel (
1612+ IN SHADER_HANDLE pShaderHandle ,
1613+ IN gctSTRING pKernelName
1614+ );
1615+
14731616END_EXTERN_C ();
14741617
14751618#endif /*__gc_vsc_drvi_interface_h_ */
0 commit comments