Skip to content

Commit 74dae09

Browse files
authored
Merge pull request hardkernel#51 from yan-wyb/khadas-vims-4.9.y
npu: VIM3/VIM3L: update driver to version 6.4.6.2
2 parents 20dad82 + c503b9c commit 74dae09

157 files changed

Lines changed: 13116 additions & 7009 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

drivers/amlogic/npu/Kbuild

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ OBJS := $(OS_KERNEL_DIR)/gc_hal_kernel_device.o \
9898
$(OS_KERNEL_DIR)/gc_hal_kernel_linux.o \
9999
$(OS_KERNEL_DIR)/gc_hal_kernel_math.o \
100100
$(OS_KERNEL_DIR)/gc_hal_kernel_os.o \
101+
$(OS_KERNEL_DIR)/gc_hal_kernel_debug.o \
101102
$(OS_KERNEL_DIR)/gc_hal_kernel_debugfs.o \
102103
$(OS_KERNEL_DIR)/gc_hal_kernel_allocator.o \
103104
$(OS_KERNEL_DIR)/allocator/default/gc_hal_kernel_allocator_user_memory.o \
@@ -122,12 +123,12 @@ endif
122123
OBJS += $(HAL_KERNEL_DIR)/gc_hal_kernel.o \
123124
$(HAL_KERNEL_DIR)/gc_hal_kernel_command.o \
124125
$(HAL_KERNEL_DIR)/gc_hal_kernel_db.o \
125-
$(HAL_KERNEL_DIR)/gc_hal_kernel_debug.o \
126126
$(HAL_KERNEL_DIR)/gc_hal_kernel_event.o \
127127
$(HAL_KERNEL_DIR)/gc_hal_kernel_heap.o \
128128
$(HAL_KERNEL_DIR)/gc_hal_kernel_mmu.o \
129-
$(HAL_KERNEL_DIR)/gc_hal_kernel_video_memory.o \
130129
$(HAL_KERNEL_DIR)/gc_hal_kernel_power.o \
130+
$(HAL_KERNEL_DIR)/gc_hal_kernel_video_memory.o \
131+
$(HAL_KERNEL_DIR)/gc_hal_kernel_security.o \
131132
$(HAL_KERNEL_DIR)/gc_hal_kernel_security_v1.o \
132133
$(HAL_KERNEL_DIR)/gc_hal_kernel_preemption.o
133134

drivers/amlogic/npu/inc/drvi/gc_vsc_drvi_interface.h

Lines changed: 148 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
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
@@ -70,8 +70,27 @@
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

479513
typedef 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 */
671707
typedef 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

10081062
typedef void* SHADER_HANDLE;
1063+
typedef void* PROGRAM_RESOURCE_LAYOUT_HANDLE;
1064+
typedef void* SHADER_RESOURCE_LAYOUT_HANDLE;
1065+
typedef void* PROGRAM_LINKER_PARAM_HANDLE;
10091066
typedef void* VSC_PRIV_DATA_HANDLE;
10101067

10111068
typedef enum _VSC_SHADER_RESOURCE_TYPE
@@ -1225,6 +1282,36 @@ gceSTATUS vscFinalizeHwPipelineShadersStates(VSC_SYS_CONTEXT* pSysCtx, VSC_HW_PI
12251282
gceSTATUS vscCreatePrivateData(VSC_CORE_SYS_CONTEXT* pCoreSysCtx, VSC_PRIV_DATA_HANDLE* phOutPrivData, gctBOOL bForOCL);
12261283
gceSTATUS 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);
12361323
gceSTATUS vscDestroyShader(SHADER_HANDLE hShader);
12371324

1325+
/* Get VIR Shader version. */
1326+
gceSTATUS vscGetShaderVersion(OUT gctUINT32 * shaderVersion);
1327+
12381328
/* Print (dump) shader */
12391329
gceSTATUS 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 ? */
14171517
gctBOOL
@@ -1470,6 +1570,49 @@ gceSTATUS vscGetTemporaryDir(OUT gctSTRING gcTmpDir);
14701570

14711571
void 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+
14731616
END_EXTERN_C();
14741617

14751618
#endif /*__gc_vsc_drvi_interface_h_ */

drivers/amlogic/npu/inc/drvi/gc_vsc_drvi_kernel_profile.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
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
@@ -106,6 +106,9 @@ typedef struct PROG_CL_IMAGE_TABLE_ENTRY
106106
{
107107
gctUINT imageArgIndex;
108108

109+
/* Decl'ed array size by OCL, at this time, it must be 1 */
110+
gctSIZE_T arraySize;
111+
109112
gctBOOL kernelHardcodeSampler;
110113
gctUINT samplerArgIndex;
111114
gctUINT constSamplerValue;

drivers/amlogic/npu/inc/drvi/gc_vsc_drvi_lib_link.h

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
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
@@ -111,9 +111,16 @@ typedef enum _VSC_RES_OP_BIT
111111
VSC_RES_OP_BIT_TEXLD_PCF = 0x00002000,
112112
VSC_RES_OP_BIT_TEXLD_BIAS_PCF = 0x00004000,
113113
VSC_RES_OP_BIT_TEXLD_LOD_PCF = 0x00008000,
114-
VSC_RES_OP_BIT_LOAD_STORE = 0x00010000,
115-
VSC_RES_OP_BIT_IMAGE_OP = 0x00020000,
116-
VSC_RES_OP_BIT_ATOMIC = 0x00040000,
114+
VSC_RES_OP_BIT_MEM_LD_OP = 0x00010000,
115+
VSC_RES_OP_BIT_MEM_ST_OP = 0x00020000,
116+
VSC_RES_OP_BIT_MEM_LD_ST_OP = VSC_RES_OP_BIT_MEM_LD_OP
117+
| VSC_RES_OP_BIT_MEM_ST_OP,
118+
VSC_RES_OP_BIT_IMAGE_LD_OP = 0x00040000,
119+
VSC_RES_OP_BIT_IMAGE_ST_OP = 0x00080000,
120+
VSC_RES_OP_BIT_IMAGE_ADDR_OP = 0x00100000,
121+
VSC_RES_OP_BIT_IMAGE_OP = VSC_RES_OP_BIT_IMAGE_LD_OP
122+
| VSC_RES_OP_BIT_IMAGE_ST_OP,
123+
VSC_RES_OP_BIT_ATOMIC = 0x00200000,
117124
}VSC_RES_OP_BIT;
118125

119126
typedef enum _VSC_RES_ACT_BIT
@@ -132,6 +139,7 @@ typedef enum _VSC_LINK_POINT_RESOURCE_SUBTYPE
132139
VSC_LINK_POINT_RESOURCE_SUBTYPE_TEXGATHERPCF_D32F = 6,
133140
VSC_LINK_POINT_RESOURCE_SUBTYPE_NORMALIZE_TEXCOORD = 7,
134141
VSC_LINK_POINT_RESOURCE_SUBTYPE_YCBCR_TEXTURE = 8,
142+
VSC_LINK_POINT_RESOURCE_SUBTYPE_UNORM_SNORM_TEXTURE = 9,
135143
} VSC_LINK_POINT_RESOURCE_SUBTYPE;
136144

137145
typedef struct _VSC_LIB_LINK_POINT_FUNC_NAME

0 commit comments

Comments
 (0)