1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530 |
- /****************************************************************************
- *
- * Copyright (c) 2005 - 2014 by Vivante Corp. All rights reserved.
- *
- * The material in this file is confidential and contains trade secrets
- * of Vivante Corporation. This is proprietary information owned by
- * Vivante Corporation. No part of this work may be disclosed,
- * reproduced, copied, transmitted, or used in any way for any purpose,
- * without the express written permission of Vivante Corporation.
- *
- *****************************************************************************/
- #ifndef __gc_hal_base_h_
- #define __gc_hal_base_h_
- #include "gc_hal_enum.h"
- #include "gc_hal_types.h"
- #include "gc_hal_dump.h"
- #ifdef __cplusplus
- extern "C" {
- #endif
- /******************************************************************************\
- ****************************** Object Declarations *****************************
- \******************************************************************************/
- typedef struct _gckOS * gckOS;
- typedef struct _gcoHAL * gcoHAL;
- typedef struct _gcoOS * gcoOS;
- typedef struct _gco2D * gco2D;
- typedef struct gcsATOM * gcsATOM_PTR;
- #if gcdENABLE_3D
- typedef struct _gco3D * gco3D;
- typedef struct _gcoCL * gcoCL;
- typedef struct _gcsFAST_FLUSH * gcsFAST_FLUSH_PTR;
- #endif
- typedef struct _gcoSURF * gcoSURF;
- typedef struct _gcsSURF_INFO * gcsSURF_INFO_PTR;
- typedef struct _gcsSURF_NODE * gcsSURF_NODE_PTR;
- typedef struct _gcsSURF_FORMAT_INFO * gcsSURF_FORMAT_INFO_PTR;
- typedef struct _gcsPOINT * gcsPOINT_PTR;
- typedef struct _gcsSIZE * gcsSIZE_PTR;
- typedef struct _gcsRECT * gcsRECT_PTR;
- typedef struct _gcsBOUNDARY * gcsBOUNDARY_PTR;
- typedef struct _gcoDUMP * gcoDUMP;
- typedef struct _gcoHARDWARE * gcoHARDWARE;
- typedef union _gcuVIDMEM_NODE * gcuVIDMEM_NODE_PTR;
- typedef struct _gcsVIDMEM_NODE * gckVIDMEM_NODE;
- #if gcdENABLE_VG
- typedef struct _gcoVG * gcoVG;
- typedef struct _gcsCOMPLETION_SIGNAL * gcsCOMPLETION_SIGNAL_PTR;
- typedef struct _gcsCONTEXT_MAP * gcsCONTEXT_MAP_PTR;
- #else
- typedef void * gcoVG;
- #endif
- #if gcdSYNC
- typedef struct _gcoFENCE * gcoFENCE;
- typedef struct _gcsSYNC_CONTEXT * gcsSYNC_CONTEXT_PTR;
- #endif
- /******************************************************************************\
- ********************* Share obj lock/unlock macros. ****************************
- \******************************************************************************/
- #define gcmLOCK_SHARE_OBJ(Obj) \
- { \
- if(Obj->sharedLock != gcvNULL)\
- {\
- (gcoOS_AcquireMutex( \
- gcvNULL, Obj->sharedLock, gcvINFINITE));\
- }\
- }
- #define gcmUNLOCK_SHARE_OBJ(Obj)\
- {\
- if(Obj->sharedLock != gcvNULL)\
- {\
- (gcoOS_ReleaseMutex(gcvNULL, Obj->sharedLock));\
- }\
- }
- #if defined(ANDROID)
- typedef struct _gcoOS_SymbolsList gcoOS_SymbolsList;
- #endif
- /******************************************************************************\
- ******************************* Process local storage *************************
- \******************************************************************************/
- typedef struct _gcsPLS * gcsPLS_PTR;
- #if gcdENABLE_3D
- /******************************************************************************
- **
- ** Patch defines which should be moved to dedicate file later
- **
- ** !!! ALWAYS ADD new ID in the TAIL, otherwise will break exising TRACE FILE
- *******************************************************************************/
- typedef enum _gcePATCH_ID
- {
- gcvPATCH_NOTINIT = -1,
- gcvPATCH_INVALID = 0,
- #if gcdDEBUG_OPTION
- gcvPATCH_DEBUG,
- #endif
- gcvPATCH_GTFES30,
- gcvPATCH_CTGL11,
- gcvPATCH_CTGL20,
- gcvPATCH_GLBM11,
- gcvPATCH_GLBM21,
- gcvPATCH_GLBM25,
- gcvPATCH_GLBM27,
- gcvPATCH_GLBMGUI,
- gcvPATCH_GFXBENCH,
- gcvPATCH_ANTUTU, /* Antutu 3.x */
- gcvPATCH_ANTUTU4X, /* Antutu 4.x */
- gcvPATCH_QUADRANT,
- gcvPATCH_GPUBENCH,
- gcvPATCH_DUOKAN,
- gcvPATCH_GLOFTSXHM,
- gcvPATCH_XRUNNER,
- gcvPATCH_BUSPARKING3D,
- gcvPATCH_SIEGECRAFT,
- gcvPATCH_PREMIUM,
- gcvPATCH_RACEILLEGAL,
- gcvPATCH_MEGARUN,
- gcvPATCH_BMGUI,
- gcvPATCH_NENAMARK,
- gcvPATCH_NENAMARK2,
- gcvPATCH_FISHNOODLE,
- gcvPATCH_MM06,
- gcvPATCH_MM07,
- gcvPATCH_BM21,
- gcvPATCH_SMARTBENCH,
- gcvPATCH_JPCT,
- gcvPATCH_NEOCORE,
- gcvPATCH_RTESTVA,
- gcvPATCH_NBA2013,
- gcvPATCH_BARDTALE,
- gcvPATCH_F18,
- gcvPATCH_CARPARK,
- gcvPATCH_CARCHALLENGE,
- gcvPATCH_HEROESCALL,
- gcvPATCH_GLOFTF3HM,
- gcvPATCH_CRAZYRACING,
- gcvPATCH_FIREFOX,
- gcvPATCH_CHROME,
- gcvPATCH_MONOPOLY,
- gcvPATCH_SNOWCOLD,
- gcvPATCH_BM3,
- gcvPATCH_BASEMARKX,
- gcvPATCH_DEQP,
- gcvPATCH_SF4,
- gcePATCH_MGOHEAVEN2,
- gcePATCH_SILIBILI,
- gcePATCH_ELEMENTSDEF,
- gcePATCH_GLOFTKRHM,
- gcvPATCH_OCLCTS,
- gcvPATCH_A8HP,
- gcvPATCH_A8CN,
- gcvPATCH_WISTONESG,
- gcvPATCH_SPEEDRACE,
- gcvPATCH_FSBHAWAIIF,
- gcvPATCH_AIRNAVY,
- gcvPATCH_F18NEW,
- gcvPATCH_CKZOMBIES2,
- gcvPATCH_EADGKEEPER,
- gcvPATCH_BASEMARK2V2,
- gcvPATCH_RIPTIDEGP2,
- gcvPATCH_OESCTS,
- gcvPATCH_GANGSTAR,
- gcvPATCH_WHRKYZIXOVAN,
- gcvPATCH_NAMESGAS,
- gcvPATCH_AFTERBURNER,
- gcvPATCH_UIMARK,
- gcvPATCH_FM_OES_PLAYER,
- gcvPATCH_SUMSUNG_BENCH,
- gcvPATCH_ROCKSTAR_MAXPAYNE,
- gcvPATCH_TITANPACKING,
- gcvPATCH_OES20SFT,
- gcvPATCH_OES30SFT,
- gcvPATCH_BASEMARKOSIICN,
- gcvPATCH_FRUITNINJA,
- #if defined(ANDROID)
- gcePATCH_ANDROID_CTS_MEDIA_PRESENTATIONTIME,
- #endif
- gcvPATCH_ANDROID_COMPOSITOR,
- gcvPATCH_CTS_TEXTUREVIEW,
- gcvPATCH_WATER2_CHUKONG,
- gcvPATCH_COUNT
- } gcePATCH_ID;
- #endif /* gcdENABLE_3D */
- typedef void (* gctPLS_DESTRUCTOR) (
- gcsPLS_PTR
- );
- typedef struct _gcsPLS
- {
- /* Global objects. */
- gcoOS os;
- gcoHAL hal;
- /* Internal memory pool. */
- gctSIZE_T internalSize;
- gctPHYS_ADDR internalPhysical;
- gctPOINTER internalLogical;
- /* External memory pool. */
- gctSIZE_T externalSize;
- gctPHYS_ADDR externalPhysical;
- gctPOINTER externalLogical;
- /* Contiguous memory pool. */
- gctSIZE_T contiguousSize;
- gctPHYS_ADDR contiguousPhysical;
- gctPOINTER contiguousLogical;
- /* EGL-specific process-wide objects. */
- gctPOINTER eglDisplayInfo;
- gctPOINTER eglSurfaceInfo;
- gceSURF_FORMAT eglConfigFormat;
- /* PLS reference count */
- gcsATOM_PTR reference;
- /* PorcessID of the constrcutor process */
- gctUINT32 processID;
- /* ThreadID of the constrcutor process. */
- gctSIZE_T threadID;
- /* Flag for calling module destructor. */
- gctBOOL exiting;
- gctBOOL bNeedSupportNP2Texture;
- gctPLS_DESTRUCTOR destructor;
- /* Mutex to guard PLS access. currently it's for EGL.
- ** We can use this mutex for every PLS access.
- */
- gctPOINTER accessLock;
- #if gcdENABLE_3D
- /* Global patchID to overwrite the detection */
- gcePATCH_ID patchID;
- #endif
- }
- gcsPLS;
- extern gcsPLS gcPLS;
- #if gcdENABLE_3D
- #define gcPLS_INITIALIZER \
- { \
- gcvNULL, /* gcoOS object. */ \
- gcvNULL, /* gcoHAL object. */ \
- 0, /* internalSize */ \
- gcvNULL, /* internalPhysical */ \
- gcvNULL, /* internalLogical */ \
- 0, /* externalSize */ \
- gcvNULL, /* externalPhysical */ \
- gcvNULL, /* externalLogical */ \
- 0, /* contiguousSize */ \
- gcvNULL, /* contiguousPhysical */ \
- gcvNULL, /* contiguousLogical */ \
- gcvNULL, /* eglDisplayInfo */ \
- gcvNULL, /* eglSurfaceInfo */ \
- gcvSURF_A8R8G8B8,/* eglConfigFormat */ \
- gcvNULL, /* reference */ \
- 0, /* processID */ \
- 0, /* threadID */ \
- gcvFALSE, /* exiting */ \
- gcvFALSE, /* Special flag for NP2 texture. */ \
- gcvNULL, /* destructor */ \
- gcvNULL, /* accessLock */ \
- gcvPATCH_NOTINIT,/* global patchID */ \
- }
- #else
- #define gcPLS_INITIALIZER \
- { \
- gcvNULL, /* gcoOS object. */ \
- gcvNULL, /* gcoHAL object. */ \
- 0, /* internalSize */ \
- gcvNULL, /* internalPhysical */ \
- gcvNULL, /* internalLogical */ \
- 0, /* externalSize */ \
- gcvNULL, /* externalPhysical */ \
- gcvNULL, /* externalLogical */ \
- 0, /* contiguousSize */ \
- gcvNULL, /* contiguousPhysical */ \
- gcvNULL, /* contiguousLogical */ \
- gcvNULL, /* eglDisplayInfo */ \
- gcvNULL, /* eglSurfaceInfo */ \
- gcvSURF_A8R8G8B8,/* eglConfigFormat */ \
- gcvNULL, /* reference */ \
- 0, /* processID */ \
- 0, /* threadID */ \
- gcvFALSE, /* exiting */ \
- gcvFALSE, /* Special flag for NP2 texture. */ \
- gcvNULL, /* destructor */ \
- gcvNULL, /* accessLock */ \
- }
- #endif
- /******************************************************************************\
- ******************************* Thread local storage *************************
- \******************************************************************************/
- typedef struct _gcsTLS * gcsTLS_PTR;
- typedef void (* gctTLS_DESTRUCTOR) (
- gcsTLS_PTR
- );
- typedef struct _gcsTLS
- {
- gceHARDWARE_TYPE currentType;
- /* Current 3D hardwre of this thread */
- gcoHARDWARE currentHardware;
- /* Default 3D hardware of this thread */
- gcoHARDWARE defaultHardware;
- /* Only for separated 3D and 2D */
- gcoHARDWARE hardware2D;
- #if gcdENABLE_VG
- gcoVGHARDWARE vg;
- gcoVG engineVG;
- #endif /* gcdENABLE_VG */
- #if gcdENABLE_3D
- gco3D engine3D;
- #endif
- #if gcdENABLE_2D
- gco2D engine2D;
- #endif
- /*thread data */
- gctPOINTER context;
- /* ES(including es1 and es2) client driver context which is current state */
- gctPOINTER esClientCtx;
- gctTLS_DESTRUCTOR destructor;
- gctBOOL copied;
- /* libGAL.so handle */
- gctHANDLE handle;
- /* If true, do not releas 2d engine and hardware in hal layer */
- gctBOOL release2DUpper;
- }
- gcsTLS;
- /******************************************************************************\
- ********************************* Enumerations *********************************
- \******************************************************************************/
- typedef enum _gcePLS_VALUE
- {
- gcePLS_VALUE_EGL_DISPLAY_INFO,
- gcePLS_VALUE_EGL_SURFACE_INFO,
- gcePLS_VALUE_EGL_CONFIG_FORMAT_INFO,
- gcePLS_VALUE_EGL_DESTRUCTOR_INFO,
- }
- gcePLS_VALUE;
- /* Video memory pool type. */
- typedef enum _gcePOOL
- {
- gcvPOOL_UNKNOWN = 0,
- gcvPOOL_DEFAULT,
- gcvPOOL_LOCAL,
- gcvPOOL_LOCAL_INTERNAL,
- gcvPOOL_LOCAL_EXTERNAL,
- gcvPOOL_UNIFIED,
- gcvPOOL_SYSTEM,
- gcvPOOL_VIRTUAL,
- gcvPOOL_USER,
- gcvPOOL_CONTIGUOUS,
- gcvPOOL_NUMBER_OF_POOLS
- }
- gcePOOL;
- #if gcdENABLE_3D
- /* Blending functions. */
- typedef enum _gceBLEND_FUNCTION
- {
- gcvBLEND_ZERO,
- gcvBLEND_ONE,
- gcvBLEND_SOURCE_COLOR,
- gcvBLEND_INV_SOURCE_COLOR,
- gcvBLEND_SOURCE_ALPHA,
- gcvBLEND_INV_SOURCE_ALPHA,
- gcvBLEND_TARGET_COLOR,
- gcvBLEND_INV_TARGET_COLOR,
- gcvBLEND_TARGET_ALPHA,
- gcvBLEND_INV_TARGET_ALPHA,
- gcvBLEND_SOURCE_ALPHA_SATURATE,
- gcvBLEND_CONST_COLOR,
- gcvBLEND_INV_CONST_COLOR,
- gcvBLEND_CONST_ALPHA,
- gcvBLEND_INV_CONST_ALPHA,
- }
- gceBLEND_FUNCTION;
- /* Blending modes. */
- typedef enum _gceBLEND_MODE
- {
- gcvBLEND_ADD,
- gcvBLEND_SUBTRACT,
- gcvBLEND_REVERSE_SUBTRACT,
- gcvBLEND_MIN,
- gcvBLEND_MAX,
- }
- gceBLEND_MODE;
- /* Depth modes. */
- typedef enum _gceDEPTH_MODE
- {
- gcvDEPTH_NONE,
- gcvDEPTH_Z,
- gcvDEPTH_W,
- }
- gceDEPTH_MODE;
- #endif /* gcdENABLE_3D */
- #if (gcdENABLE_3D || gcdENABLE_VG)
- /* API flags. */
- typedef enum _gceAPI
- {
- gcvAPI_D3D = 1,
- gcvAPI_OPENGL_ES11,
- gcvAPI_OPENGL_ES20,
- gcvAPI_OPENGL_ES30,
- gcvAPI_OPENGL,
- gcvAPI_OPENVG,
- gcvAPI_OPENCL,
- }
- gceAPI;
- #endif
- typedef enum _gceWHERE
- {
- gcvWHERE_COMMAND,
- gcvWHERE_RASTER,
- gcvWHERE_PIXEL,
- }
- gceWHERE;
- typedef enum _gceHOW
- {
- gcvHOW_SEMAPHORE = 0x1,
- gcvHOW_STALL = 0x2,
- gcvHOW_SEMAPHORE_STALL = 0x3,
- }
- gceHOW;
- typedef enum _gceSignalHandlerType
- {
- gcvHANDLE_SIGFPE_WHEN_SIGNAL_CODE_IS_0 = 0x1,
- }
- gceSignalHandlerType;
- /* gcsHAL_Limits*/
- typedef struct _gcsHAL_LIMITS
- {
- /* chip info */
- gceCHIPMODEL chipModel;
- gctUINT32 chipRevision;
- gctUINT32 featureCount;
- gctUINT32 *chipFeatures;
- /* target caps */
- gctUINT32 maxWidth;
- gctUINT32 maxHeight;
- gctUINT32 multiTargetCount;
- gctUINT32 maxSamples;
- }gcsHAL_LIMITS;
- /******************************************************************************\
- *********** Generic Memory Allocation Optimization Using Containers ************
- \******************************************************************************/
- /* Generic container definition. */
- typedef struct _gcsCONTAINER_LINK * gcsCONTAINER_LINK_PTR;
- typedef struct _gcsCONTAINER_LINK
- {
- /* Points to the next container. */
- gcsCONTAINER_LINK_PTR next;
- }
- gcsCONTAINER_LINK;
- typedef struct _gcsCONTAINER_RECORD * gcsCONTAINER_RECORD_PTR;
- typedef struct _gcsCONTAINER_RECORD
- {
- gcsCONTAINER_RECORD_PTR prev;
- gcsCONTAINER_RECORD_PTR next;
- }
- gcsCONTAINER_RECORD;
- typedef struct _gcsCONTAINER * gcsCONTAINER_PTR;
- typedef struct _gcsCONTAINER
- {
- gctUINT containerSize;
- gctUINT recordSize;
- gctUINT recordCount;
- gcsCONTAINER_LINK_PTR containers;
- gcsCONTAINER_RECORD freeList;
- gcsCONTAINER_RECORD allocList;
- }
- gcsCONTAINER;
- gceSTATUS
- gcsCONTAINER_Construct(
- IN gcsCONTAINER_PTR Container,
- gctUINT RecordsPerContainer,
- gctUINT RecordSize
- );
- gceSTATUS
- gcsCONTAINER_Destroy(
- IN gcsCONTAINER_PTR Container
- );
- gceSTATUS
- gcsCONTAINER_AllocateRecord(
- IN gcsCONTAINER_PTR Container,
- OUT gctPOINTER * Record
- );
- gceSTATUS
- gcsCONTAINER_FreeRecord(
- IN gcsCONTAINER_PTR Container,
- IN gctPOINTER Record
- );
- gceSTATUS
- gcsCONTAINER_FreeAll(
- IN gcsCONTAINER_PTR Container
- );
- /******************************************************************************\
- ********************************* gcoHAL Object *********************************
- \******************************************************************************/
- /* Construct a new gcoHAL object. */
- gceSTATUS
- gcoHAL_ConstructEx(
- IN gctPOINTER Context,
- IN gcoOS Os,
- OUT gcoHAL * Hal
- );
- /* Destroy an gcoHAL object. */
- gceSTATUS
- gcoHAL_DestroyEx(
- IN gcoHAL Hal
- );
- /* Empty function for compatibility. */
- gceSTATUS
- gcoHAL_Construct(
- IN gctPOINTER Context,
- IN gcoOS Os,
- OUT gcoHAL * Hal
- );
- /* Empty function for compatibility. */
- gceSTATUS
- gcoHAL_Destroy(
- IN gcoHAL Hal
- );
- /* Get HAL options */
- gceSTATUS
- gcoHAL_GetOption(
- IN gcoHAL Hal,
- IN gceOPTION Option
- );
- gceSTATUS
- gcoHAL_FrameInfoOps(
- IN gcoHAL Hal,
- IN gceFRAMEINFO FrameInfo,
- IN gceFRAMEINFO_OP Op,
- IN OUT gctUINT * Val
- );
- gceSTATUS
- gcoHAL_GetHardware(
- IN gcoHAL Hal,
- OUT gcoHARDWARE* Hw
- );
- #if gcdENABLE_2D
- /* Get pointer to gco2D object. */
- gceSTATUS
- gcoHAL_Get2DEngine(
- IN gcoHAL Hal,
- OUT gco2D * Engine
- );
- #endif
- #if gcdENABLE_3D
- gceSTATUS
- gcoHAL_GetSpecialHintData(
- IN gcoHAL Hal,
- OUT gctINT * Hint
- );
- /*
- ** Deprecated(Don't use it), keep it here for external library(libgcu.so)
- */
- gceSTATUS
- gcoHAL_Get3DEngine(
- IN gcoHAL Hal,
- OUT gco3D * Engine
- );
- #endif /* gcdEANBLE_3D */
- gceSTATUS
- gcoHAL_GetProductName(
- IN gcoHAL Hal,
- OUT gctSTRING *ProductName
- );
- gceSTATUS
- gcoHAL_SetFscaleValue(
- IN gctUINT FscaleValue
- );
- gceSTATUS
- gcoHAL_GetFscaleValue(
- OUT gctUINT * FscaleValue,
- OUT gctUINT * MinFscaleValue,
- OUT gctUINT * MaxFscaleValue
- );
- gceSTATUS
- gcoHAL_SetBltNP2Texture(
- gctBOOL enable
- );
- gceSTATUS
- gcoHAL_NameVideoMemory(
- IN gctUINT32 Handle,
- OUT gctUINT32 * Name
- );
- gceSTATUS
- gcoHAL_ImportVideoMemory(
- IN gctUINT32 Name,
- OUT gctUINT32 * Handle
- );
- gceSTATUS
- gcoHAL_GetVideoMemoryFd(
- IN gctUINT32 Handle,
- OUT gctINT * Fd
- );
- /* Verify whether the specified feature is available in hardware. */
- gceSTATUS
- gcoHAL_IsFeatureAvailable(
- IN gcoHAL Hal,
- IN gceFEATURE Feature
- );
- gceSTATUS
- gcoHAL_IsSwwaNeeded(
- IN gcoHAL Hal,
- IN gceSWWA Swwa
- );
- gceSTATUS
- gcoHAL_IsFeatureAvailable1(
- IN gcoHAL Hal,
- IN gceFEATURE Feature
- );
- /* Query the identity of the hardware. */
- gceSTATUS
- gcoHAL_QueryChipIdentity(
- IN gcoHAL Hal,
- OUT gceCHIPMODEL* ChipModel,
- OUT gctUINT32* ChipRevision,
- OUT gctUINT32* ChipFeatures,
- OUT gctUINT32* ChipMinorFeatures
- );
- /* Query the minor features of the hardware. */
- gceSTATUS gcoHAL_QueryChipMinorFeatures(
- IN gcoHAL Hal,
- OUT gctUINT32* NumFeatures,
- OUT gctUINT32* ChipMinorFeatures
- );
- gctINT32
- gcoOS_EndRecordAllocation(void);
- void
- gcoOS_RecordAllocation(void);
- void
- gcoOS_AddRecordAllocation(gctSIZE_T Size);
- /* Query the amount of video memory. */
- gceSTATUS
- gcoHAL_QueryVideoMemory(
- IN gcoHAL Hal,
- OUT gctPHYS_ADDR * InternalAddress,
- OUT gctSIZE_T * InternalSize,
- OUT gctPHYS_ADDR * ExternalAddress,
- OUT gctSIZE_T * ExternalSize,
- OUT gctPHYS_ADDR * ContiguousAddress,
- OUT gctSIZE_T * ContiguousSize
- );
- /* Map video memory. */
- gceSTATUS
- gcoHAL_MapMemory(
- IN gcoHAL Hal,
- IN gctPHYS_ADDR Physical,
- IN gctSIZE_T NumberOfBytes,
- OUT gctPOINTER * Logical
- );
- /* Unmap video memory. */
- gceSTATUS
- gcoHAL_UnmapMemory(
- IN gcoHAL Hal,
- IN gctPHYS_ADDR Physical,
- IN gctSIZE_T NumberOfBytes,
- IN gctPOINTER Logical
- );
- /* Schedule an unmap of a buffer mapped through its physical address. */
- gceSTATUS
- gcoHAL_ScheduleUnmapMemory(
- IN gcoHAL Hal,
- IN gctPHYS_ADDR Physical,
- IN gctSIZE_T NumberOfBytes,
- IN gctPOINTER Logical
- );
- /* Allocate video memory. */
- gceSTATUS
- gcoOS_AllocateVideoMemory(
- IN gcoOS Os,
- IN gctBOOL InUserSpace,
- IN gctBOOL InCacheable,
- IN OUT gctSIZE_T * Bytes,
- OUT gctUINT32 * Physical,
- OUT gctPOINTER * Logical,
- OUT gctPOINTER * Handle
- );
- /* Free video memory. */
- gceSTATUS
- gcoOS_FreeVideoMemory(
- IN gcoOS Os,
- IN gctPOINTER Handle
- );
- /* Lock video memory. */
- gceSTATUS
- gcoOS_LockVideoMemory(
- IN gcoOS Os,
- IN gctPOINTER Handle,
- IN gctBOOL InUserSpace,
- IN gctBOOL InCacheable,
- OUT gctUINT32 * Physical,
- OUT gctPOINTER * Logical
- );
- /* Map user memory. */
- gceSTATUS
- gcoHAL_MapUserMemory(
- IN gctPOINTER Logical,
- IN gctUINT32 Physical,
- IN gctSIZE_T Size,
- OUT gctPOINTER * Info,
- OUT gctUINT32_PTR GPUAddress
- );
- /* Unmap user memory. */
- gceSTATUS
- gcoHAL_UnmapUserMemory(
- IN gctPOINTER Logical,
- IN gctSIZE_T Size,
- IN gctPOINTER Info,
- IN gctUINT32 GPUAddress
- );
- /* Schedule an unmap of a user buffer using event mechanism. */
- gceSTATUS
- gcoHAL_ScheduleUnmapUserMemory(
- IN gcoHAL Hal,
- IN gctPOINTER Info,
- IN gctSIZE_T Size,
- IN gctUINT32 Address,
- IN gctPOINTER Memory
- );
- /* Commit the current command buffer. */
- gceSTATUS
- gcoHAL_Commit(
- IN gcoHAL Hal,
- IN gctBOOL Stall
- );
- #if gcdENABLE_3D
- /* Sencd fence command. */
- gceSTATUS
- gcoHAL_SendFence(
- IN gcoHAL Hal
- );
- #endif /* gcdENABLE_3D */
- /* Query the tile capabilities. */
- gceSTATUS
- gcoHAL_QueryTiled(
- IN gcoHAL Hal,
- OUT gctINT32 * TileWidth2D,
- OUT gctINT32 * TileHeight2D,
- OUT gctINT32 * TileWidth3D,
- OUT gctINT32 * TileHeight3D
- );
- gceSTATUS
- gcoHAL_Compact(
- IN gcoHAL Hal
- );
- #if VIVANTE_PROFILER
- gceSTATUS
- gcoHAL_ProfileStart(
- IN gcoHAL Hal
- );
- gceSTATUS
- gcoHAL_ProfileEnd(
- IN gcoHAL Hal,
- IN gctCONST_STRING Title
- );
- #endif
- /* Power Management */
- gceSTATUS
- gcoHAL_SetPowerManagementState(
- IN gcoHAL Hal,
- IN gceCHIPPOWERSTATE State
- );
- gceSTATUS
- gcoHAL_QueryPowerManagementState(
- IN gcoHAL Hal,
- OUT gceCHIPPOWERSTATE *State
- );
- /* Set the filter type for filter blit. */
- gceSTATUS
- gcoHAL_SetFilterType(
- IN gcoHAL Hal,
- IN gceFILTER_TYPE FilterType
- );
- gceSTATUS
- gcoHAL_GetDump(
- IN gcoHAL Hal,
- OUT gcoDUMP * Dump
- );
- #if gcdENABLE_3D
- gceSTATUS
- gcoHAL_SetPatchID(
- IN gcoHAL Hal,
- IN gcePATCH_ID PatchID
- );
- /* Get Patch ID based on process name */
- gceSTATUS
- gcoHAL_GetPatchID(
- IN gcoHAL Hal,
- OUT gcePATCH_ID * PatchID
- );
- gceSTATUS
- gcoHAL_SetGlobalPatchID(
- IN gcoHAL Hal,
- IN gcePATCH_ID PatchID
- );
- #endif /* gcdENABLE_3D */
- /* Call the kernel HAL layer. */
- gceSTATUS
- gcoHAL_Call(
- IN gcoHAL Hal,
- IN OUT gcsHAL_INTERFACE_PTR Interface
- );
- /* Schedule an event. */
- gceSTATUS
- gcoHAL_ScheduleEvent(
- IN gcoHAL Hal,
- IN OUT gcsHAL_INTERFACE_PTR Interface
- );
- /* Destroy a surface. */
- gceSTATUS
- gcoHAL_DestroySurface(
- IN gcoHAL Hal,
- IN gcoSURF Surface
- );
- /* Request a start/stop timestamp. */
- gceSTATUS
- gcoHAL_SetTimer(
- IN gcoHAL Hal,
- IN gctUINT32 Index,
- IN gctBOOL Start
- );
- /* Get Time delta from a Timer in microseconds. */
- gceSTATUS
- gcoHAL_GetTimerTime(
- IN gcoHAL Hal,
- IN gctUINT32 Timer,
- OUT gctINT32_PTR TimeDelta
- );
- /* set timeout value. */
- gceSTATUS
- gcoHAL_SetTimeOut(
- IN gcoHAL Hal,
- IN gctUINT32 timeOut
- );
- gceSTATUS
- gcoHAL_SetHardwareType(
- IN gcoHAL Hal,
- IN gceHARDWARE_TYPE HardwardType
- );
- gceSTATUS
- gcoHAL_GetHardwareType(
- IN gcoHAL Hal,
- OUT gceHARDWARE_TYPE * HardwardType
- );
- gceSTATUS
- gcoHAL_QueryChipCount(
- IN gcoHAL Hal,
- OUT gctINT32 * Count
- );
- gceSTATUS
- gcoHAL_Query3DCoreCount(
- IN gcoHAL Hal,
- OUT gctUINT32 *Count
- );
- gceSTATUS
- gcoHAL_QuerySeparated2D(
- IN gcoHAL Hal
- );
- gceSTATUS
- gcoHAL_Is3DAvailable(
- IN gcoHAL Hal
- );
- /* Get pointer to gcoVG object. */
- gceSTATUS
- gcoHAL_GetVGEngine(
- IN gcoHAL Hal,
- OUT gcoVG * Engine
- );
- gceSTATUS
- gcoHAL_QueryChipLimits(
- IN gcoHAL Hal,
- IN gctINT32 Chip,
- IN gctINT32 Mask,
- OUT gcsHAL_LIMITS *Limits);
- gceSTATUS
- gcoHAL_QueryChipFeature(
- IN gcoHAL Hal,
- IN gctINT32 Chip,
- IN gctINT32 Mask,
- IN gceFEATURE Feature);
- /*----------------------------------------------------------------------------*/
- /*----- Shared Buffer --------------------------------------------------------*/
- /* Create shared buffer. */
- gceSTATUS
- gcoHAL_CreateShBuffer(
- IN gctUINT32 Size,
- OUT gctSHBUF * ShBuf
- );
- /* Destroy shared buffer. */
- gceSTATUS
- gcoHAL_DestroyShBuffer(
- IN gctSHBUF ShBuf
- );
- /* Map shared buffer to current process. */
- gceSTATUS
- gcoHAL_MapShBuffer(
- IN gctSHBUF ShBuf
- );
- /* Write user data to shared buffer. */
- gceSTATUS
- gcoHAL_WriteShBuffer(
- IN gctSHBUF ShBuf,
- IN gctCONST_POINTER Data,
- IN gctUINT32 ByteCount
- );
- /* Read user data from shared buffer. */
- gceSTATUS
- gcoHAL_ReadShBuffer(
- IN gctSHBUF ShBuf,
- IN gctPOINTER Data,
- IN gctUINT32 BytesCount,
- OUT gctUINT32 * BytesRead
- );
- /* Config power management to be enabled or disabled. */
- gceSTATUS
- gcoHAL_ConfigPowerManagement(
- IN gctBOOL Enable
- );
- gceSTATUS
- gcoHAL_AllocateVideoMemory(
- IN gctUINT Alignment,
- IN gceSURF_TYPE Type,
- IN gctUINT32 Flag,
- IN gcePOOL Pool,
- IN OUT gctSIZE_T * Bytes,
- OUT gctUINT32_PTR Node
- );
- gceSTATUS
- gcoHAL_LockVideoMemory(
- IN gctUINT32 Node,
- IN gctBOOL Cacheable,
- OUT gctUINT32 * Physical,
- OUT gctPOINTER * Logical
- );
- gceSTATUS
- gcoHAL_UnlockVideoMemory(
- IN gctUINT32 Node,
- IN gceSURF_TYPE Type
- );
- gceSTATUS
- gcoHAL_ReleaseVideoMemory(
- IN gctUINT32 Node
- );
- #if gcdENABLE_3D || gcdENABLE_VG
- /* Query the target capabilities. */
- gceSTATUS
- gcoHAL_QueryTargetCaps(
- IN gcoHAL Hal,
- OUT gctUINT * MaxWidth,
- OUT gctUINT * MaxHeight,
- OUT gctUINT * MultiTargetCount,
- OUT gctUINT * MaxSamples
- );
- #endif
- /******************************************************************************\
- ********************************** gcoOS Object *********************************
- \******************************************************************************/
- /* Lock PLS access */
- gceSTATUS
- gcoOS_LockPLS(
- void
- );
- /* Unlock PLS access */
- gceSTATUS
- gcoOS_UnLockPLS(
- void
- );
- /* Get PLS value for given key */
- gctPOINTER
- gcoOS_GetPLSValue(
- IN gcePLS_VALUE key
- );
- /* Set PLS value of a given key */
- void
- gcoOS_SetPLSValue(
- IN gcePLS_VALUE key,
- OUT gctPOINTER value
- );
- /* Get access to the thread local storage. */
- gceSTATUS
- gcoOS_GetTLS(
- OUT gcsTLS_PTR * TLS
- );
- /* Copy the TLS from a source thread. */
- gceSTATUS gcoOS_CopyTLS(IN gcsTLS_PTR Source);
- /* Destroy the objects associated with the current thread. */
- void
- gcoOS_FreeThreadData(
- void
- );
- /* Empty function for compatibility. */
- gceSTATUS
- gcoOS_Construct(
- IN gctPOINTER Context,
- OUT gcoOS * Os
- );
- /* Empty function for compatibility. */
- gceSTATUS
- gcoOS_Destroy(
- IN gcoOS Os
- );
- /* Get the base address for the physical memory. */
- gceSTATUS
- gcoOS_GetBaseAddress(
- IN gcoOS Os,
- OUT gctUINT32_PTR BaseAddress
- );
- /* Allocate memory from the heap. */
- gceSTATUS
- gcoOS_Allocate(
- IN gcoOS Os,
- IN gctSIZE_T Bytes,
- OUT gctPOINTER * Memory
- );
- /* Get allocated memory size. */
- gceSTATUS
- gcoOS_GetMemorySize(
- IN gcoOS Os,
- IN gctPOINTER Memory,
- OUT gctSIZE_T_PTR MemorySize
- );
- /* Free allocated memory. */
- gceSTATUS
- gcoOS_Free(
- IN gcoOS Os,
- IN gctPOINTER Memory
- );
- /* Allocate memory. */
- gceSTATUS
- gcoOS_AllocateSharedMemory(
- IN gcoOS Os,
- IN gctSIZE_T Bytes,
- OUT gctPOINTER * Memory
- );
- /* Free memory. */
- gceSTATUS
- gcoOS_FreeSharedMemory(
- IN gcoOS Os,
- IN gctPOINTER Memory
- );
- /* Allocate memory. */
- gceSTATUS
- gcoOS_AllocateMemory(
- IN gcoOS Os,
- IN gctSIZE_T Bytes,
- OUT gctPOINTER * Memory
- );
- /* Free memory. */
- gceSTATUS
- gcoOS_FreeMemory(
- IN gcoOS Os,
- IN gctPOINTER Memory
- );
- /* Allocate contiguous memory. */
- gceSTATUS
- gcoOS_AllocateContiguous(
- IN gcoOS Os,
- IN gctBOOL InUserSpace,
- IN OUT gctSIZE_T * Bytes,
- OUT gctPHYS_ADDR * Physical,
- OUT gctPOINTER * Logical
- );
- /* Free contiguous memory. */
- gceSTATUS
- gcoOS_FreeContiguous(
- IN gcoOS Os,
- IN gctPHYS_ADDR Physical,
- IN gctPOINTER Logical,
- IN gctSIZE_T Bytes
- );
- /* Map user memory. */
- gceSTATUS
- gcoOS_MapUserMemory(
- IN gcoOS Os,
- IN gctPOINTER Memory,
- IN gctSIZE_T Size,
- OUT gctPOINTER * Info,
- OUT gctUINT32_PTR Address
- );
- /* Map user memory. */
- gceSTATUS
- gcoOS_MapUserMemoryEx(
- IN gcoOS Os,
- IN gctPOINTER Memory,
- IN gctUINT32 Physical,
- IN gctSIZE_T Size,
- OUT gctPOINTER * Info,
- OUT gctUINT32_PTR Address
- );
- /* Unmap user memory. */
- gceSTATUS
- gcoOS_UnmapUserMemory(
- IN gcoOS Os,
- IN gctPOINTER Memory,
- IN gctSIZE_T Size,
- IN gctPOINTER Info,
- IN gctUINT32 Address
- );
- /* Device I/O Control call to the kernel HAL layer. */
- gceSTATUS
- gcoOS_DeviceControl(
- IN gcoOS Os,
- IN gctUINT32 IoControlCode,
- IN gctPOINTER InputBuffer,
- IN gctSIZE_T InputBufferSize,
- IN gctPOINTER OutputBuffer,
- IN gctSIZE_T OutputBufferSize
- );
- /* Allocate non paged memory. */
- gceSTATUS
- gcoOS_AllocateNonPagedMemory(
- IN gcoOS Os,
- IN gctBOOL InUserSpace,
- IN OUT gctSIZE_T * Bytes,
- OUT gctPHYS_ADDR * Physical,
- OUT gctPOINTER * Logical
- );
- /* Free non paged memory. */
- gceSTATUS
- gcoOS_FreeNonPagedMemory(
- IN gcoOS Os,
- IN gctSIZE_T Bytes,
- IN gctPHYS_ADDR Physical,
- IN gctPOINTER Logical
- );
- #define gcmOS_SAFE_FREE(os, mem) \
- gcoOS_Free(os, mem); \
- mem = gcvNULL
- #define gcmOS_SAFE_FREE_SHARED_MEMORY(os, mem) \
- gcoOS_FreeSharedMemory(os, mem); \
- mem = gcvNULL
- #define gcmkOS_SAFE_FREE(os, mem) \
- gckOS_Free(os, mem); \
- mem = gcvNULL
- typedef enum _gceFILE_MODE
- {
- gcvFILE_CREATE = 0,
- gcvFILE_APPEND,
- gcvFILE_READ,
- gcvFILE_CREATETEXT,
- gcvFILE_APPENDTEXT,
- gcvFILE_READTEXT,
- }
- gceFILE_MODE;
- /* Open a file. */
- gceSTATUS
- gcoOS_Open(
- IN gcoOS Os,
- IN gctCONST_STRING FileName,
- IN gceFILE_MODE Mode,
- OUT gctFILE * File
- );
- /* Close a file. */
- gceSTATUS
- gcoOS_Close(
- IN gcoOS Os,
- IN gctFILE File
- );
- /* Read data from a file. */
- gceSTATUS
- gcoOS_Read(
- IN gcoOS Os,
- IN gctFILE File,
- IN gctSIZE_T ByteCount,
- IN gctPOINTER Data,
- OUT gctSIZE_T * ByteRead
- );
- /* Write data to a file. */
- gceSTATUS
- gcoOS_Write(
- IN gcoOS Os,
- IN gctFILE File,
- IN gctSIZE_T ByteCount,
- IN gctCONST_POINTER Data
- );
- /* Flush data to a file. */
- gceSTATUS
- gcoOS_Flush(
- IN gcoOS Os,
- IN gctFILE File
- );
- /* Close a file descriptor. */
- gceSTATUS
- gcoOS_CloseFD(
- IN gcoOS Os,
- IN gctINT FD
- );
- /* Dup file descriptor to another. */
- gceSTATUS
- gcoOS_DupFD(
- IN gcoOS Os,
- IN gctINT FD,
- OUT gctINT * FD2
- );
- /* Create an endpoint for communication. */
- gceSTATUS
- gcoOS_Socket(
- IN gcoOS Os,
- IN gctINT Domain,
- IN gctINT Type,
- IN gctINT Protocol,
- OUT gctINT *SockFd
- );
- /* Close a socket. */
- gceSTATUS
- gcoOS_CloseSocket(
- IN gcoOS Os,
- IN gctINT SockFd
- );
- /* Initiate a connection on a socket. */
- gceSTATUS
- gcoOS_Connect(
- IN gcoOS Os,
- IN gctINT SockFd,
- IN gctCONST_POINTER HostName,
- IN gctUINT Port);
- /* Shut down part of connection on a socket. */
- gceSTATUS
- gcoOS_Shutdown(
- IN gcoOS Os,
- IN gctINT SockFd,
- IN gctINT How
- );
- /* Send a message on a socket. */
- gceSTATUS
- gcoOS_Send(
- IN gcoOS Os,
- IN gctINT SockFd,
- IN gctSIZE_T ByteCount,
- IN gctCONST_POINTER Data,
- IN gctINT Flags
- );
- /* Initiate a connection on a socket. */
- gceSTATUS
- gcoOS_WaitForSend(
- IN gcoOS Os,
- IN gctINT SockFd,
- IN gctINT Seconds,
- IN gctINT MicroSeconds);
- /* Get environment variable value. */
- gceSTATUS
- gcoOS_GetEnv(
- IN gcoOS Os,
- IN gctCONST_STRING VarName,
- OUT gctSTRING * Value
- );
- /* Set environment variable value. */
- gceSTATUS
- gcoOS_SetEnv(
- IN gcoOS Os,
- IN gctCONST_STRING VarName,
- IN gctSTRING Value
- );
- /* Get current working directory. */
- gceSTATUS
- gcoOS_GetCwd(
- IN gcoOS Os,
- IN gctINT SizeInBytes,
- OUT gctSTRING Buffer
- );
- /* Get file status info. */
- gceSTATUS
- gcoOS_Stat(
- IN gcoOS Os,
- IN gctCONST_STRING FileName,
- OUT gctPOINTER Buffer
- );
- typedef enum _gceFILE_WHENCE
- {
- gcvFILE_SEEK_SET,
- gcvFILE_SEEK_CUR,
- gcvFILE_SEEK_END
- }
- gceFILE_WHENCE;
- /* Set the current position of a file. */
- gceSTATUS
- gcoOS_Seek(
- IN gcoOS Os,
- IN gctFILE File,
- IN gctUINT32 Offset,
- IN gceFILE_WHENCE Whence
- );
- /* Set the current position of a file. */
- gceSTATUS
- gcoOS_SetPos(
- IN gcoOS Os,
- IN gctFILE File,
- IN gctUINT32 Position
- );
- /* Get the current position of a file. */
- gceSTATUS
- gcoOS_GetPos(
- IN gcoOS Os,
- IN gctFILE File,
- OUT gctUINT32 * Position
- );
- /* Same as strstr. */
- gceSTATUS
- gcoOS_StrStr(
- IN gctCONST_STRING String,
- IN gctCONST_STRING SubString,
- OUT gctSTRING * Output
- );
- /* Find the last occurance of a character inside a string. */
- gceSTATUS
- gcoOS_StrFindReverse(
- IN gctCONST_STRING String,
- IN gctINT8 Character,
- OUT gctSTRING * Output
- );
- gceSTATUS
- gcoOS_StrDup(
- IN gcoOS Os,
- IN gctCONST_STRING String,
- OUT gctSTRING * Target
- );
- /* Copy a string. */
- gceSTATUS
- gcoOS_StrCopySafe(
- IN gctSTRING Destination,
- IN gctSIZE_T DestinationSize,
- IN gctCONST_STRING Source
- );
- /* Append a string. */
- gceSTATUS
- gcoOS_StrCatSafe(
- IN gctSTRING Destination,
- IN gctSIZE_T DestinationSize,
- IN gctCONST_STRING Source
- );
- /* Compare two strings. */
- gceSTATUS
- gcoOS_StrCmp(
- IN gctCONST_STRING String1,
- IN gctCONST_STRING String2
- );
- /* Compare characters of two strings. */
- gceSTATUS
- gcoOS_StrNCmp(
- IN gctCONST_STRING String1,
- IN gctCONST_STRING String2,
- IN gctSIZE_T Count
- );
- /* Convert string to float. */
- gceSTATUS
- gcoOS_StrToFloat(
- IN gctCONST_STRING String,
- OUT gctFLOAT * Float
- );
- /* Convert hex string to integer. */
- gceSTATUS gcoOS_HexStrToInt(
- IN gctCONST_STRING String,
- OUT gctINT * Int
- );
- /* Convert hex string to float. */
- gceSTATUS
- gcoOS_HexStrToFloat(
- IN gctCONST_STRING String,
- OUT gctFLOAT * Float
- );
- /* Convert string to integer. */
- gceSTATUS
- gcoOS_StrToInt(
- IN gctCONST_STRING String,
- OUT gctINT * Int
- );
- gceSTATUS
- gcoOS_MemCmp(
- IN gctCONST_POINTER Memory1,
- IN gctCONST_POINTER Memory2,
- IN gctSIZE_T Bytes
- );
- gceSTATUS
- gcoOS_PrintStrSafe(
- OUT gctSTRING String,
- IN gctSIZE_T StringSize,
- IN OUT gctUINT * Offset,
- IN gctCONST_STRING Format,
- ...
- );
- gceSTATUS
- gcoOS_LoadLibrary(
- IN gcoOS Os,
- IN gctCONST_STRING Library,
- OUT gctHANDLE * Handle
- );
- gceSTATUS
- gcoOS_FreeLibrary(
- IN gcoOS Os,
- IN gctHANDLE Handle
- );
- gceSTATUS
- gcoOS_GetProcAddress(
- IN gcoOS Os,
- IN gctHANDLE Handle,
- IN gctCONST_STRING Name,
- OUT gctPOINTER * Function
- );
- gceSTATUS
- gcoOS_Compact(
- IN gcoOS Os
- );
- gceSTATUS
- gcoOS_AddSignalHandler (
- IN gceSignalHandlerType SignalHandlerType
- );
- #if VIVANTE_PROFILER
- gceSTATUS
- gcoOS_ProfileStart(
- IN gcoOS Os
- );
- gceSTATUS
- gcoOS_ProfileEnd(
- IN gcoOS Os,
- IN gctCONST_STRING Title
- );
- gceSTATUS
- gcoOS_SetProfileSetting(
- IN gcoOS Os,
- IN gctBOOL Enable,
- IN gctCONST_STRING FileName
- );
- #endif
- /* Query the video memory. */
- gceSTATUS
- gcoOS_QueryVideoMemory(
- IN gcoOS Os,
- OUT gctPHYS_ADDR * InternalAddress,
- OUT gctSIZE_T * InternalSize,
- OUT gctPHYS_ADDR * ExternalAddress,
- OUT gctSIZE_T * ExternalSize,
- OUT gctPHYS_ADDR * ContiguousAddress,
- OUT gctSIZE_T * ContiguousSize
- );
- /* Detect if the process is the executable specified. */
- gceSTATUS
- gcoOS_DetectProcessByNamePid(
- IN gctCONST_STRING Name,
- IN gctHANDLE Pid
- );
- /* Detect if the current process is the executable specified. */
- gceSTATUS
- gcoOS_DetectProcessByName(
- IN gctCONST_STRING Name
- );
- gceSTATUS
- gcoOS_DetectProcessByEncryptedName(
- IN gctCONST_STRING Name
- );
- #if defined(ANDROID)
- gceSTATUS
- gcoOS_DetectProgrameByEncryptedSymbols(
- IN gcoOS_SymbolsList Symbols
- );
- #endif
- /*----------------------------------------------------------------------------*/
- /*----- Atoms ----------------------------------------------------------------*/
- /* Construct an atom. */
- gceSTATUS
- gcoOS_AtomConstruct(
- IN gcoOS Os,
- OUT gcsATOM_PTR * Atom
- );
- /* Destroy an atom. */
- gceSTATUS
- gcoOS_AtomDestroy(
- IN gcoOS Os,
- IN gcsATOM_PTR Atom
- );
- /* Get the 32-bit value protected by an atom. */
- gceSTATUS
- gcoOS_AtomGet(
- IN gcoOS Os,
- IN gcsATOM_PTR Atom,
- OUT gctINT32_PTR Value
- );
- /* Set the 32-bit value protected by an atom. */
- gceSTATUS
- gcoOS_AtomSet(
- IN gcoOS Os,
- IN gcsATOM_PTR Atom,
- IN gctINT32 Value
- );
- /* Increment an atom. */
- gceSTATUS
- gcoOS_AtomIncrement(
- IN gcoOS Os,
- IN gcsATOM_PTR Atom,
- OUT gctINT32_PTR OldValue
- );
- /* Decrement an atom. */
- gceSTATUS
- gcoOS_AtomDecrement(
- IN gcoOS Os,
- IN gcsATOM_PTR Atom,
- OUT gctINT32_PTR OldValue
- );
- gctHANDLE
- gcoOS_GetCurrentProcessID(
- void
- );
- gctHANDLE
- gcoOS_GetCurrentThreadID(
- void
- );
- /*----------------------------------------------------------------------------*/
- /*----- Time -----------------------------------------------------------------*/
- /* Get the number of milliseconds since the system started. */
- gctUINT32
- gcoOS_GetTicks(
- void
- );
- /* Get time in microseconds. */
- gceSTATUS
- gcoOS_GetTime(
- gctUINT64_PTR Time
- );
- /* Get CPU usage in microseconds. */
- gceSTATUS
- gcoOS_GetCPUTime(
- gctUINT64_PTR CPUTime
- );
- /* Get memory usage. */
- gceSTATUS
- gcoOS_GetMemoryUsage(
- gctUINT32_PTR MaxRSS,
- gctUINT32_PTR IxRSS,
- gctUINT32_PTR IdRSS,
- gctUINT32_PTR IsRSS
- );
- /* Delay a number of microseconds. */
- gceSTATUS
- gcoOS_Delay(
- IN gcoOS Os,
- IN gctUINT32 Delay
- );
- /*----------------------------------------------------------------------------*/
- /*----- Threads --------------------------------------------------------------*/
- #ifdef _WIN32
- /* Cannot include windows.h here becuase "near" and "far"
- * which are used in gcsDEPTH_INFO, are defined to nothing in WinDef.h.
- * So, use the real value of DWORD and WINAPI, instead.
- * DWORD is unsigned long, and WINAPI is __stdcall.
- * If these two are change in WinDef.h, the following two typdefs
- * need to be changed, too.
- */
- typedef unsigned long gctTHREAD_RETURN;
- typedef unsigned long (__stdcall * gcTHREAD_ROUTINE)(void * Argument);
- #else
- typedef void * gctTHREAD_RETURN;
- typedef void * (* gcTHREAD_ROUTINE)(void *);
- #endif
- /* Create a new thread. */
- gceSTATUS
- gcoOS_CreateThread(
- IN gcoOS Os,
- IN gcTHREAD_ROUTINE Worker,
- IN gctPOINTER Argument,
- OUT gctPOINTER * Thread
- );
- /* Close a thread. */
- gceSTATUS
- gcoOS_CloseThread(
- IN gcoOS Os,
- IN gctPOINTER Thread
- );
- /*----------------------------------------------------------------------------*/
- /*----- Mutexes --------------------------------------------------------------*/
- /* Create a new mutex. */
- gceSTATUS
- gcoOS_CreateMutex(
- IN gcoOS Os,
- OUT gctPOINTER * Mutex
- );
- /* Delete a mutex. */
- gceSTATUS
- gcoOS_DeleteMutex(
- IN gcoOS Os,
- IN gctPOINTER Mutex
- );
- /* Acquire a mutex. */
- gceSTATUS
- gcoOS_AcquireMutex(
- IN gcoOS Os,
- IN gctPOINTER Mutex,
- IN gctUINT32 Timeout
- );
- /* Release a mutex. */
- gceSTATUS
- gcoOS_ReleaseMutex(
- IN gcoOS Os,
- IN gctPOINTER Mutex
- );
- /*----------------------------------------------------------------------------*/
- /*----- Signals --------------------------------------------------------------*/
- /* Create a signal. */
- gceSTATUS
- gcoOS_CreateSignal(
- IN gcoOS Os,
- IN gctBOOL ManualReset,
- OUT gctSIGNAL * Signal
- );
- /* Destroy a signal. */
- gceSTATUS
- gcoOS_DestroySignal(
- IN gcoOS Os,
- IN gctSIGNAL Signal
- );
- /* Signal a signal. */
- gceSTATUS
- gcoOS_Signal(
- IN gcoOS Os,
- IN gctSIGNAL Signal,
- IN gctBOOL State
- );
- /* Wait for a signal. */
- gceSTATUS
- gcoOS_WaitSignal(
- IN gcoOS Os,
- IN gctSIGNAL Signal,
- IN gctUINT32 Wait
- );
- /* Map a signal from another process */
- gceSTATUS
- gcoOS_MapSignal(
- IN gctSIGNAL RemoteSignal,
- OUT gctSIGNAL * LocalSignal
- );
- /* Unmap a signal mapped from another process */
- gceSTATUS
- gcoOS_UnmapSignal(
- IN gctSIGNAL Signal
- );
- /*----------------------------------------------------------------------------*/
- /*----- Android Native Fence -------------------------------------------------*/
- /* Create sync point. */
- gceSTATUS
- gcoOS_CreateSyncPoint(
- IN gcoOS Os,
- OUT gctSYNC_POINT * SyncPoint
- );
- /* Destroy sync point. */
- gceSTATUS
- gcoOS_DestroySyncPoint(
- IN gcoOS Os,
- IN gctSYNC_POINT SyncPoint
- );
- /* Create native fence. */
- gceSTATUS
- gcoOS_CreateNativeFence(
- IN gcoOS Os,
- IN gctSYNC_POINT SyncPoint,
- OUT gctINT * FenceFD
- );
- /* Wait on native fence. */
- gceSTATUS
- gcoOS_WaitNativeFence(
- IN gcoOS Os,
- IN gctINT FenceFD,
- IN gctUINT32 Timeout
- );
- /*----------------------------------------------------------------------------*/
- /*----- Memory Access and Cache ----------------------------------------------*/
- /* Write a register. */
- gceSTATUS
- gcoOS_WriteRegister(
- IN gcoOS Os,
- IN gctUINT32 Address,
- IN gctUINT32 Data
- );
- /* Read a register. */
- gceSTATUS
- gcoOS_ReadRegister(
- IN gcoOS Os,
- IN gctUINT32 Address,
- OUT gctUINT32 * Data
- );
- gceSTATUS
- gcoOS_CacheClean(
- IN gcoOS Os,
- IN gctUINT32 Node,
- IN gctPOINTER Logical,
- IN gctSIZE_T Bytes
- );
- gceSTATUS
- gcoOS_CacheFlush(
- IN gcoOS Os,
- IN gctUINT32 Node,
- IN gctPOINTER Logical,
- IN gctSIZE_T Bytes
- );
- gceSTATUS
- gcoOS_CacheInvalidate(
- IN gcoOS Os,
- IN gctUINT32 Node,
- IN gctPOINTER Logical,
- IN gctSIZE_T Bytes
- );
- gceSTATUS
- gcoOS_MemoryBarrier(
- IN gcoOS Os,
- IN gctPOINTER Logical
- );
- gceSTATUS
- gcoOS_CPUPhysicalToGPUPhysical(
- IN gctUINT32 CPUPhysical,
- OUT gctUINT32_PTR GPUPhysical
- );
- /*----------------------------------------------------------------------------*/
- /*----- Profile --------------------------------------------------------------*/
- gceSTATUS
- gckOS_GetProfileTick(
- OUT gctUINT64_PTR Tick
- );
- gceSTATUS
- gckOS_QueryProfileTickRate(
- OUT gctUINT64_PTR TickRate
- );
- gctUINT32
- gckOS_ProfileToMS(
- IN gctUINT64 Ticks
- );
- gceSTATUS
- gcoOS_GetProfileTick(
- OUT gctUINT64_PTR Tick
- );
- gceSTATUS
- gcoOS_QueryProfileTickRate(
- OUT gctUINT64_PTR TickRate
- );
- #define _gcmPROFILE_INIT(prefix, freq, start) \
- do { \
- prefix ## OS_QueryProfileTickRate(&(freq)); \
- prefix ## OS_GetProfileTick(&(start)); \
- } while (gcvFALSE)
- #define _gcmPROFILE_QUERY(prefix, start, ticks) \
- do { \
- prefix ## OS_GetProfileTick(&(ticks)); \
- (ticks) = ((ticks) > (start)) ? ((ticks) - (start)) \
- : (~0ull - (start) + (ticks) + 1); \
- } while (gcvFALSE)
- #if gcdENABLE_PROFILING
- # define gcmkPROFILE_INIT(freq, start) _gcmPROFILE_INIT(gck, freq, start)
- # define gcmkPROFILE_QUERY(start, ticks) _gcmPROFILE_QUERY(gck, start, ticks)
- # define gcmPROFILE_INIT(freq, start) _gcmPROFILE_INIT(gco, freq, start)
- # define gcmPROFILE_QUERY(start, ticks) _gcmPROFILE_QUERY(gco, start, ticks)
- # define gcmPROFILE_ONLY(x) x
- # define gcmPROFILE_ELSE(x) do { } while (gcvFALSE)
- # define gcmPROFILE_DECLARE_ONLY(x) x
- # define gcmPROFILE_DECLARE_ELSE(x) typedef x
- #else
- # define gcmkPROFILE_INIT(start, freq) do { } while (gcvFALSE)
- # define gcmkPROFILE_QUERY(start, ticks) do { } while (gcvFALSE)
- # define gcmPROFILE_INIT(start, freq) do { } while (gcvFALSE)
- # define gcmPROFILE_QUERY(start, ticks) do { } while (gcvFALSE)
- # define gcmPROFILE_ONLY(x) do { } while (gcvFALSE)
- # define gcmPROFILE_ELSE(x) x
- # define gcmPROFILE_DECLARE_ONLY(x) do { } while (gcvFALSE)
- # define gcmPROFILE_DECLARE_ELSE(x) x
- #endif
- /*******************************************************************************
- ** gcoMATH object
- */
- #define gcdPI 3.14159265358979323846f
- /* Kernel. */
- gctINT
- gckMATH_ModuloInt(
- IN gctINT X,
- IN gctINT Y
- );
- /* User. */
- gctUINT32
- gcoMATH_Log2in5dot5(
- IN gctINT X
- );
- gctFLOAT
- gcoMATH_UIntAsFloat(
- IN gctUINT32 X
- );
- gctUINT32
- gcoMATH_FloatAsUInt(
- IN gctFLOAT X
- );
- gctBOOL
- gcoMATH_CompareEqualF(
- IN gctFLOAT X,
- IN gctFLOAT Y
- );
- gctUINT16
- gcoMATH_UInt8AsFloat16(
- IN gctUINT8 X
- );
- gctUINT32
- gcoMATH_Float16ToFloat(
- IN gctUINT16 In
- );
- gctUINT16
- gcoMATH_FloatToFloat16(
- IN gctUINT32 In
- );
- gctUINT32
- gcoMATH_Float11ToFloat(
- IN gctUINT32 In
- );
- gctUINT16
- gcoMATH_FloatToFloat11(
- IN gctUINT32 In
- );
- gctUINT32
- gcoMATH_Float10ToFloat(
- IN gctUINT32 In
- );
- gctUINT16
- gcoMATH_FloatToFloat10(
- IN gctUINT32 In
- );
- gctUINT32
- gcoMATH_Float14ToFloat(
- IN gctUINT16 In
- );
- /******************************************************************************\
- **************************** Coordinate Structures *****************************
- \******************************************************************************/
- typedef struct _gcsPOINT
- {
- gctINT32 x;
- gctINT32 y;
- }
- gcsPOINT;
- typedef struct _gcsSIZE
- {
- gctINT32 width;
- gctINT32 height;
- }
- gcsSIZE;
- typedef struct _gcsRECT
- {
- gctINT32 left;
- gctINT32 top;
- gctINT32 right;
- gctINT32 bottom;
- }
- gcsRECT;
- typedef union _gcsPIXEL
- {
- struct
- {
- gctFLOAT r, g, b, a;
- gctFLOAT d, s;
- } pf;
- struct
- {
- gctINT32 r, g, b, a;
- gctINT32 d, s;
- } pi;
- struct
- {
- gctUINT32 r, g, b, a;
- gctUINT32 d, s;
- } pui;
- } gcsPIXEL;
- /******************************************************************************\
- ********************************* gcoSURF Object ********************************
- \******************************************************************************/
- /*----------------------------------------------------------------------------*/
- /*------------------------------- gcoSURF Common ------------------------------*/
- /* Color format classes. */
- typedef enum _gceFORMAT_CLASS
- {
- gcvFORMAT_CLASS_RGBA = 4500,
- gcvFORMAT_CLASS_YUV,
- gcvFORMAT_CLASS_INDEX,
- gcvFORMAT_CLASS_LUMINANCE,
- gcvFORMAT_CLASS_BUMP,
- gcvFORMAT_CLASS_DEPTH,
- gcvFORMAT_CLASS_ASTC,
- gcvFORMAT_CLASS_OTHER
- }
- gceFORMAT_CLASS;
- /* Color format data type */
- typedef enum _gceFORMAT_DATATYPE
- {
- gcvFORMAT_DATATYPE_UNSIGNED_NORMALIZED,
- gcvFORMAT_DATATYPE_SIGNED_NORMALIZED,
- gcvFORMAT_DATATYPE_UNSIGNED_INTEGER,
- gcvFORMAT_DATATYPE_SIGNED_INTEGER,
- gcvFORMAT_DATATYPE_FLOAT16,
- gcvFORMAT_DATATYPE_FLOAT32,
- gcvFORMAT_DATATYPE_FLOAT_E5B9G9R9,
- gcvFORMAT_DATATYPE_FLOAT_B10G11R11F,
- gcvFORMAT_DATATYPE_INDEX,
- gcvFORMAT_DATATYPE_SRGB,
- gcvFORMAT_DATATYPE_FLOAT32_UINT,
- }
- gceFORMAT_DATATYPE;
- /* Special enums for width field in gcsFORMAT_COMPONENT. */
- typedef enum _gceCOMPONENT_CONTROL
- {
- gcvCOMPONENT_NOTPRESENT = 0x00,
- gcvCOMPONENT_DONTCARE = 0x80,
- gcvCOMPONENT_WIDTHMASK = 0x7F,
- gcvCOMPONENT_ODD = 0x80
- }
- gceCOMPONENT_CONTROL;
- /* Color format component parameters. */
- typedef struct _gcsFORMAT_COMPONENT
- {
- gctUINT8 start;
- gctUINT8 width;
- }
- gcsFORMAT_COMPONENT;
- /* RGBA color format class. */
- typedef struct _gcsFORMAT_CLASS_TYPE_RGBA
- {
- gcsFORMAT_COMPONENT alpha;
- gcsFORMAT_COMPONENT red;
- gcsFORMAT_COMPONENT green;
- gcsFORMAT_COMPONENT blue;
- }
- gcsFORMAT_CLASS_TYPE_RGBA;
- /* YUV color format class. */
- typedef struct _gcsFORMAT_CLASS_TYPE_YUV
- {
- gcsFORMAT_COMPONENT y;
- gcsFORMAT_COMPONENT u;
- gcsFORMAT_COMPONENT v;
- }
- gcsFORMAT_CLASS_TYPE_YUV;
- /* Index color format class. */
- typedef struct _gcsFORMAT_CLASS_TYPE_INDEX
- {
- gcsFORMAT_COMPONENT value;
- }
- gcsFORMAT_CLASS_TYPE_INDEX;
- /* Luminance color format class. */
- typedef struct _gcsFORMAT_CLASS_TYPE_LUMINANCE
- {
- gcsFORMAT_COMPONENT alpha;
- gcsFORMAT_COMPONENT value;
- }
- gcsFORMAT_CLASS_TYPE_LUMINANCE;
- /* Bump map color format class. */
- typedef struct _gcsFORMAT_CLASS_TYPE_BUMP
- {
- gcsFORMAT_COMPONENT alpha;
- gcsFORMAT_COMPONENT l;
- gcsFORMAT_COMPONENT v;
- gcsFORMAT_COMPONENT u;
- gcsFORMAT_COMPONENT q;
- gcsFORMAT_COMPONENT w;
- }
- gcsFORMAT_CLASS_TYPE_BUMP;
- /* Depth and stencil format class. */
- typedef struct _gcsFORMAT_CLASS_TYPE_DEPTH
- {
- gcsFORMAT_COMPONENT depth;
- gcsFORMAT_COMPONENT stencil;
- }
- gcsFORMAT_CLASS_TYPE_DEPTH;
- typedef union _gcuPIXEL_FORMAT_CLASS
- {
- gcsFORMAT_CLASS_TYPE_BUMP bump;
- gcsFORMAT_CLASS_TYPE_RGBA rgba;
- gcsFORMAT_CLASS_TYPE_YUV yuv;
- gcsFORMAT_CLASS_TYPE_LUMINANCE lum;
- gcsFORMAT_CLASS_TYPE_INDEX index;
- gcsFORMAT_CLASS_TYPE_DEPTH depth;
- }
- gcuPIXEL_FORMAT_CLASS;
- /* Format parameters. */
- typedef struct _gcsSURF_FORMAT_INFO
- {
- /* Name of the format */
- gctCONST_STRING formatName;
- /* Format code and class. */
- gceSURF_FORMAT format;
- gceFORMAT_CLASS fmtClass;
- /* Format data type */
- gceFORMAT_DATATYPE fmtDataType;
- /* The size of one pixel in bits. */
- gctUINT8 bitsPerPixel;
- /* Pixel block dimensions. */
- gctUINT blockWidth;
- gctUINT blockHeight;
- /* Pixel block size in bits. */
- gctUINT blockSize;
- /* Some formats are larger than what the GPU can support. */
- /* These formats are read in the number of layers specified. */
- gctUINT8 layers;
- /* The format is faked and software will interpret it differently
- ** with HW. Most of them can't be blendable(PE) or filterable(TX).
- */
- gctBOOL fakedFormat;
- /* Some formats have two neighbour pixels interleaved together. */
- /* To describe such format, set the flag to 1 and add another */
- /* like this one describing the odd pixel format. */
- gctBOOL interleaved;
- /* sRGB format. */
- gctBOOL sRGB;
- /* Format components. */
- gcuPIXEL_FORMAT_CLASS u;
- /* Format components. */
- gcuPIXEL_FORMAT_CLASS uOdd;
- /* Render format. */
- gceSURF_FORMAT closestRenderFormat;
- /*gctCLOSEST_FORMAT dynamicClosestRenderFormat;*/
- gctUINT renderFormat;
- const gceTEXTURE_SWIZZLE * pixelSwizzle;
- /* Texture format. */
- gceSURF_FORMAT closestTXFormat;
- gctUINT txFormat;
- const gceTEXTURE_SWIZZLE * txSwizzle;
- gctBOOL txIntFilter;
- }
- gcsSURF_FORMAT_INFO;
- /* Frame buffer information. */
- typedef struct _gcsSURF_FRAMEBUFFER
- {
- gctPOINTER logical;
- gctUINT width, height;
- gctINT stride;
- gceSURF_FORMAT format;
- }
- gcsSURF_FRAMEBUFFER;
- /* Generic pixel component descriptors. */
- extern gcsFORMAT_COMPONENT gcvPIXEL_COMP_XXX8;
- extern gcsFORMAT_COMPONENT gcvPIXEL_COMP_XX8X;
- extern gcsFORMAT_COMPONENT gcvPIXEL_COMP_X8XX;
- extern gcsFORMAT_COMPONENT gcvPIXEL_COMP_8XXX;
- typedef enum _gceORIENTATION
- {
- gcvORIENTATION_TOP_BOTTOM,
- gcvORIENTATION_BOTTOM_TOP,
- }
- gceORIENTATION;
- /* Construct a new gcoSURF object. */
- gceSTATUS
- gcoSURF_Construct(
- IN gcoHAL Hal,
- IN gctUINT Width,
- IN gctUINT Height,
- IN gctUINT Depth,
- IN gceSURF_TYPE Type,
- IN gceSURF_FORMAT Format,
- IN gcePOOL Pool,
- OUT gcoSURF * Surface
- );
- /* Destroy an gcoSURF object. */
- gceSTATUS
- gcoSURF_Destroy(
- IN gcoSURF Surface
- );
- /* Map user-allocated surface. */
- gceSTATUS
- gcoSURF_MapUserSurface(
- IN gcoSURF Surface,
- IN gctUINT Alignment,
- IN gctPOINTER Logical,
- IN gctUINT32 Physical
- );
- /* Wrapp surface with known logical/GPU address */
- gceSTATUS
- gcoSURF_WrapSurface(
- IN gcoSURF Surface,
- IN gctUINT Alignment,
- IN gctPOINTER Logical,
- IN gctUINT32 Physical
- );
- /* Query vid mem node info. */
- gceSTATUS
- gcoSURF_QueryVidMemNode(
- IN gcoSURF Surface,
- OUT gctUINT32 * Node,
- OUT gcePOOL * Pool,
- OUT gctSIZE_T_PTR Bytes
- );
- /* Set the color type of the surface. */
- gceSTATUS
- gcoSURF_SetColorType(
- IN gcoSURF Surface,
- IN gceSURF_COLOR_TYPE ColorType
- );
- /* Get the color type of the surface. */
- gceSTATUS
- gcoSURF_GetColorType(
- IN gcoSURF Surface,
- OUT gceSURF_COLOR_TYPE *ColorType
- );
- /* Set the color space of the surface. */
- gceSTATUS
- gcoSURF_SetColorSpace(
- IN gcoSURF Surface,
- IN gceSURF_COLOR_SPACE ColorSpace
- );
- /* Get the color space of the surface. */
- gceSTATUS
- gcoSURF_GetColorSpace(
- IN gcoSURF Surface,
- OUT gceSURF_COLOR_SPACE *ColorSpace
- );
- /* Set the surface ration angle. */
- gceSTATUS
- gcoSURF_SetRotation(
- IN gcoSURF Surface,
- IN gceSURF_ROTATION Rotation
- );
- gceSTATUS
- gcoSURF_IsValid(
- IN gcoSURF Surface
- );
- #if gcdENABLE_3D
- /* Verify and return the state of the tile status mechanism. */
- gceSTATUS
- gcoSURF_IsTileStatusSupported(
- IN gcoSURF Surface
- );
- /* Verify if surface has tile status enabled. */
- gceSTATUS
- gcoSURF_IsTileStatusEnabled(
- IN gcoSURF Surface
- );
- /* Verify if surface is compressed. */
- gceSTATUS
- gcoSURF_IsCompressed(
- IN gcoSURF Surface
- );
- /* Enable tile status for the specified surface on zero slot. */
- gceSTATUS
- gcoSURF_EnableTileStatus(
- IN gcoSURF Surface
- );
- /* Enable tile status for the specified surface on specified slot. */
- gceSTATUS
- gcoSURF_EnableTileStatusEx(
- IN gcoSURF Surface,
- IN gctUINT RtIndex
- );
- /* Disable tile status for the specified surface. */
- gceSTATUS
- gcoSURF_DisableTileStatus(
- IN gcoSURF Surface,
- IN gctBOOL Decompress
- );
- /* Flush tile status cache for the specified surface. */
- gceSTATUS
- gcoSURF_FlushTileStatus(
- IN gcoSURF Surface,
- IN gctBOOL Decompress
- );
- #endif /* gcdENABLE_3D */
- /* Get surface size. */
- gceSTATUS
- gcoSURF_GetSize(
- IN gcoSURF Surface,
- OUT gctUINT * Width,
- OUT gctUINT * Height,
- OUT gctUINT * Depth
- );
- /* Get surface aligned sizes. */
- gceSTATUS
- gcoSURF_GetAlignedSize(
- IN gcoSURF Surface,
- OUT gctUINT * Width,
- OUT gctUINT * Height,
- OUT gctINT * Stride
- );
- /* Get alignments. */
- gceSTATUS
- gcoSURF_GetAlignment(
- IN gceSURF_TYPE Type,
- IN gceSURF_FORMAT Format,
- OUT gctUINT * AddressAlignment,
- OUT gctUINT * XAlignment,
- OUT gctUINT * YAlignment
- );
- gceSTATUS
- gcoSURF_AlignResolveRect(
- IN gcoSURF Surf,
- IN gcsPOINT_PTR RectOrigin,
- IN gcsPOINT_PTR RectSize,
- OUT gcsPOINT_PTR AlignedOrigin,
- OUT gcsPOINT_PTR AlignedSize
- );
- /* Get surface type and format. */
- gceSTATUS
- gcoSURF_GetFormat(
- IN gcoSURF Surface,
- OUT OPTIONAL gceSURF_TYPE * Type,
- OUT OPTIONAL gceSURF_FORMAT * Format
- );
- /* Get surface information */
- gceSTATUS
- gcoSURF_GetFormatInfo(
- IN gcoSURF Surface,
- OUT gcsSURF_FORMAT_INFO_PTR * formatInfo
- );
- /* Get Surface pack format */
- gceSTATUS
- gcoSURF_GetPackedFormat(
- IN gcoSURF Surface,
- OUT gceSURF_FORMAT * Format
- );
- /* Get surface tiling. */
- gceSTATUS
- gcoSURF_GetTiling(
- IN gcoSURF Surface,
- OUT gceTILING * Tiling
- );
- /* Get flip bitmap offset bytes. */
- gceSTATUS
- gcoSURF_GetFlipBitmapOffset(
- IN gcoSURF Surface,
- OUT gctUINT_PTR FlipBitmapOffset
- );
- /* Get bottom buffer offset bytes. */
- gceSTATUS
- gcoSURF_GetBottomBufferOffset(
- IN gcoSURF Surface,
- OUT gctUINT_PTR BottomBufferOffset
- );
- /* Lock the surface. */
- gceSTATUS
- gcoSURF_Lock(
- IN gcoSURF Surface,
- IN OUT gctUINT32 * Address,
- IN OUT gctPOINTER * Memory
- );
- /* Unlock the surface. */
- gceSTATUS
- gcoSURF_Unlock(
- IN gcoSURF Surface,
- IN gctPOINTER Memory
- );
- /*. Query surface flags.*/
- gceSTATUS
- gcoSURF_QueryFlags(
- IN gcoSURF Surface,
- IN gceSURF_FLAG Flag
- );
- /* Return pixel format parameters; Info is required to be a pointer to an
- * array of at least two items because some formats have up to two records
- * of description. */
- gceSTATUS
- gcoSURF_QueryFormat(
- IN gceSURF_FORMAT Format,
- OUT gcsSURF_FORMAT_INFO_PTR * Info
- );
- /* Compute the color pixel mask. */
- gceSTATUS
- gcoSURF_ComputeColorMask(
- IN gcsSURF_FORMAT_INFO_PTR Format,
- OUT gctUINT32_PTR ColorMask
- );
- /* Flush the surface. */
- gceSTATUS
- gcoSURF_Flush(
- IN gcoSURF Surface
- );
- /* Fill surface from it's tile status buffer. */
- gceSTATUS
- gcoSURF_FillFromTile(
- IN gcoSURF Surface
- );
- /* Fill surface with a value. */
- gceSTATUS
- gcoSURF_Fill(
- IN gcoSURF Surface,
- IN gcsPOINT_PTR Origin,
- IN gcsSIZE_PTR Size,
- IN gctUINT32 Value,
- IN gctUINT32 Mask
- );
- /* Alpha blend two surfaces together. */
- gceSTATUS
- gcoSURF_Blend(
- IN gcoSURF SrcSurface,
- IN gcoSURF DestSurface,
- IN gcsPOINT_PTR SrcOrig,
- IN gcsPOINT_PTR DestOrigin,
- IN gcsSIZE_PTR Size,
- IN gceSURF_BLEND_MODE Mode
- );
- /* Create a new gcoSURF wrapper object. */
- gceSTATUS
- gcoSURF_ConstructWrapper(
- IN gcoHAL Hal,
- OUT gcoSURF * Surface
- );
- /* Set surface flags.*/
- gceSTATUS
- gcoSURF_SetFlags(
- IN gcoSURF Surface,
- IN gceSURF_FLAG Flag,
- IN gctBOOL Value
- );
- /* Set the underlying buffer for the surface wrapper. */
- gceSTATUS
- gcoSURF_SetBuffer(
- IN gcoSURF Surface,
- IN gceSURF_TYPE Type,
- IN gceSURF_FORMAT Format,
- IN gctUINT Stride,
- IN gctPOINTER Logical,
- IN gctUINT32 Physical
- );
- /* Set the size of the surface in pixels and map the underlying buffer. */
- gceSTATUS
- gcoSURF_SetWindow(
- IN gcoSURF Surface,
- IN gctUINT X,
- IN gctUINT Y,
- IN gctUINT Width,
- IN gctUINT Height
- );
- /* Set width/height alignment of the surface directly and calculate stride/size. This is only for dri backend now. Please be careful before use. */
- gceSTATUS
- gcoSURF_SetAlignment(
- IN gcoSURF Surface,
- IN gctUINT Width,
- IN gctUINT Height
- );
- /* Increase reference count of the surface. */
- gceSTATUS
- gcoSURF_ReferenceSurface(
- IN gcoSURF Surface
- );
- /* Get surface reference count. */
- gceSTATUS
- gcoSURF_QueryReferenceCount(
- IN gcoSURF Surface,
- OUT gctINT32 * ReferenceCount
- );
- /* Set surface orientation. */
- gceSTATUS
- gcoSURF_SetOrientation(
- IN gcoSURF Surface,
- IN gceORIENTATION Orientation
- );
- /* Query surface orientation. */
- gceSTATUS
- gcoSURF_QueryOrientation(
- IN gcoSURF Surface,
- OUT gceORIENTATION * Orientation
- );
- gceSTATUS
- gcoSURF_SetOffset(
- IN gcoSURF Surface,
- IN gctSIZE_T Offset
- );
- gceSTATUS
- gcoSURF_NODE_Cache(
- IN gcsSURF_NODE_PTR Node,
- IN gctPOINTER Logical,
- IN gctSIZE_T Bytes,
- IN gceCACHEOPERATION Operation
- );
- /* Lock and unlock surface node */
- gceSTATUS
- gcoSURF_LockNode(
- IN gcsSURF_NODE_PTR Node,
- OUT gctUINT32 * Address,
- OUT gctPOINTER * Memory
- );
- gceSTATUS
- gcoSURF_UnLockNode(
- IN gcsSURF_NODE_PTR Node,
- IN gceSURF_TYPE Type
- );
- /* Perform CPU cache operation on surface node */
- gceSTATUS
- gcoSURF_NODE_CPUCacheOperation(
- IN gcsSURF_NODE_PTR Node,
- IN gceSURF_TYPE Type,
- IN gctSIZE_T Offset,
- IN gctSIZE_T Length,
- IN gceCACHEOPERATION Operation
- );
- /* Perform CPU cache operation on surface */
- gceSTATUS
- gcoSURF_CPUCacheOperation(
- IN gcoSURF Surface,
- IN gceCACHEOPERATION Operation
- );
- gceSTATUS
- gcoSURF_Swap(
- IN gcoSURF Surface1,
- IN gcoSURF Surface2
- );
- gceSTATUS
- gcoSURF_ResetSurWH(
- IN gcoSURF Surface,
- IN gctUINT oriw,
- IN gctUINT orih,
- IN gctUINT alignw,
- IN gctUINT alignh,
- IN gceSURF_FORMAT fmt
- );
- /* Update surface timestamp. */
- gceSTATUS
- gcoSURF_UpdateTimeStamp(
- IN gcoSURF Surface
- );
- /* Query surface current timestamp. */
- gceSTATUS
- gcoSURF_QueryTimeStamp(
- IN gcoSURF Surface,
- OUT gctUINT64 * TimeStamp
- );
- /*
- * Allocate shared buffer for this surface, so that
- * surface states can be shared across processes.
- */
- gceSTATUS
- gcoSURF_AllocShBuffer(
- IN gcoSURF Surface,
- OUT gctSHBUF * ShBuf
- );
- /* Bind shared buffer to this surface */
- gceSTATUS
- gcoSURF_BindShBuffer(
- IN gcoSURF Surface,
- IN gctSHBUF ShBuf
- );
- /* Push surface shared states to shared buffer. */
- gceSTATUS
- gcoSURF_PushSharedInfo(
- IN gcoSURF Surface
- );
- /* Pop shared states from shared buffer. */
- gceSTATUS
- gcoSURF_PopSharedInfo(
- IN gcoSURF Surface
- );
- #if (gcdENABLE_3D || gcdENABLE_VG)
- /* Copy surface. */
- gceSTATUS
- gcoSURF_Copy(
- IN gcoSURF Surface,
- IN gcoSURF Source
- );
- /* Set number of samples for a gcoSURF object. */
- gceSTATUS
- gcoSURF_SetSamples(
- IN gcoSURF Surface,
- IN gctUINT Samples
- );
- /* Get the number of samples per pixel. */
- gceSTATUS
- gcoSURF_GetSamples(
- IN gcoSURF Surface,
- OUT gctUINT_PTR Samples
- );
- #endif
- /******************************************************************************\
- ********************************* gcoDUMP Object ********************************
- \******************************************************************************/
- /* Construct a new gcoDUMP object. */
- gceSTATUS
- gcoDUMP_Construct(
- IN gcoOS Os,
- IN gcoHAL Hal,
- OUT gcoDUMP * Dump
- );
- /* Destroy a gcoDUMP object. */
- gceSTATUS
- gcoDUMP_Destroy(
- IN gcoDUMP Dump
- );
- /* Enable/disable dumping. */
- gceSTATUS
- gcoDUMP_Control(
- IN gcoDUMP Dump,
- IN gctSTRING FileName
- );
- gceSTATUS
- gcoDUMP_IsEnabled(
- IN gcoDUMP Dump,
- OUT gctBOOL * Enabled
- );
- /* Add surface. */
- gceSTATUS
- gcoDUMP_AddSurface(
- IN gcoDUMP Dump,
- IN gctINT32 Width,
- IN gctINT32 Height,
- IN gceSURF_FORMAT PixelFormat,
- IN gctUINT32 Address,
- IN gctSIZE_T ByteCount
- );
- /* Mark the beginning of a frame. */
- gceSTATUS
- gcoDUMP_FrameBegin(
- IN gcoDUMP Dump
- );
- /* Mark the end of a frame. */
- gceSTATUS
- gcoDUMP_FrameEnd(
- IN gcoDUMP Dump
- );
- /* Dump data. */
- gceSTATUS
- gcoDUMP_DumpData(
- IN gcoDUMP Dump,
- IN gceDUMP_TAG Type,
- IN gctUINT32 Address,
- IN gctSIZE_T ByteCount,
- IN gctCONST_POINTER Data
- );
- /* Delete an address. */
- gceSTATUS
- gcoDUMP_Delete(
- IN gcoDUMP Dump,
- IN gctUINT32 Address
- );
- /* Enable dump or not. */
- gceSTATUS
- gcoDUMP_SetDumpFlag(
- IN gctBOOL DumpState
- );
- /******************************************************************************\
- ******************************* gcsRECT Structure ******************************
- \******************************************************************************/
- /* Initialize rectangle structure. */
- gceSTATUS
- gcsRECT_Set(
- OUT gcsRECT_PTR Rect,
- IN gctINT32 Left,
- IN gctINT32 Top,
- IN gctINT32 Right,
- IN gctINT32 Bottom
- );
- /* Return the width of the rectangle. */
- gceSTATUS
- gcsRECT_Width(
- IN gcsRECT_PTR Rect,
- OUT gctINT32 * Width
- );
- /* Return the height of the rectangle. */
- gceSTATUS
- gcsRECT_Height(
- IN gcsRECT_PTR Rect,
- OUT gctINT32 * Height
- );
- /* Ensure that top left corner is to the left and above the right bottom. */
- gceSTATUS
- gcsRECT_Normalize(
- IN OUT gcsRECT_PTR Rect
- );
- /* Compare two rectangles. */
- gceSTATUS
- gcsRECT_IsEqual(
- IN gcsRECT_PTR Rect1,
- IN gcsRECT_PTR Rect2,
- OUT gctBOOL * Equal
- );
- /* Compare the sizes of two rectangles. */
- gceSTATUS
- gcsRECT_IsOfEqualSize(
- IN gcsRECT_PTR Rect1,
- IN gcsRECT_PTR Rect2,
- OUT gctBOOL * EqualSize
- );
- gceSTATUS
- gcsRECT_RelativeRotation(
- IN gceSURF_ROTATION Orientation,
- IN OUT gceSURF_ROTATION *Relation);
- gceSTATUS
- gcsRECT_Rotate(
- IN OUT gcsRECT_PTR Rect,
- IN gceSURF_ROTATION Rotation,
- IN gceSURF_ROTATION toRotation,
- IN gctINT32 SurfaceWidth,
- IN gctINT32 SurfaceHeight
- );
- /******************************************************************************\
- **************************** gcsBOUNDARY Structure *****************************
- \******************************************************************************/
- typedef struct _gcsBOUNDARY
- {
- gctINT x;
- gctINT y;
- gctINT width;
- gctINT height;
- }
- gcsBOUNDARY;
- /******************************************************************************\
- ********************************* gcoHEAP Object ********************************
- \******************************************************************************/
- typedef struct _gcoHEAP * gcoHEAP;
- /* Construct a new gcoHEAP object. */
- gceSTATUS
- gcoHEAP_Construct(
- IN gcoOS Os,
- IN gctSIZE_T AllocationSize,
- OUT gcoHEAP * Heap
- );
- /* Destroy an gcoHEAP object. */
- gceSTATUS
- gcoHEAP_Destroy(
- IN gcoHEAP Heap
- );
- /* Allocate memory. */
- gceSTATUS
- gcoHEAP_Allocate(
- IN gcoHEAP Heap,
- IN gctSIZE_T Bytes,
- OUT gctPOINTER * Node
- );
- gceSTATUS
- gcoHEAP_GetMemorySize(
- IN gcoHEAP Heap,
- IN gctPOINTER Memory,
- OUT gctSIZE_T_PTR MemorySize
- );
- /* Free memory. */
- gceSTATUS
- gcoHEAP_Free(
- IN gcoHEAP Heap,
- IN gctPOINTER Node
- );
- #if (VIVANTE_PROFILER || gcdDEBUG)
- /* Profile the heap. */
- gceSTATUS
- gcoHEAP_ProfileStart(
- IN gcoHEAP Heap
- );
- gceSTATUS
- gcoHEAP_ProfileEnd(
- IN gcoHEAP Heap,
- IN gctCONST_STRING Title
- );
- #endif
- /******************************************************************************\
- ******************************* Debugging Macros *******************************
- \******************************************************************************/
- void
- gcoOS_SetDebugLevel(
- IN gctUINT32 Level
- );
- void
- gcoOS_GetDebugLevel(
- OUT gctUINT32_PTR DebugLevel
- );
- void
- gcoOS_SetDebugZone(
- IN gctUINT32 Zone
- );
- void
- gcoOS_GetDebugZone(
- IN gctUINT32 Zone,
- OUT gctUINT32_PTR DebugZone
- );
- void
- gcoOS_SetDebugLevelZone(
- IN gctUINT32 Level,
- IN gctUINT32 Zone
- );
- void
- gcoOS_SetDebugZones(
- IN gctUINT32 Zones,
- IN gctBOOL Enable
- );
- void
- gcoOS_SetDebugFile(
- IN gctCONST_STRING FileName
- );
- gctFILE
- gcoOS_ReplaceDebugFile(
- IN gctFILE fp
- );
- void
- gcoOS_SysTraceBegin(
- IN gctCONST_STRING FuncName
- );
- void
- gcoOS_SysTraceEnd(
- IN void);
- /*******************************************************************************
- **
- ** gcmFATAL
- **
- ** Print a message to the debugger and execute a break point.
- **
- ** ARGUMENTS:
- **
- ** message Message.
- ** ... Optional arguments.
- */
- void
- gckOS_DebugFatal(
- IN gctCONST_STRING Message,
- ...
- );
- void
- gcoOS_DebugFatal(
- IN gctCONST_STRING Message,
- ...
- );
- #if gcmIS_DEBUG(gcdDEBUG_FATAL)
- # define gcmFATAL gcoOS_DebugFatal
- # define gcmkFATAL gckOS_DebugFatal
- #elif gcdHAS_ELLIPSIS
- # define gcmFATAL(...)
- # define gcmkFATAL(...)
- #else
- gcmINLINE static void
- __dummy_fatal(
- IN gctCONST_STRING Message,
- ...
- )
- {
- }
- # define gcmFATAL __dummy_fatal
- # define gcmkFATAL __dummy_fatal
- #endif
- #define gcmENUM2TEXT(e) case e: return #e
- /*******************************************************************************
- **
- ** gcmTRACE
- **
- ** Print a message to the debugfer if the correct level has been set. In
- ** retail mode this macro does nothing.
- **
- ** ARGUMENTS:
- **
- ** level Level of message.
- ** message Message.
- ** ... Optional arguments.
- */
- #define gcvLEVEL_NONE -1
- #define gcvLEVEL_ERROR 0
- #define gcvLEVEL_WARNING 1
- #define gcvLEVEL_INFO 2
- #define gcvLEVEL_VERBOSE 3
- void
- gckOS_DebugTrace(
- IN gctUINT32 Level,
- IN gctCONST_STRING Message,
- ...
- );
- void
- gckOS_DebugTraceN(
- IN gctUINT32 Level,
- IN gctUINT ArgumentSize,
- IN gctCONST_STRING Message,
- ...
- );
- void
- gcoOS_DebugTrace(
- IN gctUINT32 Level,
- IN gctCONST_STRING Message,
- ...
- );
- #if gcmIS_DEBUG(gcdDEBUG_TRACE)
- # define gcmTRACE gcoOS_DebugTrace
- # define gcmkTRACE gckOS_DebugTrace
- # define gcmkTRACE_N gckOS_DebugTraceN
- #elif gcdHAS_ELLIPSIS
- # define gcmTRACE(...)
- # define gcmkTRACE(...)
- # define gcmkTRACE_N(...)
- #else
- gcmINLINE static void
- __dummy_trace(
- IN gctUINT32 Level,
- IN gctCONST_STRING Message,
- ...
- )
- {
- }
- gcmINLINE static void
- __dummy_trace_n(
- IN gctUINT32 Level,
- IN gctUINT ArgumentSize,
- IN gctCONST_STRING Message,
- ...
- )
- {
- }
- # define gcmTRACE __dummy_trace
- # define gcmkTRACE __dummy_trace
- # define gcmkTRACE_N __dummy_trace_n
- #endif
- /* Zones common for kernel and user. */
- #define gcvZONE_OS (1 << 0)
- #define gcvZONE_HARDWARE (1 << 1)
- #define gcvZONE_HEAP (1 << 2)
- #define gcvZONE_SIGNAL (1 << 27)
- /* Kernel zones. */
- #define gcvZONE_KERNEL (1 << 3)
- #define gcvZONE_VIDMEM (1 << 4)
- #define gcvZONE_COMMAND (1 << 5)
- #define gcvZONE_DRIVER (1 << 6)
- #define gcvZONE_CMODEL (1 << 7)
- #define gcvZONE_MMU (1 << 8)
- #define gcvZONE_EVENT (1 << 9)
- #define gcvZONE_DEVICE (1 << 10)
- #define gcvZONE_DATABASE (1 << 11)
- #define gcvZONE_INTERRUPT (1 << 12)
- #define gcvZONE_POWER (1 << 13)
- /* User zones. */
- #define gcvZONE_HAL (1 << 3)
- #define gcvZONE_BUFFER (1 << 4)
- #define gcvZONE_CONTEXT (1 << 5)
- #define gcvZONE_SURFACE (1 << 6)
- #define gcvZONE_INDEX (1 << 7)
- #define gcvZONE_STREAM (1 << 8)
- #define gcvZONE_TEXTURE (1 << 9)
- #define gcvZONE_2D (1 << 10)
- #define gcvZONE_3D (1 << 11)
- #define gcvZONE_COMPILER (1 << 12)
- #define gcvZONE_MEMORY (1 << 13)
- #define gcvZONE_STATE (1 << 14)
- #define gcvZONE_AUX (1 << 15)
- #define gcvZONE_VERTEX (1 << 16)
- #define gcvZONE_CL (1 << 17)
- #define gcvZONE_COMPOSITION (1 << 17)
- #define gcvZONE_VG (1 << 18)
- #define gcvZONE_IMAGE (1 << 19)
- #define gcvZONE_UTILITY (1 << 20)
- #define gcvZONE_PARAMETERS (1 << 21)
- #define gcvZONE_BUFOBJ (1 << 22)
- #define gcvZONE_SHADER (1 << 23)
- #define gcvZONE_STREAM_OUT (1 << 24)
- /* API definitions. */
- #define gcvZONE_API_HAL (1 << 28)
- #define gcvZONE_API_EGL (2 << 28)
- #define gcvZONE_API_ES11 (3 << 28)
- #define gcvZONE_API_ES20 (4 << 28)
- #define gcvZONE_API_VG11 (5 << 28)
- #define gcvZONE_API_GL (6 << 28)
- #define gcvZONE_API_DFB (7 << 28)
- #define gcvZONE_API_GDI ((gctUINT32)8 << 28)
- #define gcvZONE_API_D3D ((gctUINT32)9 << 28)
- #define gcvZONE_API_ES30 ((gctUINT32)10 << 28)
- #define gcmZONE_GET_API(zone) ((zone) >> 28)
- /*Set gcdZONE_MASE like 0x0 | gcvZONE_API_EGL
- will enable print EGL module debug info*/
- #define gcdZONE_MASK 0x0FFFFFFF
- /* Handy zones. */
- #define gcvZONE_NONE 0
- #define gcvZONE_ALL 0x0FFFFFFF
- /*Dump API depth set 1 for API, 2 for API and API behavior*/
- #define gcvDUMP_API_DEPTH 1
- /*******************************************************************************
- **
- ** gcmTRACE_ZONE
- **
- ** Print a message to the debugger if the correct level and zone has been
- ** set. In retail mode this macro does nothing.
- **
- ** ARGUMENTS:
- **
- ** Level Level of message.
- ** Zone Zone of message.
- ** Message Message.
- ** ... Optional arguments.
- */
- void
- gckOS_DebugTraceZone(
- IN gctUINT32 Level,
- IN gctUINT32 Zone,
- IN gctCONST_STRING Message,
- ...
- );
- void
- gckOS_DebugTraceZoneN(
- IN gctUINT32 Level,
- IN gctUINT32 Zone,
- IN gctUINT ArgumentSize,
- IN gctCONST_STRING Message,
- ...
- );
- void
- gcoOS_DebugTraceZone(
- IN gctUINT32 Level,
- IN gctUINT32 Zone,
- IN gctCONST_STRING Message,
- ...
- );
- #if gcmIS_DEBUG(gcdDEBUG_TRACE)
- # define gcmTRACE_ZONE gcoOS_DebugTraceZone
- # define gcmkTRACE_ZONE gckOS_DebugTraceZone
- # define gcmkTRACE_ZONE_N gckOS_DebugTraceZoneN
- #elif gcdHAS_ELLIPSIS
- # define gcmTRACE_ZONE(...)
- # define gcmkTRACE_ZONE(...)
- # define gcmkTRACE_ZONE_N(...)
- #else
- gcmINLINE static void
- __dummy_trace_zone(
- IN gctUINT32 Level,
- IN gctUINT32 Zone,
- IN gctCONST_STRING Message,
- ...
- )
- {
- }
- gcmINLINE static void
- __dummy_trace_zone_n(
- IN gctUINT32 Level,
- IN gctUINT32 Zone,
- IN gctUINT ArgumentSize,
- IN gctCONST_STRING Message,
- ...
- )
- {
- }
- # define gcmTRACE_ZONE __dummy_trace_zone
- # define gcmkTRACE_ZONE __dummy_trace_zone
- # define gcmkTRACE_ZONE_N __dummy_trace_zone_n
- #endif
- /*******************************************************************************
- **
- ** gcmDEBUG_ONLY
- **
- ** Execute a statement or function only in DEBUG mode.
- **
- ** ARGUMENTS:
- **
- ** f Statement or function to execute.
- */
- #if gcmIS_DEBUG(gcdDEBUG_CODE)
- # define gcmDEBUG_ONLY(f) f
- #else
- # define gcmDEBUG_ONLY(f)
- #endif
- /*******************************************************************************
- **
- ** gcmSTACK_PUSH
- ** gcmSTACK_POP
- ** gcmSTACK_DUMP
- **
- ** Push or pop a function with entry arguments on the trace stack.
- **
- ** ARGUMENTS:
- **
- ** Function Name of function.
- ** Line Line number.
- ** Text Optional text.
- ** ... Optional arguments for text.
- */
- #if gcmIS_DEBUG(gcdDEBUG_STACK)
- void gcoOS_StackPush(IN gctINT8_PTR Identity, IN gctCONST_STRING Function, IN gctINT Line, IN gctCONST_STRING Text, ...);
- void gcoOS_StackPop(IN gctINT8_PTR Identity, IN gctCONST_STRING Function);
- void gcoOS_StackDump(void);
- void gcoOS_StackRemove(IN gctHANDLE Thread);
- # define gcmSTACK_PUSH gcoOS_StackPush
- # define gcmSTACK_POP gcoOS_StackPop
- # define gcmSTACK_DUMP gcoOS_StackDump
- # define gcmSTACK_REMOVE gcoOS_StackRemove
- #elif gcdHAS_ELLIPSIS
- # define gcmSTACK_PUSH(...) do { } while (0)
- # define gcmSTACK_POP(...) do { } while (0)
- # define gcmSTACK_DUMP() do { } while (0)
- # define gcmSTACK_REMOVE(...) do { } while (0)
- #else
- gcmINLINE static void
- __dummy_stack_push(
- IN gctCONST_STRING Function,
- IN gctINT Line,
- IN gctCONST_STRING Text, ...
- )
- {
- }
- # define gcmSTACK_PUSH __dummy_stack_push
- # define gcmSTACK_POP(a,b) do { } while (0)
- # define gcmSTACK_DUMP() do { } while (0)
- # define gcmSTACK_REMOVE(a) do { } while (0)
- #endif
- /******************************************************************************\
- ******************************** Binary Trace **********************************
- \******************************************************************************/
- typedef struct _gcsBINARY_TRACE_MESSAGE * gcsBINARY_TRACE_MESSAGE_PTR;
- typedef struct _gcsBINARY_TRACE_MESSAGE
- {
- gctUINT32 signature;
- gctUINT32 pid;
- gctUINT32 tid;
- gctUINT32 line;
- gctUINT32 numArguments;
- gctUINT8 payload;
- }
- gcsBINARY_TRACE_MESSAGE;
- #define gcdBINARY_TRACE_MESSAGE_SIZE 240
- #if gcdBINARY_TRACE
- void
- gcoOS_BinaryTrace(
- IN gctCONST_STRING Function,
- IN gctINT Line,
- IN gctCONST_STRING Text OPTIONAL,
- ...
- );
- void
- gckOS_BinaryTrace(
- IN gctCONST_STRING Function,
- IN gctINT Line,
- IN gctCONST_STRING Text OPTIONAL,
- ...
- );
- # define gcmBINARY_TRACE gcoOS_BinaryTrace
- # define gcmkBINARY_TRACE gckOS_BinaryTrace
- #elif gcdHAS_ELLIPSIS
- # define gcmBINARY_TRACE(Function, Line, Text, ...)
- # define gcmkBINARY_TRACE(Function, Line, Text, ...)
- #else
- gcmINLINE static void
- __dummy_binary_trace(
- IN gctCONST_STRING Function,
- IN gctINT Line,
- IN gctCONST_STRING Text,
- )
- {
- }
- # define gcmBINARY_TRACE __dummy_binary_trace
- # define gcmkBINARY_TRACE __dummy_binary_trace
- #endif
- /******************************************************************************\
- ******************************** Logging Macros ********************************
- \******************************************************************************/
- #define gcdHEADER_LEVEL gcvLEVEL_VERBOSE
- #ifndef gcdEMPTY_HEADER_FOOTER
- #define gcdEMPTY_HEADER_FOOTER 0
- #endif
- #if gcdENABLE_PROFILING
- void
- gcoOS_ProfileDB(
- IN gctCONST_STRING Function,
- IN OUT gctBOOL_PTR Initialized
- );
- #define gcmHEADER() \
- gctINT8 __user__ = 1; \
- static gctBOOL __profile__initialized__ = gcvFALSE; \
- gcmSTACK_PUSH(&__user__, __FUNCTION__, __LINE__, gcvNULL, gcvNULL); \
- gcoOS_ProfileDB(__FUNCTION__, &__profile__initialized__)
- #define gcmHEADER_ARG(...) \
- gctINT8 __user__ = 1; \
- static gctBOOL __profile__initialized__ = gcvFALSE; \
- gcmSTACK_PUSH(&__user__, __FUNCTION__, __LINE__, Text, __VA_ARGS__); \
- gcoOS_ProfileDB(__FUNCTION__, &__profile__initialized__)
- #define gcmFOOTER() \
- gcmSTACK_POP(&__user__, __FUNCTION__); \
- gcoOS_ProfileDB(__FUNCTION__, gcvNULL)
- #define gcmFOOTER_NO() \
- gcmSTACK_POP(&__user__, __FUNCTION__); \
- gcoOS_ProfileDB(__FUNCTION__, gcvNULL)
- #define gcmFOOTER_ARG(...) \
- gcmSTACK_POP(&__user__, __FUNCTION__); \
- gcoOS_ProfileDB(__FUNCTION__, gcvNULL)
- #define gcmFOOTER_KILL() \
- gcmSTACK_POP(&__user__, __FUNCTION__); \
- gcoOS_ProfileDB(gcvNULL, gcvNULL)
- #else /* gcdENABLE_PROFILING */
- #if gcdEMPTY_HEADER_FOOTER
- # define gcmHEADER()
- #elif gcdHAS_ELLIPSIS
- #define gcmHEADER() \
- gctINT8 __user__ = 1; \
- gctINT8_PTR __user_ptr__ = &__user__; \
- gcmSTACK_PUSH(__user_ptr__, __FUNCTION__, __LINE__, gcvNULL, gcvNULL); \
- gcmBINARY_TRACE(__FUNCTION__, __LINE__, gcvNULL, gcvNULL); \
- gcmTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \
- "++%s(%d)", __FUNCTION__, __LINE__)
- #else
- gcmINLINE static void
- __dummy_header(void)
- {
- }
- # define gcmHEADER __dummy_header
- #endif
- #if gcdHAS_ELLIPSIS
- #if gcdEMPTY_HEADER_FOOTER
- # define gcmHEADER_ARG(Text, ...)
- #else
- # define gcmHEADER_ARG(Text, ...) \
- gctINT8 __user__ = 1; \
- gctINT8_PTR __user_ptr__ = &__user__; \
- gcmSTACK_PUSH(__user_ptr__, __FUNCTION__, __LINE__, Text, __VA_ARGS__); \
- gcmBINARY_TRACE(__FUNCTION__, __LINE__, Text, __VA_ARGS__); \
- gcmTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \
- "++%s(%d): " Text, __FUNCTION__, __LINE__, __VA_ARGS__)
- #endif
- #else
- gcmINLINE static void
- __dummy_header_arg(
- IN gctCONST_STRING Text,
- ...
- )
- {
- }
- # define gcmHEADER_ARG __dummy_header_arg
- #endif
- #if gcdEMPTY_HEADER_FOOTER
- # define gcmFOOTER()
- #elif gcdHAS_ELLIPSIS
- # define gcmFOOTER() \
- gcmSTACK_POP(__user_ptr__, __FUNCTION__); \
- gcmBINARY_TRACE(__FUNCTION__, __LINE__, gcvNULL, gcvNULL); \
- gcmTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \
- "--%s(%d): status=%d(%s)", \
- __FUNCTION__, __LINE__, \
- status, gcoOS_DebugStatus2Name(status)); \
- *__user_ptr__ -= 1
- #else
- gcmINLINE static void
- __dummy_footer(void)
- {
- }
- # define gcmFOOTER __dummy_footer
- #endif
- #if gcdEMPTY_HEADER_FOOTER
- # define gcmFOOTER_NO()
- #elif gcdHAS_ELLIPSIS
- #define gcmFOOTER_NO() \
- gcmSTACK_POP(__user_ptr__, __FUNCTION__); \
- gcmBINARY_TRACE(__FUNCTION__, __LINE__, gcvNULL, gcvNULL); \
- gcmTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \
- "--%s(%d)", __FUNCTION__, __LINE__); \
- *__user_ptr__ -= 1
- #else
- gcmINLINE static void
- __dummy_footer_no(void)
- {
- }
- # define gcmFOOTER_NO __dummy_footer_no
- #endif
- #if gcdEMPTY_HEADER_FOOTER
- # define gcmFOOTER_KILL()
- #elif gcdHAS_ELLIPSIS
- #define gcmFOOTER_KILL() \
- gcmSTACK_POP(__user_ptr__, __FUNCTION__); \
- gcmBINARY_TRACE(__FUNCTION__, __LINE__, gcvNULL, gcvNULL); \
- gcmTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \
- "--%s(%d)", __FUNCTION__, __LINE__); \
- *__user_ptr__ -= 1
- #else
- gcmINLINE static void
- __dummy_footer_kill(void)
- {
- }
- # define gcmFOOTER_KILL __dummy_footer_kill
- #endif
- #if gcdHAS_ELLIPSIS
- #if gcdEMPTY_HEADER_FOOTER
- # define gcmFOOTER_ARG(Text, ...)
- #else
- # define gcmFOOTER_ARG(Text, ...) \
- gcmSTACK_POP(__user_ptr__, __FUNCTION__); \
- gcmBINARY_TRACE(__FUNCTION__, __LINE__, Text, __VA_ARGS__); \
- gcmTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \
- "--%s(%d): " Text, __FUNCTION__, __LINE__, __VA_ARGS__); \
- *__user_ptr__ -= 1
- #endif
- #else
- gcmINLINE static void
- __dummy_footer_arg(
- IN gctCONST_STRING Text,
- ...
- )
- {
- }
- # define gcmFOOTER_ARG __dummy_footer_arg
- #endif
- #endif /* gcdENABLE_PROFILING */
- #if gcdHAS_ELLIPSIS
- #define gcmkHEADER() \
- gctINT8 __kernel__ = 1; \
- gctINT8_PTR __kernel_ptr__ = &__kernel__; \
- gcmkBINARY_TRACE(__FUNCTION__, __LINE__, gcvNULL, gcvNULL); \
- gcmkTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \
- "++%s(%d)", __FUNCTION__, __LINE__)
- #else
- gcmINLINE static void
- __dummy_kheader(void)
- {
- }
- # define gcmkHEADER __dummy_kheader
- #endif
- #if gcdHAS_ELLIPSIS
- # define gcmkHEADER_ARG(Text, ...) \
- gctINT8 __kernel__ = 1; \
- gctINT8_PTR __kernel_ptr__ = &__kernel__; \
- gcmkBINARY_TRACE(__FUNCTION__, __LINE__, Text, __VA_ARGS__); \
- gcmkTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \
- "++%s(%d): " Text, __FUNCTION__, __LINE__, __VA_ARGS__)
- #else
- gcmINLINE static void
- __dummy_kheader_arg(
- IN gctCONST_STRING Text,
- ...
- )
- {
- }
- # define gcmkHEADER_ARG __dummy_kheader_arg
- #endif
- #if gcdHAS_ELLIPSIS
- #define gcmkFOOTER() \
- gcmkBINARY_TRACE(__FUNCTION__, __LINE__, gcvNULL, status); \
- gcmkTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \
- "--%s(%d): status=%d(%s)", \
- __FUNCTION__, __LINE__, status, gckOS_DebugStatus2Name(status)); \
- *__kernel_ptr__ -= 1
- #else
- gcmINLINE static void
- __dummy_kfooter(void)
- {
- }
- # define gcmkFOOTER __dummy_kfooter
- #endif
- #if gcdHAS_ELLIPSIS
- #define gcmkFOOTER_NO() \
- gcmkBINARY_TRACE(__FUNCTION__, __LINE__, gcvNULL, gcvNULL); \
- gcmkTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \
- "--%s(%d)", __FUNCTION__, __LINE__); \
- *__kernel_ptr__ -= 1
- #else
- gcmINLINE static void
- __dummy_kfooter_no(void)
- {
- }
- # define gcmkFOOTER_NO __dummy_kfooter_no
- #endif
- #if gcdHAS_ELLIPSIS
- # define gcmkFOOTER_ARG(Text, ...) \
- gcmkBINARY_TRACE(__FUNCTION__, __LINE__, Text, __VA_ARGS__); \
- gcmkTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \
- "--%s(%d): " Text, \
- __FUNCTION__, __LINE__, __VA_ARGS__); \
- *__kernel_ptr__ -= 1
- #else
- gcmINLINE static void
- __dummy_kfooter_arg(
- IN gctCONST_STRING Text,
- ...
- )
- {
- }
- # define gcmkFOOTER_ARG __dummy_kfooter_arg
- #endif
- #define gcmOPT_VALUE(ptr) (((ptr) == gcvNULL) ? 0 : *(ptr))
- #define gcmOPT_VALUE_INDEX(ptr, index) (((ptr) == gcvNULL) ? 0 : ptr[index])
- #define gcmOPT_POINTER(ptr) (((ptr) == gcvNULL) ? gcvNULL : *(ptr))
- #define gcmOPT_STRING(ptr) (((ptr) == gcvNULL) ? "(nil)" : (ptr))
- void
- gckOS_Print(
- IN gctCONST_STRING Message,
- ...
- );
- void
- gckOS_PrintN(
- IN gctUINT ArgumentSize,
- IN gctCONST_STRING Message,
- ...
- );
- void
- gckOS_CopyPrint(
- IN gctCONST_STRING Message,
- ...
- );
- void
- gcoOS_Print(
- IN gctCONST_STRING Message,
- ...
- );
- #define gcmPRINT gcoOS_Print
- #define gcmkPRINT gckOS_Print
- #define gcmkPRINT_N gckOS_PrintN
- #if gcdPRINT_VERSION
- # define gcmPRINT_VERSION() do { \
- _gcmPRINT_VERSION(gcm); \
- gcmSTACK_DUMP(); \
- } while (0)
- # define gcmkPRINT_VERSION() _gcmPRINT_VERSION(gcmk)
- # define _gcmPRINT_VERSION(prefix) \
- prefix##TRACE(gcvLEVEL_ERROR, \
- "Vivante HAL version %d.%d.%d build %d %s %s", \
- gcvVERSION_MAJOR, gcvVERSION_MINOR, gcvVERSION_PATCH, \
- gcvVERSION_BUILD, gcvVERSION_DATE, gcvVERSION_TIME )
- #else
- # define gcmPRINT_VERSION() do { gcmSTACK_DUMP(); } while (gcvFALSE)
- # define gcmkPRINT_VERSION() do { } while (gcvFALSE)
- #endif
- typedef enum _gceDUMP_BUFFER
- {
- gceDUMP_BUFFER_CONTEXT,
- gceDUMP_BUFFER_USER,
- gceDUMP_BUFFER_KERNEL,
- gceDUMP_BUFFER_LINK,
- gceDUMP_BUFFER_WAITLINK,
- gceDUMP_BUFFER_FROM_USER,
- }
- gceDUMP_BUFFER;
- void
- gckOS_DumpBuffer(
- IN gckOS Os,
- IN gctPOINTER Buffer,
- IN gctUINT Size,
- IN gceDUMP_BUFFER Type,
- IN gctBOOL CopyMessage
- );
- #define gcmkDUMPBUFFER gckOS_DumpBuffer
- #if gcdDUMP_COMMAND
- # define gcmkDUMPCOMMAND(Os, Buffer, Size, Type, CopyMessage) \
- gcmkDUMPBUFFER(Os, Buffer, Size, Type, CopyMessage)
- #else
- # define gcmkDUMPCOMMAND(Os, Buffer, Size, Type, CopyMessage)
- #endif
- #if gcmIS_DEBUG(gcdDEBUG_CODE)
- void
- gckOS_DebugFlush(
- gctCONST_STRING CallerName,
- gctUINT LineNumber,
- gctUINT32 DmaAddress
- );
- # define gcmkDEBUGFLUSH(DmaAddress) \
- gckOS_DebugFlush(__FUNCTION__, __LINE__, DmaAddress)
- #else
- # define gcmkDEBUGFLUSH(DmaAddress)
- #endif
- /*******************************************************************************
- **
- ** gcmDUMP_FRAMERATE
- **
- ** Print average frame rate
- **
- */
- #if gcdDUMP_FRAMERATE
- gceSTATUS
- gcfDumpFrameRate(
- void
- );
- # define gcmDUMP_FRAMERATE gcfDumpFrameRate
- #elif gcdHAS_ELLIPSIS
- # define gcmDUMP_FRAMERATE(...)
- #else
- gcmINLINE static void
- __dummy_dump_frame_rate(
- void
- )
- {
- }
- # define gcmDUMP_FRAMERATE __dummy_dump_frame_rate
- #endif
- /*******************************************************************************
- **
- ** gcmDUMP
- **
- ** Print a dump message.
- **
- ** ARGUMENTS:
- **
- ** gctSTRING Message.
- **
- ** ... Optional arguments.
- */
- #if gcdDUMP
- gceSTATUS
- gcfDump(
- IN gcoOS Os,
- IN gctCONST_STRING String,
- ...
- );
- # define gcmDUMP gcfDump
- #elif gcdHAS_ELLIPSIS
- # define gcmDUMP(...)
- #else
- gcmINLINE static void
- __dummy_dump(
- IN gcoOS Os,
- IN gctCONST_STRING Message,
- ...
- )
- {
- }
- # define gcmDUMP __dummy_dump
- #endif
- /*******************************************************************************
- **
- ** gcmDUMP_DATA
- **
- ** Add data to the dump.
- **
- ** ARGUMENTS:
- **
- ** gctSTRING Tag
- ** Tag for dump.
- **
- ** gctPOINTER Logical
- ** Logical address of buffer.
- **
- ** gctSIZE_T Bytes
- ** Number of bytes.
- */
- #if gcdDUMP || gcdDUMP_COMMAND
- gceSTATUS
- gcfDumpData(
- IN gcoOS Os,
- IN gctSTRING Tag,
- IN gctPOINTER Logical,
- IN gctSIZE_T Bytes
- );
- # define gcmDUMP_DATA gcfDumpData
- #elif gcdHAS_ELLIPSIS
- # define gcmDUMP_DATA(...)
- #else
- gcmINLINE static void
- __dummy_dump_data(
- IN gcoOS Os,
- IN gctSTRING Tag,
- IN gctPOINTER Logical,
- IN gctSIZE_T Bytes
- )
- {
- }
- # define gcmDUMP_DATA __dummy_dump_data
- #endif
- /*******************************************************************************
- **
- ** gcmDUMP_BUFFER
- **
- ** Print a buffer to the dump.
- **
- ** ARGUMENTS:
- **
- ** gctSTRING Tag
- ** Tag for dump.
- **
- ** gctUINT32 Physical
- ** Physical address of buffer.
- **
- ** gctPOINTER Logical
- ** Logical address of buffer.
- **
- ** gctUINT32 Offset
- ** Offset into buffer.
- **
- ** gctSIZE_T Bytes
- ** Number of bytes.
- */
- #if gcdDUMP || gcdDUMP_COMMAND
- gceSTATUS
- gcfDumpBuffer(
- IN gcoOS Os,
- IN gctSTRING Tag,
- IN gctUINT32 Physical,
- IN gctPOINTER Logical,
- IN gctUINT32 Offset,
- IN gctSIZE_T Bytes
- );
- # define gcmDUMP_BUFFER gcfDumpBuffer
- #elif gcdHAS_ELLIPSIS
- # define gcmDUMP_BUFFER(...)
- #else
- gcmINLINE static void
- __dummy_dump_buffer(
- IN gcoOS Os,
- IN gctSTRING Tag,
- IN gctUINT32 Physical,
- IN gctPOINTER Logical,
- IN gctUINT32 Offset,
- IN gctSIZE_T Bytes
- )
- {
- }
- # define gcmDUMP_BUFFER __dummy_dump_buffer
- #endif
- /*******************************************************************************
- **
- ** gcmDUMP_API
- **
- ** Print a dump message for a high level API prefixed by the function name.
- **
- ** ARGUMENTS:
- **
- ** gctSTRING Message.
- **
- ** ... Optional arguments.
- */
- gceSTATUS gcfDumpApi(IN gctCONST_STRING String, ...);
- #if gcdDUMP_API
- # define gcmDUMP_API gcfDumpApi
- #elif gcdHAS_ELLIPSIS
- # define gcmDUMP_API(...)
- #else
- gcmINLINE static void
- __dummy_dump_api(
- IN gctCONST_STRING Message,
- ...
- )
- {
- }
- # define gcmDUMP_API __dummy_dump_api
- #endif
- /*******************************************************************************
- **
- ** gcmDUMP_API_ARRAY
- **
- ** Print an array of data.
- **
- ** ARGUMENTS:
- **
- ** gctUINT32_PTR Pointer to array.
- ** gctUINT32 Size.
- */
- gceSTATUS gcfDumpArray(IN gctCONST_POINTER Data, IN gctUINT32 Size);
- #if gcdDUMP_API
- # define gcmDUMP_API_ARRAY gcfDumpArray
- #elif gcdHAS_ELLIPSIS
- # define gcmDUMP_API_ARRAY(...)
- #else
- gcmINLINE static void
- __dummy_dump_api_array(
- IN gctCONST_POINTER Data,
- IN gctUINT32 Size
- )
- {
- }
- # define gcmDUMP_API_ARRAY __dummy_dump_api_array
- #endif
- /*******************************************************************************
- **
- ** gcmDUMP_API_ARRAY_TOKEN
- **
- ** Print an array of data terminated by a token.
- **
- ** ARGUMENTS:
- **
- ** gctUINT32_PTR Pointer to array.
- ** gctUINT32 Termination.
- */
- gceSTATUS gcfDumpArrayToken(IN gctCONST_POINTER Data, IN gctUINT32 Termination);
- #if gcdDUMP_API
- # define gcmDUMP_API_ARRAY_TOKEN gcfDumpArrayToken
- #elif gcdHAS_ELLIPSIS
- # define gcmDUMP_API_ARRAY_TOKEN(...)
- #else
- gcmINLINE static void
- __dummy_dump_api_array_token(
- IN gctCONST_POINTER Data,
- IN gctUINT32 Termination
- )
- {
- }
- # define gcmDUMP_API_ARRAY_TOKEN __dummy_dump_api_array_token
- #endif
- /*******************************************************************************
- **
- ** gcmDUMP_API_DATA
- **
- ** Print an array of bytes.
- **
- ** ARGUMENTS:
- **
- ** gctCONST_POINTER Pointer to array.
- ** gctSIZE_T Size.
- */
- gceSTATUS gcfDumpApiData(IN gctCONST_POINTER Data, IN gctSIZE_T Size);
- #if gcdDUMP_API
- # define gcmDUMP_API_DATA gcfDumpApiData
- #elif gcdHAS_ELLIPSIS
- # define gcmDUMP_API_DATA(...)
- #else
- gcmINLINE static void
- __dummy_dump_api_data(
- IN gctCONST_POINTER Data,
- IN gctSIZE_T Size
- )
- {
- }
- # define gcmDUMP_API_DATA __dummy_dump_api_data
- #endif
- /*******************************************************************************
- ** gcmDUMP_2D_COMMAND
- **
- ** Print the 2D command buffer.
- **
- ** ARGUMENTS:
- **
- ** gctUINT32_PTR Pointer to the command buffer.
- ** gctUINT32 Command buffer size.
- */
- gceSTATUS gcfDump2DCommand(IN gctUINT32_PTR Command, IN gctUINT32 Size);
- #if gcdDUMP_2D
- # define gcmDUMP_2D_COMMAND gcfDump2DCommand
- #elif gcdHAS_ELLIPSIS
- # define gcmDUMP_2D_COMMAND(...)
- #else
- gcmINLINE static void
- __dummy_dump_2d_command(
- IN gctUINT32_PTR Command,
- IN gctUINT32 Size
- )
- {
- }
- # define gcmDUMP_2D_COMMAND __dummy_dump_2d_command
- #endif
- /*******************************************************************************
- ** gcmDUMP_2D_SURFACE
- **
- ** Print the 2D surface memory.
- **
- ** ARGUMENTS:
- **
- ** gctBOOL Src.
- ** gctUINT32 Address.
- */
- gceSTATUS gcfDump2DSurface(IN gctBOOL Src, IN gctUINT32 Address);
- #if gcdDUMP_2D
- # define gcmDUMP_2D_SURFACE gcfDump2DSurface
- #elif gcdHAS_ELLIPSIS
- # define gcmDUMP_2D_SURFACE(...)
- #else
- gcmINLINE static void
- __dummy_dump_2d_surface(
- IN gctBOOL Src,
- IN gctUINT32 Address
- )
- {
- }
- # define gcmDUMP_2D_SURFACE __dummy_dump_2d_surface
- #endif
- /*******************************************************************************
- ** gcmDUMP_ADD_MEMORY_INFO
- **
- ** Record the memory info.
- **
- ** ARGUMENTS:
- **
- ** gctUINT32 Address.
- ** gctSIZE_T Size.
- */
- gceSTATUS gcfAddMemoryInfo(IN gctUINT32 GPUAddress, IN gctPOINTER Logical, IN gctUINT32 Physical, IN gctUINT32 Size);
- #if gcdDUMP_2D
- # define gcmDUMP_ADD_MEMORY_INFO gcfAddMemoryInfo
- #elif gcdHAS_ELLIPSIS
- # define gcmDUMP_ADD_MEMORY_INFO(...)
- #else
- gcmINLINE static void
- __dummy_dump_add_memory_info(
- IN gctUINT32 GPUAddress,
- IN gctPOINTER Logical,
- IN gctUINT32 Physical,
- IN gctUINT32 Size
- )
- {
- }
- # define gcmDUMP_ADD_MEMORY_INFO __dummy_dump_add_memory_info
- #endif
- /*******************************************************************************
- ** gcmDUMP_DEL_MEMORY_INFO
- **
- ** Record the memory info.
- **
- ** ARGUMENTS:
- **
- ** gctUINT32 Address.
- */
- gceSTATUS gcfDelMemoryInfo(IN gctUINT32 Address);
- #if gcdDUMP_2D
- # define gcmDUMP_DEL_MEMORY_INFO gcfDelMemoryInfo
- #elif gcdHAS_ELLIPSIS
- # define gcmDUMP_DEL_MEMORY_INFO(...)
- #else
- gcmINLINE static void
- __dummy_dump_del_memory_info(
- IN gctUINT32 Address
- )
- {
- }
- # define gcmDUMP_DEL_MEMORY_INFO __dummy_dump_del_memory_info
- #endif
- #if gcdDUMP_2D
- extern gctPOINTER dumpMemInfoListMutex;
- extern gctBOOL dump2DFlag;
- #endif
- /*******************************************************************************
- **
- ** gcmTRACE_RELEASE
- **
- ** Print a message to the shader debugger.
- **
- ** ARGUMENTS:
- **
- ** message Message.
- ** ... Optional arguments.
- */
- #define gcmTRACE_RELEASE gcoOS_DebugShaderTrace
- void
- gcoOS_DebugShaderTrace(
- IN gctCONST_STRING Message,
- ...
- );
- void
- gcoOS_SetDebugShaderFiles(
- IN gctCONST_STRING VSFileName,
- IN gctCONST_STRING FSFileName
- );
- void
- gcoOS_SetDebugShaderFileType(
- IN gctUINT32 ShaderType
- );
- void
- gcoOS_EnableDebugBuffer(
- IN gctBOOL Enable
- );
- /*******************************************************************************
- **
- ** gcmBREAK
- **
- ** Break into the debugger. In retail mode this macro does nothing.
- **
- ** ARGUMENTS:
- **
- ** None.
- */
- void
- gcoOS_DebugBreak(
- void
- );
- void
- gckOS_DebugBreak(
- void
- );
- #if gcmIS_DEBUG(gcdDEBUG_BREAK)
- # define gcmBREAK gcoOS_DebugBreak
- # define gcmkBREAK gckOS_DebugBreak
- #else
- # define gcmBREAK()
- # define gcmkBREAK()
- #endif
- /*******************************************************************************
- **
- ** gcmASSERT
- **
- ** Evaluate an expression and break into the debugger if the expression
- ** evaluates to false. In retail mode this macro does nothing.
- **
- ** ARGUMENTS:
- **
- ** exp Expression to evaluate.
- */
- #if gcmIS_DEBUG(gcdDEBUG_ASSERT)
- # define _gcmASSERT(prefix, exp) \
- do \
- { \
- if (!(exp)) \
- { \
- prefix##TRACE(gcvLEVEL_ERROR, \
- #prefix "ASSERT at %s(%d)", \
- __FUNCTION__, __LINE__); \
- prefix##TRACE(gcvLEVEL_ERROR, \
- "(%s)", #exp); \
- prefix##BREAK(); \
- } \
- } \
- while (gcvFALSE)
- # define gcmASSERT(exp) _gcmASSERT(gcm, exp)
- # define gcmkASSERT(exp) _gcmASSERT(gcmk, exp)
- #else
- # define gcmASSERT(exp)
- # define gcmkASSERT(exp)
- #endif
- /*******************************************************************************
- **
- ** gcmVERIFY
- **
- ** Verify if an expression returns true. If the expression does not
- ** evaluates to true, an assertion will happen in debug mode.
- **
- ** ARGUMENTS:
- **
- ** exp Expression to evaluate.
- */
- #if gcmIS_DEBUG(gcdDEBUG_ASSERT)
- # define gcmVERIFY(exp) gcmASSERT(exp)
- # define gcmkVERIFY(exp) gcmkASSERT(exp)
- #else
- # define gcmVERIFY(exp) exp
- # define gcmkVERIFY(exp) exp
- #endif
- /*******************************************************************************
- **
- ** gcmVERIFY_OK
- **
- ** Verify a fucntion returns gcvSTATUS_OK. If the function does not return
- ** gcvSTATUS_OK, an assertion will happen in debug mode.
- **
- ** ARGUMENTS:
- **
- ** func Function to evaluate.
- */
- void
- gcoOS_Verify(
- IN gceSTATUS status
- );
- void
- gckOS_Verify(
- IN gceSTATUS status
- );
- #if gcmIS_DEBUG(gcdDEBUG_ASSERT)
- # define gcmVERIFY_OK(func) \
- do \
- { \
- gceSTATUS verifyStatus = func; \
- gcoOS_Verify(verifyStatus); \
- if (verifyStatus != gcvSTATUS_OK) \
- { \
- gcmTRACE( \
- gcvLEVEL_ERROR, \
- "gcmVERIFY_OK(%d): function returned %d", \
- __LINE__, verifyStatus \
- ); \
- } \
- gcmASSERT(verifyStatus == gcvSTATUS_OK); \
- } \
- while (gcvFALSE)
- # define gcmkVERIFY_OK(func) \
- do \
- { \
- gceSTATUS verifyStatus = func; \
- if (verifyStatus != gcvSTATUS_OK) \
- { \
- gcmkTRACE( \
- gcvLEVEL_ERROR, \
- "gcmkVERIFY_OK(%d): function returned %d", \
- __LINE__, verifyStatus \
- ); \
- } \
- gckOS_Verify(verifyStatus); \
- gcmkASSERT(verifyStatus == gcvSTATUS_OK); \
- } \
- while (gcvFALSE)
- #else
- # define gcmVERIFY_OK(func) func
- # define gcmkVERIFY_OK(func) func
- #endif
- gctCONST_STRING
- gcoOS_DebugStatus2Name(
- gceSTATUS status
- );
- gctCONST_STRING
- gckOS_DebugStatus2Name(
- gceSTATUS status
- );
- /*******************************************************************************
- **
- ** gcmERR_BREAK
- **
- ** Executes a break statement on error.
- **
- ** ASSUMPTIONS:
- **
- ** 'status' variable of gceSTATUS type must be defined.
- **
- ** ARGUMENTS:
- **
- ** func Function to evaluate.
- */
- #define _gcmERR_BREAK(prefix, func) \
- status = func; \
- if (gcmIS_ERROR(status)) \
- { \
- prefix##PRINT_VERSION(); \
- prefix##TRACE(gcvLEVEL_ERROR, \
- #prefix "ERR_BREAK: status=%d(%s) @ %s(%d)", \
- status, gcoOS_DebugStatus2Name(status), __FUNCTION__, __LINE__); \
- break; \
- } \
- do { } while (gcvFALSE)
- #define _gcmkERR_BREAK(prefix, func) \
- status = func; \
- if (gcmIS_ERROR(status)) \
- { \
- prefix##PRINT_VERSION(); \
- prefix##TRACE(gcvLEVEL_ERROR, \
- #prefix "ERR_BREAK: status=%d(%s) @ %s(%d)", \
- status, gckOS_DebugStatus2Name(status), __FUNCTION__, __LINE__); \
- break; \
- } \
- do { } while (gcvFALSE)
- #define gcmERR_BREAK(func) _gcmERR_BREAK(gcm, func)
- #define gcmkERR_BREAK(func) _gcmkERR_BREAK(gcmk, func)
- /*******************************************************************************
- **
- ** gcmERR_RETURN
- **
- ** Executes a return on error.
- **
- ** ASSUMPTIONS:
- **
- ** 'status' variable of gceSTATUS type must be defined.
- **
- ** ARGUMENTS:
- **
- ** func Function to evaluate.
- */
- #define _gcmERR_RETURN(prefix, func) \
- status = func; \
- if (gcmIS_ERROR(status)) \
- { \
- prefix##PRINT_VERSION(); \
- prefix##TRACE(gcvLEVEL_ERROR, \
- #prefix "ERR_RETURN: status=%d(%s) @ %s(%d)", \
- status, gcoOS_DebugStatus2Name(status), __FUNCTION__, __LINE__); \
- prefix##FOOTER(); \
- return status; \
- } \
- do { } while (gcvFALSE)
- #define _gcmkERR_RETURN(prefix, func) \
- status = func; \
- if (gcmIS_ERROR(status)) \
- { \
- prefix##PRINT_VERSION(); \
- prefix##TRACE(gcvLEVEL_ERROR, \
- #prefix "ERR_RETURN: status=%d(%s) @ %s(%d)", \
- status, gckOS_DebugStatus2Name(status), __FUNCTION__, __LINE__); \
- prefix##FOOTER(); \
- return status; \
- } \
- do { } while (gcvFALSE)
- #define gcmERR_RETURN(func) _gcmERR_RETURN(gcm, func)
- #define gcmkERR_RETURN(func) _gcmkERR_RETURN(gcmk, func)
- /*******************************************************************************
- **
- ** gcmONERROR
- **
- ** Jump to the error handler in case there is an error.
- **
- ** ASSUMPTIONS:
- **
- ** 'status' variable of gceSTATUS type must be defined.
- **
- ** ARGUMENTS:
- **
- ** func Function to evaluate.
- */
- #define _gcmONERROR(prefix, func) \
- do \
- { \
- status = func; \
- if (gcmIS_ERROR(status)) \
- { \
- prefix##PRINT_VERSION(); \
- prefix##TRACE(gcvLEVEL_ERROR, \
- #prefix "ONERROR: status=%d(%s) @ %s(%d)", \
- status, gcoOS_DebugStatus2Name(status), __FUNCTION__, __LINE__); \
- goto OnError; \
- } \
- } \
- while (gcvFALSE)
- #define _gcmkONERROR(prefix, func) \
- do \
- { \
- status = func; \
- if (gcmIS_ERROR(status)) \
- { \
- prefix##PRINT_VERSION(); \
- prefix##TRACE(gcvLEVEL_ERROR, \
- #prefix "ONERROR: status=%d(%s) @ %s(%d)", \
- status, gckOS_DebugStatus2Name(status), __FUNCTION__, __LINE__); \
- goto OnError; \
- } \
- } \
- while (gcvFALSE)
- #define gcmONERROR(func) _gcmONERROR(gcm, func)
- #define gcmkONERROR(func) _gcmkONERROR(gcmk, func)
- /*******************************************************************************
- **
- ** gcmkSAFECASTSIZET
- **
- ** Check wether value of a gctSIZE_T varible beyond the capability
- ** of 32bits GPU hardware.
- **
- ** ASSUMPTIONS:
- **
- **
- **
- ** ARGUMENTS:
- **
- ** x A gctUINT32 variable
- ** y A gctSIZE_T variable
- */
- #define gcmkSAFECASTSIZET(x, y) \
- do \
- { \
- gctUINT32 tmp = (gctUINT32)(y); \
- if (gcmSIZEOF(gctSIZE_T) > gcmSIZEOF(gctUINT32)) \
- { \
- gcmkASSERT(tmp <= gcvMAXUINT32); \
- } \
- (x) = tmp; \
- } \
- while (gcvFALSE)
- #define gcmSAFECASTSIZET(x, y) \
- do \
- { \
- gctUINT32 tmp = (gctUINT32)(y); \
- if (gcmSIZEOF(gctSIZE_T) > gcmSIZEOF(gctUINT32)) \
- { \
- gcmASSERT(tmp <= gcvMAXUINT32); \
- } \
- (x) = tmp; \
- } \
- while (gcvFALSE)
- /*******************************************************************************
- **
- ** gcmVERIFY_LOCK
- **
- ** Verifies whether the surface is locked.
- **
- ** ARGUMENTS:
- **
- ** surfaceInfo Pointer to the surface iniformational structure.
- */
- #define gcmVERIFY_LOCK(surfaceInfo) \
- if (!surfaceInfo->node.valid) \
- { \
- gcmONERROR(gcvSTATUS_MEMORY_UNLOCKED); \
- } \
- /*******************************************************************************
- **
- ** gcmVERIFY_NODE_LOCK
- **
- ** Verifies whether the surface node is locked.
- **
- ** ARGUMENTS:
- **
- ** surfaceInfo Pointer to the surface iniformational structure.
- */
- #define gcmVERIFY_NODE_LOCK(surfaceNode) \
- if (!(surfaceNode)->valid) \
- { \
- status = gcvSTATUS_MEMORY_UNLOCKED; \
- break; \
- } \
- do { } while (gcvFALSE)
- /*******************************************************************************
- **
- ** gcmBADOBJECT_BREAK
- **
- ** Executes a break statement on bad object.
- **
- ** ARGUMENTS:
- **
- ** obj Object to test.
- ** t Expected type of the object.
- */
- #define gcmBADOBJECT_BREAK(obj, t) \
- if ((obj == gcvNULL) \
- || (((gcsOBJECT *)(obj))->type != t) \
- ) \
- { \
- status = gcvSTATUS_INVALID_OBJECT; \
- break; \
- } \
- do { } while (gcvFALSE)
- /*******************************************************************************
- **
- ** gcmCHECK_STATUS
- **
- ** Executes a break statement on error.
- **
- ** ASSUMPTIONS:
- **
- ** 'status' variable of gceSTATUS type must be defined.
- **
- ** ARGUMENTS:
- **
- ** func Function to evaluate.
- */
- #define _gcmCHECK_STATUS(prefix, func) \
- do \
- { \
- last = func; \
- if (gcmIS_ERROR(last)) \
- { \
- prefix##TRACE(gcvLEVEL_ERROR, \
- #prefix "CHECK_STATUS: status=%d(%s) @ %s(%d)", \
- last, gcoOS_DebugStatus2Name(last), __FUNCTION__, __LINE__); \
- status = last; \
- } \
- } \
- while (gcvFALSE)
- #define _gcmkCHECK_STATUS(prefix, func) \
- do \
- { \
- last = func; \
- if (gcmIS_ERROR(last)) \
- { \
- prefix##TRACE(gcvLEVEL_ERROR, \
- #prefix "CHECK_STATUS: status=%d(%s) @ %s(%d)", \
- last, gckOS_DebugStatus2Name(last), __FUNCTION__, __LINE__); \
- status = last; \
- } \
- } \
- while (gcvFALSE)
- #define gcmCHECK_STATUS(func) _gcmCHECK_STATUS(gcm, func)
- #define gcmkCHECK_STATUS(func) _gcmkCHECK_STATUS(gcmk, func)
- /*******************************************************************************
- **
- ** gcmVERIFY_ARGUMENT
- **
- ** Assert if an argument does not apply to the specified expression. If
- ** the argument evaluates to false, gcvSTATUS_INVALID_ARGUMENT will be
- ** returned from the current function. In retail mode this macro does
- ** nothing.
- **
- ** ARGUMENTS:
- **
- ** arg Argument to evaluate.
- */
- # define _gcmVERIFY_ARGUMENT(prefix, arg) \
- do \
- { \
- if (!(arg)) \
- { \
- prefix##TRACE(gcvLEVEL_ERROR, #prefix "VERIFY_ARGUMENT failed:"); \
- prefix##ASSERT(arg); \
- prefix##FOOTER_ARG("status=%d", gcvSTATUS_INVALID_ARGUMENT); \
- return gcvSTATUS_INVALID_ARGUMENT; \
- } \
- } \
- while (gcvFALSE)
- # define gcmVERIFY_ARGUMENT(arg) _gcmVERIFY_ARGUMENT(gcm, arg)
- # define gcmkVERIFY_ARGUMENT(arg) _gcmVERIFY_ARGUMENT(gcmk, arg)
- /*******************************************************************************
- **
- ** gcmDEBUG_VERIFY_ARGUMENT
- **
- ** Works just like gcmVERIFY_ARGUMENT, but is only valid in debug mode.
- ** Use this to verify arguments inside non-public API functions.
- */
- #if gcdDEBUG
- # define gcmDEBUG_VERIFY_ARGUMENT(arg) _gcmVERIFY_ARGUMENT(gcm, arg)
- # define gcmkDEBUG_VERIFY_ARGUMENT(arg) _gcmkVERIFY_ARGUMENT(gcm, arg)
- #else
- # define gcmDEBUG_VERIFY_ARGUMENT(arg)
- # define gcmkDEBUG_VERIFY_ARGUMENT(arg)
- #endif
- /*******************************************************************************
- **
- ** gcmVERIFY_ARGUMENT_RETURN
- **
- ** Assert if an argument does not apply to the specified expression. If
- ** the argument evaluates to false, gcvSTATUS_INVALID_ARGUMENT will be
- ** returned from the current function. In retail mode this macro does
- ** nothing.
- **
- ** ARGUMENTS:
- **
- ** arg Argument to evaluate.
- */
- # define _gcmVERIFY_ARGUMENT_RETURN(prefix, arg, value) \
- do \
- { \
- if (!(arg)) \
- { \
- prefix##TRACE(gcvLEVEL_ERROR, \
- #prefix "gcmVERIFY_ARGUMENT_RETURN failed:"); \
- prefix##ASSERT(arg); \
- prefix##FOOTER_ARG("value=%d", value); \
- return value; \
- } \
- } \
- while (gcvFALSE)
- # define gcmVERIFY_ARGUMENT_RETURN(arg, value) \
- _gcmVERIFY_ARGUMENT_RETURN(gcm, arg, value)
- # define gcmkVERIFY_ARGUMENT_RETURN(arg, value) \
- _gcmVERIFY_ARGUMENT_RETURN(gcmk, arg, value)
- #define MAX_LOOP_COUNT 0x7FFFFFFF
- /******************************************************************************\
- ****************************** User Debug Option ******************************
- \******************************************************************************/
- /* User option. */
- typedef enum _gceDEBUG_MSG
- {
- gcvDEBUG_MSG_NONE,
- gcvDEBUG_MSG_ERROR,
- gcvDEBUG_MSG_WARNING
- }
- gceDEBUG_MSG;
- typedef struct _gcsUSER_DEBUG_OPTION
- {
- gceDEBUG_MSG debugMsg;
- }
- gcsUSER_DEBUG_OPTION;
- gcsUSER_DEBUG_OPTION *
- gcGetUserDebugOption(
- void
- );
- #if defined(ANDROID)
- struct _gcoOS_SymbolsList
- {
- #if gcdENABLE_3D
- gcePATCH_ID patchId;
- #endif
- const char * symList[10];
- };
- #endif
- #if gcdHAS_ELLIPSIS
- #define gcmUSER_DEBUG_MSG(level, ...) \
- do \
- { \
- if (level <= gcGetUserDebugOption()->debugMsg) \
- { \
- gcoOS_Print(__VA_ARGS__); \
- } \
- } while (gcvFALSE)
- #define gcmUSER_DEBUG_ERROR_MSG(...) gcmUSER_DEBUG_MSG(gcvDEBUG_MSG_ERROR, "Error: " __VA_ARGS__)
- #define gcmUSER_DEBUG_WARNING_MSG(...) gcmUSER_DEBUG_MSG(gcvDEBUG_MSG_WARNING, "Warring: " __VA_ARGS__)
- #else
- #define gcmUSER_DEBUG_MSG
- #define gcmUSER_DEBUG_ERROR_MSG
- #define gcmUSER_DEBUG_WARNING_MSG
- #endif
- /*******************************************************************************
- **
- ** A set of macros to aid state loading.
- **
- ** ARGUMENTS:
- **
- ** CommandBuffer Pointer to a gcoCMDBUF object.
- ** StateDelta Pointer to a gcsSTATE_DELTA state delta structure.
- ** Memory Destination memory pointer of gctUINT32_PTR type.
- ** PartOfContext Whether or not the state is a part of the context.
- ** FixedPoint Whether or not the state is of the fixed point format.
- ** Count Number of consecutive states to be loaded.
- ** Address State address.
- ** Data Data to be set to the state.
- */
- /*----------------------------------------------------------------------------*/
- #if gcmIS_DEBUG(gcdDEBUG_CODE)
- # define gcmSTORELOADSTATE(CommandBuffer, Memory, Address, Count) \
- CommandBuffer->lastLoadStatePtr = gcmPTR_TO_UINT64(Memory); \
- CommandBuffer->lastLoadStateAddress = Address; \
- CommandBuffer->lastLoadStateCount = Count
- # define gcmVERIFYLOADSTATE(CommandBuffer, Memory, Address) \
- gcmASSERT( \
- (gctUINT) (Memory - gcmUINT64_TO_TYPE(CommandBuffer->lastLoadStatePtr, gctUINT32_PTR) - 1) \
- == \
- (gctUINT) (Address - CommandBuffer->lastLoadStateAddress) \
- ); \
- \
- gcmASSERT(CommandBuffer->lastLoadStateCount > 0); \
- \
- CommandBuffer->lastLoadStateCount -= 1
- # define gcmVERIFYLOADSTATEDONE(CommandBuffer) \
- gcmASSERT(CommandBuffer->lastLoadStateCount == 0);
- # define gcmDEFINELOADSTATEBASE() \
- gctUINT32_PTR LoadStateBase;
- # define gcmSETLOADSTATEBASE(CommandBuffer, OutSide) \
- if (OutSide) \
- {\
- LoadStateBase = (gctUINT32_PTR)*OutSide; \
- }\
- else\
- {\
- LoadStateBase = (gctUINT_PTR)CommandBuffer->buffer;\
- }
- # define gcmVERIFYLOADSTATEALIGNED(CommandBuffer, Memory) \
- gcmASSERT(((Memory - LoadStateBase) & 1) == 0);
- # define gcmUNSETLOADSTATEBASE() \
- LoadStateBase = LoadStateBase;
- #else
- # define gcmSTORELOADSTATE(CommandBuffer, Memory, Address, Count)
- # define gcmVERIFYLOADSTATE(CommandBuffer, Memory, Address)
- # define gcmVERIFYLOADSTATEDONE(CommandBuffer)
- # define gcmDEFINELOADSTATEBASE()
- # define gcmSETLOADSTATEBASE(CommandBuffer, OutSide)
- # define gcmVERIFYLOADSTATEALIGNED(CommandBuffer, Memory)
- # define gcmUNSETLOADSTATEBASE()
- #endif
- #if gcdSECURE_USER
- # define gcmDEFINESECUREUSER() \
- gctUINT __secure_user_offset__; \
- gctUINT32_PTR __secure_user_hintArray__;
- # define gcmBEGINSECUREUSER() \
- __secure_user_offset__ = reserve->lastOffset; \
- \
- __secure_user_hintArray__ = gcmUINT64_TO_PTR(reserve->hintArrayTail)
- # define gcmENDSECUREUSER() \
- reserve->hintArrayTail = gcmPTR_TO_UINT64(__secure_user_hintArray__)
- # define gcmSKIPSECUREUSER() \
- __secure_user_offset__ += gcmSIZEOF(gctUINT32)
- # define gcmUPDATESECUREUSER() \
- *__secure_user_hintArray__ = __secure_user_offset__; \
- \
- __secure_user_offset__ += gcmSIZEOF(gctUINT32); \
- __secure_user_hintArray__ += 1
- #else
- # define gcmDEFINESECUREUSER()
- # define gcmBEGINSECUREUSER()
- # define gcmENDSECUREUSER()
- # define gcmSKIPSECUREUSER()
- # define gcmUPDATESECUREUSER()
- #endif
- /*----------------------------------------------------------------------------*/
- #if gcdDUMP
- # define gcmDUMPSTATEDATA(StateDelta, FixedPoint, Address, Data) \
- if (FixedPoint) \
- { \
- gcmDUMP(gcvNULL, "#[state.x 0x%04X 0x%08X]", \
- Address, Data \
- ); \
- } \
- else \
- { \
- gcmDUMP(gcvNULL, "#[state 0x%04X 0x%08X]", \
- Address, Data \
- ); \
- }
- #else
- # define gcmDUMPSTATEDATA(StateDelta, FixedPoint, Address, Data)
- #endif
- #define gcmDEFINESTATEBUFFER(CommandBuffer, StateDelta, Memory, ReserveSize) \
- gcmDEFINESECUREUSER() \
- gctSIZE_T ReserveSize; \
- gcoCMDBUF CommandBuffer; \
- gctUINT32_PTR Memory; \
- gcsSTATE_DELTA_PTR StateDelta
- #define gcmBEGINSTATEBUFFER(Hardware, CommandBuffer, StateDelta, Memory, ReserveSize) \
- { \
- gcmONERROR(gcoBUFFER_Reserve( \
- Hardware->buffer, ReserveSize, gcvTRUE, gcvCOMMAND_3D, &CommandBuffer \
- )); \
- \
- Memory = (gctUINT32_PTR) gcmUINT64_TO_PTR(CommandBuffer->lastReserve); \
- \
- StateDelta = Hardware->delta; \
- \
- gcmBEGINSECUREUSER(); \
- }
- #define gcmENDSTATEBUFFER(Hardware, CommandBuffer, Memory, ReserveSize) \
- { \
- gcmENDSECUREUSER(); \
- \
- gcmASSERT( \
- gcmUINT64_TO_TYPE(CommandBuffer->lastReserve, gctUINT8_PTR) + ReserveSize \
- == \
- (gctUINT8_PTR) Memory \
- ); \
- }
- /*----------------------------------------------------------------------------*/
- #define gcmBEGINSTATEBATCH(CommandBuffer, Memory, FixedPoint, Address, Count) \
- { \
- gcmASSERT(((Memory - gcmUINT64_TO_TYPE(CommandBuffer->lastReserve, gctUINT32_PTR)) & 1) == 0); \
- gcmASSERT((gctUINT32)Count <= 1024); \
- \
- gcmVERIFYLOADSTATEDONE(CommandBuffer); \
- \
- gcmSTORELOADSTATE(CommandBuffer, Memory, Address, Count); \
- \
- *Memory++ \
- = gcmSETFIELDVALUE(0, AQ_COMMAND_LOAD_STATE_COMMAND, OPCODE, LOAD_STATE) \
- | gcmSETFIELD (0, AQ_COMMAND_LOAD_STATE_COMMAND, FLOAT, FixedPoint) \
- | gcmSETFIELD (0, AQ_COMMAND_LOAD_STATE_COMMAND, COUNT, Count) \
- | gcmSETFIELD (0, AQ_COMMAND_LOAD_STATE_COMMAND, ADDRESS, Address); \
- \
- gcmSKIPSECUREUSER(); \
- }
- #define gcmENDSTATEBATCH(CommandBuffer, Memory) \
- { \
- gcmVERIFYLOADSTATEDONE(CommandBuffer); \
- \
- gcmASSERT(((Memory - gcmUINT64_TO_TYPE(CommandBuffer->lastReserve, gctUINT32_PTR)) & 1) == 0); \
- }
- /*----------------------------------------------------------------------------*/
- #define gcmSETSTATEDATA(StateDelta, CommandBuffer, Memory, FixedPoint, \
- Address, Data) \
- { \
- gctUINT32 __temp_data32__; \
- \
- gcmVERIFYLOADSTATE(CommandBuffer, Memory, Address); \
- \
- gcmSAFECASTSIZET(__temp_data32__, Data); \
- \
- *Memory++ = __temp_data32__; \
- \
- gcoHARDWARE_UpdateDelta( \
- StateDelta, Address, 0, __temp_data32__ \
- ); \
- \
- gcmDUMPSTATEDATA(StateDelta, FixedPoint, Address, __temp_data32__); \
- \
- gcmUPDATESECUREUSER(); \
- }
- #define gcmSETSTATEDATAWITHMASK(StateDelta, CommandBuffer, Memory, FixedPoint, \
- Address, Mask, Data) \
- { \
- gctUINT32 __temp_data32__; \
- \
- gcmVERIFYLOADSTATE(CommandBuffer, Memory, Address); \
- \
- __temp_data32__ = Data; \
- \
- *Memory++ = __temp_data32__; \
- \
- gcoHARDWARE_UpdateDelta( \
- StateDelta, Address, Mask, __temp_data32__ \
- ); \
- \
- gcmDUMPSTATEDATA(StateDelta, FixedPoint, Address, __temp_data32__); \
- \
- gcmUPDATESECUREUSER(); \
- }
- #define gcmSETCTRLSTATE(StateDelta, CommandBuffer, Memory, Address, Data) \
- { \
- gctUINT32 __temp_data32__; \
- \
- gcmVERIFYLOADSTATE(CommandBuffer, Memory, Address); \
- \
- __temp_data32__ = Data; \
- \
- *Memory++ = __temp_data32__; \
- \
- gcmDUMPSTATEDATA(StateDelta, gcvFALSE, Address, __temp_data32__); \
- \
- gcmSKIPSECUREUSER(); \
- }
- #define gcmSETFILLER(CommandBuffer, Memory) \
- { \
- gcmVERIFYLOADSTATEDONE(CommandBuffer); \
- \
- Memory += 1; \
- \
- gcmSKIPSECUREUSER(); \
- }
- /*----------------------------------------------------------------------------*/
- #define gcmSETSINGLESTATE(StateDelta, CommandBuffer, Memory, FixedPoint, \
- Address, Data) \
- { \
- gcmBEGINSTATEBATCH(CommandBuffer, Memory, FixedPoint, Address, 1); \
- gcmSETSTATEDATA(StateDelta, CommandBuffer, Memory, FixedPoint, \
- Address, Data); \
- gcmENDSTATEBATCH(CommandBuffer, Memory); \
- }
- #define gcmSETSINGLESTATEWITHMASK(StateDelta, CommandBuffer, Memory, FixedPoint, \
- Address, Mask, Data) \
- { \
- gcmBEGINSTATEBATCH(CommandBuffer, Memory, FixedPoint, Address, 1); \
- gcmSETSTATEDATAWITHMASK(StateDelta, CommandBuffer, Memory, FixedPoint, \
- Address, Mask, Data); \
- gcmENDSTATEBATCH(CommandBuffer, Memory); \
- }
- #define gcmSETSINGLECTRLSTATE(StateDelta, CommandBuffer, Memory, FixedPoint, \
- Address, Data) \
- { \
- gcmBEGINSTATEBATCH(CommandBuffer, Memory, FixedPoint, Address, 1); \
- gcmSETCTRLSTATE(StateDelta, CommandBuffer, Memory, Address, Data); \
- gcmENDSTATEBATCH(CommandBuffer, Memory); \
- }
- #define gcmSETSEMASTALLPIPE(StateDelta, CommandBuffer, Memory, Data) \
- { \
- gcmSETSINGLESTATE(StateDelta, CommandBuffer, Memory, gcvFALSE, AQSemaphoreRegAddrs, Data); \
- \
- *Memory++ = gcmSETFIELDVALUE(0, STALL_COMMAND, OPCODE, STALL); \
- \
- *Memory++ = Data; \
- \
- gcmDUMP(gcvNULL, "#[stall 0x%08X 0x%08X]", \
- gcmSETFIELDVALUE(0, AQ_SEMAPHORE, SOURCE, FRONT_END), \
- gcmSETFIELDVALUE(0, AQ_SEMAPHORE, DESTINATION, PIXEL_ENGINE)); \
- \
- gcmSKIPSECUREUSER(); \
- }
- /*******************************************************************************
- **
- ** gcmSETSTARTDECOMMAND
- **
- ** Form a START_DE command.
- **
- ** ARGUMENTS:
- **
- ** Memory Destination memory pointer of gctUINT32_PTR type.
- ** Count Number of the rectangles.
- */
- #define gcmSETSTARTDECOMMAND(Memory, Count) \
- { \
- *Memory++ \
- = gcmSETFIELDVALUE(0, AQ_COMMAND_START_DE_COMMAND, OPCODE, START_DE) \
- | gcmSETFIELD (0, AQ_COMMAND_START_DE_COMMAND, COUNT, Count) \
- | gcmSETFIELD (0, AQ_COMMAND_START_DE_COMMAND, DATA_COUNT, 0); \
- \
- *Memory++ = 0xDEADDEED; \
- }
- /*****************************************
- ** Temp command buffer macro
- */
- #define gcmDEFINESTATEBUFFER_NEW(CommandBuffer, StateDelta, Memory) \
- gcmDEFINESECUREUSER() \
- gcmDEFINELOADSTATEBASE() \
- gcsTEMPCMDBUF CommandBuffer = gcvNULL; \
- gctUINT32_PTR Memory; \
- gcsSTATE_DELTA_PTR StateDelta
- #define gcmBEGINSTATEBUFFER_NEW(Hardware, CommandBuffer, StateDelta, Memory, OutSide) \
- { \
- if (OutSide) \
- {\
- Memory = (gctUINT32_PTR)*OutSide; \
- }\
- else \
- {\
- gcmONERROR(gcoBUFFER_StartTEMPCMDBUF( \
- Hardware->buffer, &CommandBuffer \
- ));\
- \
- Memory = (gctUINT32_PTR)(CommandBuffer->buffer); \
- \
- }\
- StateDelta = Hardware->delta; \
- \
- gcmBEGINSECUREUSER(); \
- gcmSETLOADSTATEBASE(CommandBuffer,OutSide);\
- }
- #define gcmENDSTATEBUFFER_NEW(Hardware, CommandBuffer, Memory, OutSide) \
- { \
- gcmENDSECUREUSER(); \
- \
- if (OutSide) \
- {\
- *OutSide = Memory; \
- }\
- else \
- {\
- CommandBuffer->currentByteSize = (gctUINT32)((gctUINT8_PTR)Memory - \
- (gctUINT8_PTR)CommandBuffer->buffer); \
- \
- gcmONERROR(gcoBUFFER_EndTEMPCMDBUF(Hardware->buffer));\
- }\
- gcmUNSETLOADSTATEBASE()\
- }
- /*----------------------------------------------------------------------------*/
- #define gcmBEGINSTATEBATCH_NEW(CommandBuffer, Memory, FixedPoint, Address, Count) \
- { \
- gcmVERIFYLOADSTATEALIGNED(CommandBuffer,Memory);\
- gcmASSERT((gctUINT32)Count <= 1024); \
- \
- *Memory++ \
- = gcmSETFIELDVALUE(0, AQ_COMMAND_LOAD_STATE_COMMAND, OPCODE, LOAD_STATE) \
- | gcmSETFIELD (0, AQ_COMMAND_LOAD_STATE_COMMAND, FLOAT, FixedPoint) \
- | gcmSETFIELD (0, AQ_COMMAND_LOAD_STATE_COMMAND, COUNT, Count) \
- | gcmSETFIELD (0, AQ_COMMAND_LOAD_STATE_COMMAND, ADDRESS, Address); \
- \
- gcmSKIPSECUREUSER(); \
- }
- #define gcmENDSTATEBATCH_NEW(CommandBuffer, Memory) \
- gcmVERIFYLOADSTATEALIGNED(CommandBuffer,Memory);
- /*----------------------------------------------------------------------------*/
- #define gcmSETSTATEDATA_NEW(StateDelta, CommandBuffer, Memory, FixedPoint, \
- Address, Data) \
- { \
- gctUINT32 __temp_data32__; \
- \
- __temp_data32__ = Data; \
- \
- *Memory++ = __temp_data32__; \
- \
- gcoHARDWARE_UpdateDelta( \
- StateDelta, Address, 0, __temp_data32__ \
- ); \
- \
- gcmDUMPSTATEDATA(StateDelta, FixedPoint, Address, __temp_data32__); \
- \
- gcmUPDATESECUREUSER(); \
- }
- #define gcmSETSTATEDATAWITHMASK_NEW(StateDelta, CommandBuffer, Memory, FixedPoint, \
- Address, Mask, Data) \
- { \
- gctUINT32 __temp_data32__; \
- \
- __temp_data32__ = Data; \
- \
- *Memory++ = __temp_data32__; \
- \
- gcoHARDWARE_UpdateDelta( \
- StateDelta, Address, Mask, __temp_data32__ \
- ); \
- \
- gcmDUMPSTATEDATA(StateDelta, FixedPoint, Address, __temp_data32__); \
- \
- gcmUPDATESECUREUSER(); \
- }
- #define gcmSETCTRLSTATE_NEW(StateDelta, CommandBuffer, Memory, Address, Data) \
- { \
- gctUINT32 __temp_data32__; \
- \
- __temp_data32__ = Data; \
- \
- *Memory++ = __temp_data32__; \
- \
- gcmDUMPSTATEDATA(StateDelta, gcvFALSE, Address, __temp_data32__); \
- \
- gcmSKIPSECUREUSER(); \
- }
- #define gcmSETFILLER_NEW(CommandBuffer, Memory) \
- { \
- Memory += 1; \
- \
- gcmSKIPSECUREUSER(); \
- }
- /*----------------------------------------------------------------------------*/
- #define gcmSETSINGLESTATE_NEW(StateDelta, CommandBuffer, Memory, FixedPoint, \
- Address, Data) \
- { \
- gcmBEGINSTATEBATCH_NEW(CommandBuffer, Memory, FixedPoint, Address, 1); \
- gcmSETSTATEDATA_NEW(StateDelta, CommandBuffer, Memory, FixedPoint, \
- Address, Data); \
- gcmENDSTATEBATCH_NEW(CommandBuffer, Memory); \
- }
- #define gcmSETSINGLESTATEWITHMASK_NEW(StateDelta, CommandBuffer, Memory, FixedPoint, \
- Address, Mask, Data) \
- { \
- gcmBEGINSTATEBATCH_NEW(CommandBuffer, Memory, FixedPoint, Address, 1); \
- gcmSETSTATEDATAWITHMASK_NEW(StateDelta, CommandBuffer, Memory, FixedPoint, \
- Address, Mask, Data); \
- gcmENDSTATEBATCH_NEW(CommandBuffer, Memory); \
- }
- #define gcmSETSINGLECTRLSTATE_NEW(StateDelta, CommandBuffer, Memory, FixedPoint, \
- Address, Data) \
- { \
- gcmBEGINSTATEBATCH_NEW(CommandBuffer, Memory, FixedPoint, Address, 1); \
- gcmSETCTRLSTATE_NEW(StateDelta, CommandBuffer, Memory, Address, Data); \
- gcmENDSTATEBATCH_NEW(CommandBuffer, Memory); \
- }
- #define gcmSETSEMASTALLPIPE_NEW(StateDelta, CommandBuffer, Memory, Data) \
- { \
- gcmSETSINGLESTATE_NEW(StateDelta, CommandBuffer, Memory, gcvFALSE, AQSemaphoreRegAddrs, Data); \
- \
- *Memory++ = gcmSETFIELDVALUE(0, STALL_COMMAND, OPCODE, STALL); \
- \
- *Memory++ = Data; \
- \
- gcmDUMP(gcvNULL, "#[stall 0x%08X 0x%08X]", \
- gcmSETFIELDVALUE(0, AQ_SEMAPHORE, SOURCE, FRONT_END), \
- gcmSETFIELDVALUE(0, AQ_SEMAPHORE, DESTINATION, PIXEL_ENGINE)); \
- \
- gcmSKIPSECUREUSER(); \
- }
- #define gcmSETSTARTDECOMMAND_NEW(CommandBuffer, Memory, Count) \
- { \
- *Memory++ \
- = gcmSETFIELDVALUE(0, AQ_COMMAND_START_DE_COMMAND, OPCODE, START_DE) \
- | gcmSETFIELD (0, AQ_COMMAND_START_DE_COMMAND, COUNT, Count) \
- | gcmSETFIELD (0, AQ_COMMAND_START_DE_COMMAND, DATA_COUNT, 0); \
- \
- *Memory++ = 0xDEADDEED; \
- \
- }
- #define gcmSETSTATEDATA_NEW_FAST(StateDelta, CommandBuffer, Memory, FixedPoint, \
- Address, Data) \
- { \
- gctUINT32 __temp_data32__; \
- \
- __temp_data32__ = Data; \
- \
- *Memory++ = __temp_data32__; \
- \
- gcmDUMPSTATEDATA(StateDelta, FixedPoint, Address, __temp_data32__); \
- \
- gcmUPDATESECUREUSER(); \
- }
- #define gcmSETSTATEDATAWITHMASK_NEW_FAST(StateDelta, CommandBuffer, Memory, FixedPoint, \
- Address, Mask, Data) \
- { \
- gctUINT32 __temp_data32__; \
- \
- __temp_data32__ = Data; \
- \
- *Memory++ = __temp_data32__; \
- \
- gcmDUMPSTATEDATA(StateDelta, FixedPoint, Address, __temp_data32__); \
- \
- gcmUPDATESECUREUSER(); \
- }
- #define gcmSETSINGLESTATE_NEW_FAST(StateDelta, CommandBuffer, Memory, FixedPoint, \
- Address, Data) \
- { \
- gcmBEGINSTATEBATCH_NEW(CommandBuffer, Memory, FixedPoint, Address, 1); \
- gcmSETSTATEDATA_NEW_FAST(StateDelta, CommandBuffer, Memory, FixedPoint, \
- Address, Data); \
- gcmENDSTATEBATCH_NEW(CommandBuffer, Memory); \
- }
- #define gcmSETSINGLESTATEWITHMASK_NEW_FAST(StateDelta, CommandBuffer, Memory, FixedPoint, \
- Address, Mask, Data) \
- { \
- gcmBEGINSTATEBATCH_NEW(CommandBuffer, Memory, FixedPoint, Address, 1); \
- gcmSETSTATEDATAWITHMASK_NEW_FAST(StateDelta, CommandBuffer, Memory, FixedPoint, \
- Address, Mask, Data); \
- gcmENDSTATEBATCH_NEW(CommandBuffer, Memory); \
- }
- #define gcmSETSTATEDATA_FAST(StateDelta, CommandBuffer, Memory, FixedPoint, \
- Address, Data) \
- { \
- gctUINT32 __temp_data32__; \
- \
- gcmVERIFYLOADSTATE(CommandBuffer, Memory, Address); \
- \
- gcmSAFECASTSIZET(__temp_data32__, Data); \
- \
- *Memory++ = __temp_data32__; \
- \
- gcmDUMPSTATEDATA(StateDelta, FixedPoint, Address, __temp_data32__); \
- \
- gcmUPDATESECUREUSER(); \
- }
- #define gcmSETSTATEDATAWITHMASK_FAST(StateDelta, CommandBuffer, Memory, FixedPoint, \
- Address, Mask, Data) \
- { \
- gctUINT32 __temp_data32__; \
- \
- gcmVERIFYLOADSTATE(CommandBuffer, Memory, Address); \
- \
- __temp_data32__ = Data; \
- \
- *Memory++ = __temp_data32__; \
- \
- gcmDUMPSTATEDATA(StateDelta, FixedPoint, Address, __temp_data32__); \
- \
- gcmUPDATESECUREUSER(); \
- }
- #define gcmSETSINGLESTATE_FAST(StateDelta, CommandBuffer, Memory, FixedPoint, \
- Address, Data) \
- { \
- gcmBEGINSTATEBATCH(CommandBuffer, Memory, FixedPoint, Address, 1); \
- gcmSETSTATEDATA_FAST(StateDelta, CommandBuffer, Memory, FixedPoint, \
- Address, Data); \
- gcmENDSTATEBATCH(CommandBuffer, Memory); \
- }
- #define gcmSETSINGLESTATEWITHMASK_FAST(StateDelta, CommandBuffer, Memory, FixedPoint, \
- Address, Mask, Data) \
- { \
- gcmBEGINSTATEBATCH(CommandBuffer, Memory, FixedPoint, Address, 1); \
- gcmSETSTATEDATAWITHMASK_FAST(StateDelta, CommandBuffer, Memory, FixedPoint, \
- Address, Mask, Data); \
- gcmENDSTATEBATCH(CommandBuffer, Memory); \
- }
- #define gcmDEFINESTATEBUFFER_NEW_FAST(CommandBuffer, Memory) \
- gcmDEFINESECUREUSER() \
- gcmDEFINELOADSTATEBASE() \
- gcsTEMPCMDBUF CommandBuffer = gcvNULL; \
- gctUINT32_PTR Memory;
- #define gcmDEFINESTATEBUFFER_FAST(CommandBuffer, Memory, ReserveSize) \
- gcmDEFINESECUREUSER() \
- gctSIZE_T ReserveSize; \
- gcoCMDBUF CommandBuffer; \
- gctUINT32_PTR Memory;
- #define gcmBEGINSTATEBUFFER_FAST(Hardware, CommandBuffer, Memory, ReserveSize) \
- { \
- gcmONERROR(gcoBUFFER_Reserve( \
- Hardware->buffer, ReserveSize, gcvTRUE, &CommandBuffer \
- )); \
- \
- Memory = (gctUINT32_PTR) gcmUINT64_TO_PTR(CommandBuffer->lastReserve); \
- \
- gcmBEGINSECUREUSER(); \
- }
- #define gcmBEGINSTATEBUFFER_NEW_FAST(Hardware, CommandBuffer, Memory, OutSide) \
- { \
- if (OutSide) \
- {\
- Memory = (gctUINT32_PTR)*OutSide; \
- }\
- else \
- {\
- gcmONERROR(gcoBUFFER_StartTEMPCMDBUF( \
- Hardware->buffer, &CommandBuffer \
- ));\
- \
- Memory = (gctUINT32_PTR)(CommandBuffer->buffer); \
- \
- }\
- \
- gcmBEGINSECUREUSER(); \
- gcmSETLOADSTATEBASE(CommandBuffer,OutSide);\
- }
- /*******************************************************************************
- **
- ** gcmCONFIGUREUNIFORMS
- **
- ** Configure uniforms according to chip and numConstants.
- */
- #if !gcdENABLE_UNIFIED_CONSTANT
- #define gcmCONFIGUREUNIFORMS(ChipModel, ChipRevision, NumConstants, \
- UnifiedConst, VsConstBase, PsConstBase, VsConstMax, PsConstMax, ConstMax) \
- { \
- if (ChipModel == gcv2000 && ChipRevision == 0x5118) \
- { \
- UnifiedConst = gcvFALSE; \
- VsConstBase = AQVertexShaderConstRegAddrs; \
- PsConstBase = AQPixelShaderConstRegAddrs; \
- VsConstMax = 256; \
- PsConstMax = 64; \
- ConstMax = 320; \
- } \
- else if (NumConstants == 320) \
- { \
- UnifiedConst = gcvFALSE; \
- VsConstBase = AQVertexShaderConstRegAddrs; \
- PsConstBase = AQPixelShaderConstRegAddrs; \
- VsConstMax = 256; \
- PsConstMax = 64; \
- ConstMax = 320; \
- } \
- /* All GC1000 series chips can only support 64 uniforms for ps on non-unified const mode. */ \
- else if (NumConstants > 256 && ChipModel == gcv1000) \
- { \
- UnifiedConst = gcvFALSE; \
- VsConstBase = AQVertexShaderConstRegAddrs; \
- PsConstBase = AQPixelShaderConstRegAddrs; \
- VsConstMax = 256; \
- PsConstMax = 64; \
- ConstMax = 320; \
- } \
- else if (NumConstants > 256) \
- { \
- UnifiedConst = gcvFALSE; \
- VsConstBase = AQVertexShaderConstRegAddrs; \
- PsConstBase = AQPixelShaderConstRegAddrs; \
- VsConstMax = 256; \
- PsConstMax = 256; \
- ConstMax = 512; \
- } \
- else if (NumConstants == 256) \
- { \
- UnifiedConst = gcvFALSE; \
- VsConstBase = AQVertexShaderConstRegAddrs; \
- PsConstBase = AQPixelShaderConstRegAddrs; \
- VsConstMax = 256; \
- PsConstMax = 256; \
- ConstMax = 512; \
- } \
- else \
- { \
- UnifiedConst = gcvFALSE; \
- VsConstBase = AQVertexShaderConstRegAddrs; \
- PsConstBase = AQPixelShaderConstRegAddrs; \
- VsConstMax = 168; \
- PsConstMax = 64; \
- ConstMax = 232; \
- } \
- }
- #else
- #define gcmCONFIGUREUNIFORMS(ChipModel, ChipRevision, NumConstants, \
- UnifiedConst, VsConstBase, PsConstBase, VsConstMax, PsConstMax, ConstMax) \
- { \
- if (NumConstants > 256) \
- { \
- UnifiedConst = gcvTRUE; \
- VsConstBase = gcregSHUniformsRegAddrs; \
- PsConstBase = gcregSHUniformsRegAddrs; \
- VsConstMax = gcmMIN(512, NumConstants - 64); \
- PsConstMax = gcmMIN(512, NumConstants - 64); \
- ConstMax = NumConstants; \
- } \
- else if (NumConstants == 256) \
- { \
- if (ChipModel == gcv2000 && ChipRevision == 0x5118) \
- { \
- UnifiedConst = gcvFALSE; \
- VsConstBase = AQVertexShaderConstRegAddrs; \
- PsConstBase = AQPixelShaderConstRegAddrs; \
- VsConstMax = 256; \
- PsConstMax = 64; \
- ConstMax = 320; \
- } \
- else \
- { \
- UnifiedConst = gcvFALSE; \
- VsConstBase = AQVertexShaderConstRegAddrs; \
- PsConstBase = AQPixelShaderConstRegAddrs; \
- VsConstMax = 256; \
- PsConstMax = 256; \
- ConstMax = 512; \
- } \
- } \
- else \
- { \
- UnifiedConst = gcvFALSE; \
- VsConstBase = AQVertexShaderConstRegAddrs; \
- PsConstBase = AQPixelShaderConstRegAddrs; \
- VsConstMax = 168; \
- PsConstMax = 64; \
- ConstMax = 232; \
- } \
- }
- #endif
- #ifdef __cplusplus
- }
- #endif
- #endif /* __gc_hal_base_h_ */
|