gc_hal_base.h 130 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530
  1. /****************************************************************************
  2. *
  3. * Copyright (c) 2005 - 2014 by Vivante Corp. All rights reserved.
  4. *
  5. * The material in this file is confidential and contains trade secrets
  6. * of Vivante Corporation. This is proprietary information owned by
  7. * Vivante Corporation. No part of this work may be disclosed,
  8. * reproduced, copied, transmitted, or used in any way for any purpose,
  9. * without the express written permission of Vivante Corporation.
  10. *
  11. *****************************************************************************/
  12. #ifndef __gc_hal_base_h_
  13. #define __gc_hal_base_h_
  14. #include "gc_hal_enum.h"
  15. #include "gc_hal_types.h"
  16. #include "gc_hal_dump.h"
  17. #ifdef __cplusplus
  18. extern "C" {
  19. #endif
  20. /******************************************************************************\
  21. ****************************** Object Declarations *****************************
  22. \******************************************************************************/
  23. typedef struct _gckOS * gckOS;
  24. typedef struct _gcoHAL * gcoHAL;
  25. typedef struct _gcoOS * gcoOS;
  26. typedef struct _gco2D * gco2D;
  27. typedef struct gcsATOM * gcsATOM_PTR;
  28. #if gcdENABLE_3D
  29. typedef struct _gco3D * gco3D;
  30. typedef struct _gcoCL * gcoCL;
  31. typedef struct _gcsFAST_FLUSH * gcsFAST_FLUSH_PTR;
  32. #endif
  33. typedef struct _gcoSURF * gcoSURF;
  34. typedef struct _gcsSURF_INFO * gcsSURF_INFO_PTR;
  35. typedef struct _gcsSURF_NODE * gcsSURF_NODE_PTR;
  36. typedef struct _gcsSURF_FORMAT_INFO * gcsSURF_FORMAT_INFO_PTR;
  37. typedef struct _gcsPOINT * gcsPOINT_PTR;
  38. typedef struct _gcsSIZE * gcsSIZE_PTR;
  39. typedef struct _gcsRECT * gcsRECT_PTR;
  40. typedef struct _gcsBOUNDARY * gcsBOUNDARY_PTR;
  41. typedef struct _gcoDUMP * gcoDUMP;
  42. typedef struct _gcoHARDWARE * gcoHARDWARE;
  43. typedef union _gcuVIDMEM_NODE * gcuVIDMEM_NODE_PTR;
  44. typedef struct _gcsVIDMEM_NODE * gckVIDMEM_NODE;
  45. #if gcdENABLE_VG
  46. typedef struct _gcoVG * gcoVG;
  47. typedef struct _gcsCOMPLETION_SIGNAL * gcsCOMPLETION_SIGNAL_PTR;
  48. typedef struct _gcsCONTEXT_MAP * gcsCONTEXT_MAP_PTR;
  49. #else
  50. typedef void * gcoVG;
  51. #endif
  52. #if gcdSYNC
  53. typedef struct _gcoFENCE * gcoFENCE;
  54. typedef struct _gcsSYNC_CONTEXT * gcsSYNC_CONTEXT_PTR;
  55. #endif
  56. /******************************************************************************\
  57. ********************* Share obj lock/unlock macros. ****************************
  58. \******************************************************************************/
  59. #define gcmLOCK_SHARE_OBJ(Obj) \
  60. { \
  61. if(Obj->sharedLock != gcvNULL)\
  62. {\
  63. (gcoOS_AcquireMutex( \
  64. gcvNULL, Obj->sharedLock, gcvINFINITE));\
  65. }\
  66. }
  67. #define gcmUNLOCK_SHARE_OBJ(Obj)\
  68. {\
  69. if(Obj->sharedLock != gcvNULL)\
  70. {\
  71. (gcoOS_ReleaseMutex(gcvNULL, Obj->sharedLock));\
  72. }\
  73. }
  74. #if defined(ANDROID)
  75. typedef struct _gcoOS_SymbolsList gcoOS_SymbolsList;
  76. #endif
  77. /******************************************************************************\
  78. ******************************* Process local storage *************************
  79. \******************************************************************************/
  80. typedef struct _gcsPLS * gcsPLS_PTR;
  81. #if gcdENABLE_3D
  82. /******************************************************************************
  83. **
  84. ** Patch defines which should be moved to dedicate file later
  85. **
  86. ** !!! ALWAYS ADD new ID in the TAIL, otherwise will break exising TRACE FILE
  87. *******************************************************************************/
  88. typedef enum _gcePATCH_ID
  89. {
  90. gcvPATCH_NOTINIT = -1,
  91. gcvPATCH_INVALID = 0,
  92. #if gcdDEBUG_OPTION
  93. gcvPATCH_DEBUG,
  94. #endif
  95. gcvPATCH_GTFES30,
  96. gcvPATCH_CTGL11,
  97. gcvPATCH_CTGL20,
  98. gcvPATCH_GLBM11,
  99. gcvPATCH_GLBM21,
  100. gcvPATCH_GLBM25,
  101. gcvPATCH_GLBM27,
  102. gcvPATCH_GLBMGUI,
  103. gcvPATCH_GFXBENCH,
  104. gcvPATCH_ANTUTU, /* Antutu 3.x */
  105. gcvPATCH_ANTUTU4X, /* Antutu 4.x */
  106. gcvPATCH_QUADRANT,
  107. gcvPATCH_GPUBENCH,
  108. gcvPATCH_DUOKAN,
  109. gcvPATCH_GLOFTSXHM,
  110. gcvPATCH_XRUNNER,
  111. gcvPATCH_BUSPARKING3D,
  112. gcvPATCH_SIEGECRAFT,
  113. gcvPATCH_PREMIUM,
  114. gcvPATCH_RACEILLEGAL,
  115. gcvPATCH_MEGARUN,
  116. gcvPATCH_BMGUI,
  117. gcvPATCH_NENAMARK,
  118. gcvPATCH_NENAMARK2,
  119. gcvPATCH_FISHNOODLE,
  120. gcvPATCH_MM06,
  121. gcvPATCH_MM07,
  122. gcvPATCH_BM21,
  123. gcvPATCH_SMARTBENCH,
  124. gcvPATCH_JPCT,
  125. gcvPATCH_NEOCORE,
  126. gcvPATCH_RTESTVA,
  127. gcvPATCH_NBA2013,
  128. gcvPATCH_BARDTALE,
  129. gcvPATCH_F18,
  130. gcvPATCH_CARPARK,
  131. gcvPATCH_CARCHALLENGE,
  132. gcvPATCH_HEROESCALL,
  133. gcvPATCH_GLOFTF3HM,
  134. gcvPATCH_CRAZYRACING,
  135. gcvPATCH_FIREFOX,
  136. gcvPATCH_CHROME,
  137. gcvPATCH_MONOPOLY,
  138. gcvPATCH_SNOWCOLD,
  139. gcvPATCH_BM3,
  140. gcvPATCH_BASEMARKX,
  141. gcvPATCH_DEQP,
  142. gcvPATCH_SF4,
  143. gcePATCH_MGOHEAVEN2,
  144. gcePATCH_SILIBILI,
  145. gcePATCH_ELEMENTSDEF,
  146. gcePATCH_GLOFTKRHM,
  147. gcvPATCH_OCLCTS,
  148. gcvPATCH_A8HP,
  149. gcvPATCH_A8CN,
  150. gcvPATCH_WISTONESG,
  151. gcvPATCH_SPEEDRACE,
  152. gcvPATCH_FSBHAWAIIF,
  153. gcvPATCH_AIRNAVY,
  154. gcvPATCH_F18NEW,
  155. gcvPATCH_CKZOMBIES2,
  156. gcvPATCH_EADGKEEPER,
  157. gcvPATCH_BASEMARK2V2,
  158. gcvPATCH_RIPTIDEGP2,
  159. gcvPATCH_OESCTS,
  160. gcvPATCH_GANGSTAR,
  161. gcvPATCH_WHRKYZIXOVAN,
  162. gcvPATCH_NAMESGAS,
  163. gcvPATCH_AFTERBURNER,
  164. gcvPATCH_UIMARK,
  165. gcvPATCH_FM_OES_PLAYER,
  166. gcvPATCH_SUMSUNG_BENCH,
  167. gcvPATCH_ROCKSTAR_MAXPAYNE,
  168. gcvPATCH_TITANPACKING,
  169. gcvPATCH_OES20SFT,
  170. gcvPATCH_OES30SFT,
  171. gcvPATCH_BASEMARKOSIICN,
  172. gcvPATCH_FRUITNINJA,
  173. #if defined(ANDROID)
  174. gcePATCH_ANDROID_CTS_MEDIA_PRESENTATIONTIME,
  175. #endif
  176. gcvPATCH_ANDROID_COMPOSITOR,
  177. gcvPATCH_CTS_TEXTUREVIEW,
  178. gcvPATCH_WATER2_CHUKONG,
  179. gcvPATCH_COUNT
  180. } gcePATCH_ID;
  181. #endif /* gcdENABLE_3D */
  182. typedef void (* gctPLS_DESTRUCTOR) (
  183. gcsPLS_PTR
  184. );
  185. typedef struct _gcsPLS
  186. {
  187. /* Global objects. */
  188. gcoOS os;
  189. gcoHAL hal;
  190. /* Internal memory pool. */
  191. gctSIZE_T internalSize;
  192. gctPHYS_ADDR internalPhysical;
  193. gctPOINTER internalLogical;
  194. /* External memory pool. */
  195. gctSIZE_T externalSize;
  196. gctPHYS_ADDR externalPhysical;
  197. gctPOINTER externalLogical;
  198. /* Contiguous memory pool. */
  199. gctSIZE_T contiguousSize;
  200. gctPHYS_ADDR contiguousPhysical;
  201. gctPOINTER contiguousLogical;
  202. /* EGL-specific process-wide objects. */
  203. gctPOINTER eglDisplayInfo;
  204. gctPOINTER eglSurfaceInfo;
  205. gceSURF_FORMAT eglConfigFormat;
  206. /* PLS reference count */
  207. gcsATOM_PTR reference;
  208. /* PorcessID of the constrcutor process */
  209. gctUINT32 processID;
  210. /* ThreadID of the constrcutor process. */
  211. gctSIZE_T threadID;
  212. /* Flag for calling module destructor. */
  213. gctBOOL exiting;
  214. gctBOOL bNeedSupportNP2Texture;
  215. gctPLS_DESTRUCTOR destructor;
  216. /* Mutex to guard PLS access. currently it's for EGL.
  217. ** We can use this mutex for every PLS access.
  218. */
  219. gctPOINTER accessLock;
  220. #if gcdENABLE_3D
  221. /* Global patchID to overwrite the detection */
  222. gcePATCH_ID patchID;
  223. #endif
  224. }
  225. gcsPLS;
  226. extern gcsPLS gcPLS;
  227. #if gcdENABLE_3D
  228. #define gcPLS_INITIALIZER \
  229. { \
  230. gcvNULL, /* gcoOS object. */ \
  231. gcvNULL, /* gcoHAL object. */ \
  232. 0, /* internalSize */ \
  233. gcvNULL, /* internalPhysical */ \
  234. gcvNULL, /* internalLogical */ \
  235. 0, /* externalSize */ \
  236. gcvNULL, /* externalPhysical */ \
  237. gcvNULL, /* externalLogical */ \
  238. 0, /* contiguousSize */ \
  239. gcvNULL, /* contiguousPhysical */ \
  240. gcvNULL, /* contiguousLogical */ \
  241. gcvNULL, /* eglDisplayInfo */ \
  242. gcvNULL, /* eglSurfaceInfo */ \
  243. gcvSURF_A8R8G8B8,/* eglConfigFormat */ \
  244. gcvNULL, /* reference */ \
  245. 0, /* processID */ \
  246. 0, /* threadID */ \
  247. gcvFALSE, /* exiting */ \
  248. gcvFALSE, /* Special flag for NP2 texture. */ \
  249. gcvNULL, /* destructor */ \
  250. gcvNULL, /* accessLock */ \
  251. gcvPATCH_NOTINIT,/* global patchID */ \
  252. }
  253. #else
  254. #define gcPLS_INITIALIZER \
  255. { \
  256. gcvNULL, /* gcoOS object. */ \
  257. gcvNULL, /* gcoHAL object. */ \
  258. 0, /* internalSize */ \
  259. gcvNULL, /* internalPhysical */ \
  260. gcvNULL, /* internalLogical */ \
  261. 0, /* externalSize */ \
  262. gcvNULL, /* externalPhysical */ \
  263. gcvNULL, /* externalLogical */ \
  264. 0, /* contiguousSize */ \
  265. gcvNULL, /* contiguousPhysical */ \
  266. gcvNULL, /* contiguousLogical */ \
  267. gcvNULL, /* eglDisplayInfo */ \
  268. gcvNULL, /* eglSurfaceInfo */ \
  269. gcvSURF_A8R8G8B8,/* eglConfigFormat */ \
  270. gcvNULL, /* reference */ \
  271. 0, /* processID */ \
  272. 0, /* threadID */ \
  273. gcvFALSE, /* exiting */ \
  274. gcvFALSE, /* Special flag for NP2 texture. */ \
  275. gcvNULL, /* destructor */ \
  276. gcvNULL, /* accessLock */ \
  277. }
  278. #endif
  279. /******************************************************************************\
  280. ******************************* Thread local storage *************************
  281. \******************************************************************************/
  282. typedef struct _gcsTLS * gcsTLS_PTR;
  283. typedef void (* gctTLS_DESTRUCTOR) (
  284. gcsTLS_PTR
  285. );
  286. typedef struct _gcsTLS
  287. {
  288. gceHARDWARE_TYPE currentType;
  289. /* Current 3D hardwre of this thread */
  290. gcoHARDWARE currentHardware;
  291. /* Default 3D hardware of this thread */
  292. gcoHARDWARE defaultHardware;
  293. /* Only for separated 3D and 2D */
  294. gcoHARDWARE hardware2D;
  295. #if gcdENABLE_VG
  296. gcoVGHARDWARE vg;
  297. gcoVG engineVG;
  298. #endif /* gcdENABLE_VG */
  299. #if gcdENABLE_3D
  300. gco3D engine3D;
  301. #endif
  302. #if gcdENABLE_2D
  303. gco2D engine2D;
  304. #endif
  305. /*thread data */
  306. gctPOINTER context;
  307. /* ES(including es1 and es2) client driver context which is current state */
  308. gctPOINTER esClientCtx;
  309. gctTLS_DESTRUCTOR destructor;
  310. gctBOOL copied;
  311. /* libGAL.so handle */
  312. gctHANDLE handle;
  313. /* If true, do not releas 2d engine and hardware in hal layer */
  314. gctBOOL release2DUpper;
  315. }
  316. gcsTLS;
  317. /******************************************************************************\
  318. ********************************* Enumerations *********************************
  319. \******************************************************************************/
  320. typedef enum _gcePLS_VALUE
  321. {
  322. gcePLS_VALUE_EGL_DISPLAY_INFO,
  323. gcePLS_VALUE_EGL_SURFACE_INFO,
  324. gcePLS_VALUE_EGL_CONFIG_FORMAT_INFO,
  325. gcePLS_VALUE_EGL_DESTRUCTOR_INFO,
  326. }
  327. gcePLS_VALUE;
  328. /* Video memory pool type. */
  329. typedef enum _gcePOOL
  330. {
  331. gcvPOOL_UNKNOWN = 0,
  332. gcvPOOL_DEFAULT,
  333. gcvPOOL_LOCAL,
  334. gcvPOOL_LOCAL_INTERNAL,
  335. gcvPOOL_LOCAL_EXTERNAL,
  336. gcvPOOL_UNIFIED,
  337. gcvPOOL_SYSTEM,
  338. gcvPOOL_VIRTUAL,
  339. gcvPOOL_USER,
  340. gcvPOOL_CONTIGUOUS,
  341. gcvPOOL_NUMBER_OF_POOLS
  342. }
  343. gcePOOL;
  344. #if gcdENABLE_3D
  345. /* Blending functions. */
  346. typedef enum _gceBLEND_FUNCTION
  347. {
  348. gcvBLEND_ZERO,
  349. gcvBLEND_ONE,
  350. gcvBLEND_SOURCE_COLOR,
  351. gcvBLEND_INV_SOURCE_COLOR,
  352. gcvBLEND_SOURCE_ALPHA,
  353. gcvBLEND_INV_SOURCE_ALPHA,
  354. gcvBLEND_TARGET_COLOR,
  355. gcvBLEND_INV_TARGET_COLOR,
  356. gcvBLEND_TARGET_ALPHA,
  357. gcvBLEND_INV_TARGET_ALPHA,
  358. gcvBLEND_SOURCE_ALPHA_SATURATE,
  359. gcvBLEND_CONST_COLOR,
  360. gcvBLEND_INV_CONST_COLOR,
  361. gcvBLEND_CONST_ALPHA,
  362. gcvBLEND_INV_CONST_ALPHA,
  363. }
  364. gceBLEND_FUNCTION;
  365. /* Blending modes. */
  366. typedef enum _gceBLEND_MODE
  367. {
  368. gcvBLEND_ADD,
  369. gcvBLEND_SUBTRACT,
  370. gcvBLEND_REVERSE_SUBTRACT,
  371. gcvBLEND_MIN,
  372. gcvBLEND_MAX,
  373. }
  374. gceBLEND_MODE;
  375. /* Depth modes. */
  376. typedef enum _gceDEPTH_MODE
  377. {
  378. gcvDEPTH_NONE,
  379. gcvDEPTH_Z,
  380. gcvDEPTH_W,
  381. }
  382. gceDEPTH_MODE;
  383. #endif /* gcdENABLE_3D */
  384. #if (gcdENABLE_3D || gcdENABLE_VG)
  385. /* API flags. */
  386. typedef enum _gceAPI
  387. {
  388. gcvAPI_D3D = 1,
  389. gcvAPI_OPENGL_ES11,
  390. gcvAPI_OPENGL_ES20,
  391. gcvAPI_OPENGL_ES30,
  392. gcvAPI_OPENGL,
  393. gcvAPI_OPENVG,
  394. gcvAPI_OPENCL,
  395. }
  396. gceAPI;
  397. #endif
  398. typedef enum _gceWHERE
  399. {
  400. gcvWHERE_COMMAND,
  401. gcvWHERE_RASTER,
  402. gcvWHERE_PIXEL,
  403. }
  404. gceWHERE;
  405. typedef enum _gceHOW
  406. {
  407. gcvHOW_SEMAPHORE = 0x1,
  408. gcvHOW_STALL = 0x2,
  409. gcvHOW_SEMAPHORE_STALL = 0x3,
  410. }
  411. gceHOW;
  412. typedef enum _gceSignalHandlerType
  413. {
  414. gcvHANDLE_SIGFPE_WHEN_SIGNAL_CODE_IS_0 = 0x1,
  415. }
  416. gceSignalHandlerType;
  417. /* gcsHAL_Limits*/
  418. typedef struct _gcsHAL_LIMITS
  419. {
  420. /* chip info */
  421. gceCHIPMODEL chipModel;
  422. gctUINT32 chipRevision;
  423. gctUINT32 featureCount;
  424. gctUINT32 *chipFeatures;
  425. /* target caps */
  426. gctUINT32 maxWidth;
  427. gctUINT32 maxHeight;
  428. gctUINT32 multiTargetCount;
  429. gctUINT32 maxSamples;
  430. }gcsHAL_LIMITS;
  431. /******************************************************************************\
  432. *********** Generic Memory Allocation Optimization Using Containers ************
  433. \******************************************************************************/
  434. /* Generic container definition. */
  435. typedef struct _gcsCONTAINER_LINK * gcsCONTAINER_LINK_PTR;
  436. typedef struct _gcsCONTAINER_LINK
  437. {
  438. /* Points to the next container. */
  439. gcsCONTAINER_LINK_PTR next;
  440. }
  441. gcsCONTAINER_LINK;
  442. typedef struct _gcsCONTAINER_RECORD * gcsCONTAINER_RECORD_PTR;
  443. typedef struct _gcsCONTAINER_RECORD
  444. {
  445. gcsCONTAINER_RECORD_PTR prev;
  446. gcsCONTAINER_RECORD_PTR next;
  447. }
  448. gcsCONTAINER_RECORD;
  449. typedef struct _gcsCONTAINER * gcsCONTAINER_PTR;
  450. typedef struct _gcsCONTAINER
  451. {
  452. gctUINT containerSize;
  453. gctUINT recordSize;
  454. gctUINT recordCount;
  455. gcsCONTAINER_LINK_PTR containers;
  456. gcsCONTAINER_RECORD freeList;
  457. gcsCONTAINER_RECORD allocList;
  458. }
  459. gcsCONTAINER;
  460. gceSTATUS
  461. gcsCONTAINER_Construct(
  462. IN gcsCONTAINER_PTR Container,
  463. gctUINT RecordsPerContainer,
  464. gctUINT RecordSize
  465. );
  466. gceSTATUS
  467. gcsCONTAINER_Destroy(
  468. IN gcsCONTAINER_PTR Container
  469. );
  470. gceSTATUS
  471. gcsCONTAINER_AllocateRecord(
  472. IN gcsCONTAINER_PTR Container,
  473. OUT gctPOINTER * Record
  474. );
  475. gceSTATUS
  476. gcsCONTAINER_FreeRecord(
  477. IN gcsCONTAINER_PTR Container,
  478. IN gctPOINTER Record
  479. );
  480. gceSTATUS
  481. gcsCONTAINER_FreeAll(
  482. IN gcsCONTAINER_PTR Container
  483. );
  484. /******************************************************************************\
  485. ********************************* gcoHAL Object *********************************
  486. \******************************************************************************/
  487. /* Construct a new gcoHAL object. */
  488. gceSTATUS
  489. gcoHAL_ConstructEx(
  490. IN gctPOINTER Context,
  491. IN gcoOS Os,
  492. OUT gcoHAL * Hal
  493. );
  494. /* Destroy an gcoHAL object. */
  495. gceSTATUS
  496. gcoHAL_DestroyEx(
  497. IN gcoHAL Hal
  498. );
  499. /* Empty function for compatibility. */
  500. gceSTATUS
  501. gcoHAL_Construct(
  502. IN gctPOINTER Context,
  503. IN gcoOS Os,
  504. OUT gcoHAL * Hal
  505. );
  506. /* Empty function for compatibility. */
  507. gceSTATUS
  508. gcoHAL_Destroy(
  509. IN gcoHAL Hal
  510. );
  511. /* Get HAL options */
  512. gceSTATUS
  513. gcoHAL_GetOption(
  514. IN gcoHAL Hal,
  515. IN gceOPTION Option
  516. );
  517. gceSTATUS
  518. gcoHAL_FrameInfoOps(
  519. IN gcoHAL Hal,
  520. IN gceFRAMEINFO FrameInfo,
  521. IN gceFRAMEINFO_OP Op,
  522. IN OUT gctUINT * Val
  523. );
  524. gceSTATUS
  525. gcoHAL_GetHardware(
  526. IN gcoHAL Hal,
  527. OUT gcoHARDWARE* Hw
  528. );
  529. #if gcdENABLE_2D
  530. /* Get pointer to gco2D object. */
  531. gceSTATUS
  532. gcoHAL_Get2DEngine(
  533. IN gcoHAL Hal,
  534. OUT gco2D * Engine
  535. );
  536. #endif
  537. #if gcdENABLE_3D
  538. gceSTATUS
  539. gcoHAL_GetSpecialHintData(
  540. IN gcoHAL Hal,
  541. OUT gctINT * Hint
  542. );
  543. /*
  544. ** Deprecated(Don't use it), keep it here for external library(libgcu.so)
  545. */
  546. gceSTATUS
  547. gcoHAL_Get3DEngine(
  548. IN gcoHAL Hal,
  549. OUT gco3D * Engine
  550. );
  551. #endif /* gcdEANBLE_3D */
  552. gceSTATUS
  553. gcoHAL_GetProductName(
  554. IN gcoHAL Hal,
  555. OUT gctSTRING *ProductName
  556. );
  557. gceSTATUS
  558. gcoHAL_SetFscaleValue(
  559. IN gctUINT FscaleValue
  560. );
  561. gceSTATUS
  562. gcoHAL_GetFscaleValue(
  563. OUT gctUINT * FscaleValue,
  564. OUT gctUINT * MinFscaleValue,
  565. OUT gctUINT * MaxFscaleValue
  566. );
  567. gceSTATUS
  568. gcoHAL_SetBltNP2Texture(
  569. gctBOOL enable
  570. );
  571. gceSTATUS
  572. gcoHAL_NameVideoMemory(
  573. IN gctUINT32 Handle,
  574. OUT gctUINT32 * Name
  575. );
  576. gceSTATUS
  577. gcoHAL_ImportVideoMemory(
  578. IN gctUINT32 Name,
  579. OUT gctUINT32 * Handle
  580. );
  581. gceSTATUS
  582. gcoHAL_GetVideoMemoryFd(
  583. IN gctUINT32 Handle,
  584. OUT gctINT * Fd
  585. );
  586. /* Verify whether the specified feature is available in hardware. */
  587. gceSTATUS
  588. gcoHAL_IsFeatureAvailable(
  589. IN gcoHAL Hal,
  590. IN gceFEATURE Feature
  591. );
  592. gceSTATUS
  593. gcoHAL_IsSwwaNeeded(
  594. IN gcoHAL Hal,
  595. IN gceSWWA Swwa
  596. );
  597. gceSTATUS
  598. gcoHAL_IsFeatureAvailable1(
  599. IN gcoHAL Hal,
  600. IN gceFEATURE Feature
  601. );
  602. /* Query the identity of the hardware. */
  603. gceSTATUS
  604. gcoHAL_QueryChipIdentity(
  605. IN gcoHAL Hal,
  606. OUT gceCHIPMODEL* ChipModel,
  607. OUT gctUINT32* ChipRevision,
  608. OUT gctUINT32* ChipFeatures,
  609. OUT gctUINT32* ChipMinorFeatures
  610. );
  611. /* Query the minor features of the hardware. */
  612. gceSTATUS gcoHAL_QueryChipMinorFeatures(
  613. IN gcoHAL Hal,
  614. OUT gctUINT32* NumFeatures,
  615. OUT gctUINT32* ChipMinorFeatures
  616. );
  617. gctINT32
  618. gcoOS_EndRecordAllocation(void);
  619. void
  620. gcoOS_RecordAllocation(void);
  621. void
  622. gcoOS_AddRecordAllocation(gctSIZE_T Size);
  623. /* Query the amount of video memory. */
  624. gceSTATUS
  625. gcoHAL_QueryVideoMemory(
  626. IN gcoHAL Hal,
  627. OUT gctPHYS_ADDR * InternalAddress,
  628. OUT gctSIZE_T * InternalSize,
  629. OUT gctPHYS_ADDR * ExternalAddress,
  630. OUT gctSIZE_T * ExternalSize,
  631. OUT gctPHYS_ADDR * ContiguousAddress,
  632. OUT gctSIZE_T * ContiguousSize
  633. );
  634. /* Map video memory. */
  635. gceSTATUS
  636. gcoHAL_MapMemory(
  637. IN gcoHAL Hal,
  638. IN gctPHYS_ADDR Physical,
  639. IN gctSIZE_T NumberOfBytes,
  640. OUT gctPOINTER * Logical
  641. );
  642. /* Unmap video memory. */
  643. gceSTATUS
  644. gcoHAL_UnmapMemory(
  645. IN gcoHAL Hal,
  646. IN gctPHYS_ADDR Physical,
  647. IN gctSIZE_T NumberOfBytes,
  648. IN gctPOINTER Logical
  649. );
  650. /* Schedule an unmap of a buffer mapped through its physical address. */
  651. gceSTATUS
  652. gcoHAL_ScheduleUnmapMemory(
  653. IN gcoHAL Hal,
  654. IN gctPHYS_ADDR Physical,
  655. IN gctSIZE_T NumberOfBytes,
  656. IN gctPOINTER Logical
  657. );
  658. /* Allocate video memory. */
  659. gceSTATUS
  660. gcoOS_AllocateVideoMemory(
  661. IN gcoOS Os,
  662. IN gctBOOL InUserSpace,
  663. IN gctBOOL InCacheable,
  664. IN OUT gctSIZE_T * Bytes,
  665. OUT gctUINT32 * Physical,
  666. OUT gctPOINTER * Logical,
  667. OUT gctPOINTER * Handle
  668. );
  669. /* Free video memory. */
  670. gceSTATUS
  671. gcoOS_FreeVideoMemory(
  672. IN gcoOS Os,
  673. IN gctPOINTER Handle
  674. );
  675. /* Lock video memory. */
  676. gceSTATUS
  677. gcoOS_LockVideoMemory(
  678. IN gcoOS Os,
  679. IN gctPOINTER Handle,
  680. IN gctBOOL InUserSpace,
  681. IN gctBOOL InCacheable,
  682. OUT gctUINT32 * Physical,
  683. OUT gctPOINTER * Logical
  684. );
  685. /* Map user memory. */
  686. gceSTATUS
  687. gcoHAL_MapUserMemory(
  688. IN gctPOINTER Logical,
  689. IN gctUINT32 Physical,
  690. IN gctSIZE_T Size,
  691. OUT gctPOINTER * Info,
  692. OUT gctUINT32_PTR GPUAddress
  693. );
  694. /* Unmap user memory. */
  695. gceSTATUS
  696. gcoHAL_UnmapUserMemory(
  697. IN gctPOINTER Logical,
  698. IN gctSIZE_T Size,
  699. IN gctPOINTER Info,
  700. IN gctUINT32 GPUAddress
  701. );
  702. /* Schedule an unmap of a user buffer using event mechanism. */
  703. gceSTATUS
  704. gcoHAL_ScheduleUnmapUserMemory(
  705. IN gcoHAL Hal,
  706. IN gctPOINTER Info,
  707. IN gctSIZE_T Size,
  708. IN gctUINT32 Address,
  709. IN gctPOINTER Memory
  710. );
  711. /* Commit the current command buffer. */
  712. gceSTATUS
  713. gcoHAL_Commit(
  714. IN gcoHAL Hal,
  715. IN gctBOOL Stall
  716. );
  717. #if gcdENABLE_3D
  718. /* Sencd fence command. */
  719. gceSTATUS
  720. gcoHAL_SendFence(
  721. IN gcoHAL Hal
  722. );
  723. #endif /* gcdENABLE_3D */
  724. /* Query the tile capabilities. */
  725. gceSTATUS
  726. gcoHAL_QueryTiled(
  727. IN gcoHAL Hal,
  728. OUT gctINT32 * TileWidth2D,
  729. OUT gctINT32 * TileHeight2D,
  730. OUT gctINT32 * TileWidth3D,
  731. OUT gctINT32 * TileHeight3D
  732. );
  733. gceSTATUS
  734. gcoHAL_Compact(
  735. IN gcoHAL Hal
  736. );
  737. #if VIVANTE_PROFILER
  738. gceSTATUS
  739. gcoHAL_ProfileStart(
  740. IN gcoHAL Hal
  741. );
  742. gceSTATUS
  743. gcoHAL_ProfileEnd(
  744. IN gcoHAL Hal,
  745. IN gctCONST_STRING Title
  746. );
  747. #endif
  748. /* Power Management */
  749. gceSTATUS
  750. gcoHAL_SetPowerManagementState(
  751. IN gcoHAL Hal,
  752. IN gceCHIPPOWERSTATE State
  753. );
  754. gceSTATUS
  755. gcoHAL_QueryPowerManagementState(
  756. IN gcoHAL Hal,
  757. OUT gceCHIPPOWERSTATE *State
  758. );
  759. /* Set the filter type for filter blit. */
  760. gceSTATUS
  761. gcoHAL_SetFilterType(
  762. IN gcoHAL Hal,
  763. IN gceFILTER_TYPE FilterType
  764. );
  765. gceSTATUS
  766. gcoHAL_GetDump(
  767. IN gcoHAL Hal,
  768. OUT gcoDUMP * Dump
  769. );
  770. #if gcdENABLE_3D
  771. gceSTATUS
  772. gcoHAL_SetPatchID(
  773. IN gcoHAL Hal,
  774. IN gcePATCH_ID PatchID
  775. );
  776. /* Get Patch ID based on process name */
  777. gceSTATUS
  778. gcoHAL_GetPatchID(
  779. IN gcoHAL Hal,
  780. OUT gcePATCH_ID * PatchID
  781. );
  782. gceSTATUS
  783. gcoHAL_SetGlobalPatchID(
  784. IN gcoHAL Hal,
  785. IN gcePATCH_ID PatchID
  786. );
  787. #endif /* gcdENABLE_3D */
  788. /* Call the kernel HAL layer. */
  789. gceSTATUS
  790. gcoHAL_Call(
  791. IN gcoHAL Hal,
  792. IN OUT gcsHAL_INTERFACE_PTR Interface
  793. );
  794. /* Schedule an event. */
  795. gceSTATUS
  796. gcoHAL_ScheduleEvent(
  797. IN gcoHAL Hal,
  798. IN OUT gcsHAL_INTERFACE_PTR Interface
  799. );
  800. /* Destroy a surface. */
  801. gceSTATUS
  802. gcoHAL_DestroySurface(
  803. IN gcoHAL Hal,
  804. IN gcoSURF Surface
  805. );
  806. /* Request a start/stop timestamp. */
  807. gceSTATUS
  808. gcoHAL_SetTimer(
  809. IN gcoHAL Hal,
  810. IN gctUINT32 Index,
  811. IN gctBOOL Start
  812. );
  813. /* Get Time delta from a Timer in microseconds. */
  814. gceSTATUS
  815. gcoHAL_GetTimerTime(
  816. IN gcoHAL Hal,
  817. IN gctUINT32 Timer,
  818. OUT gctINT32_PTR TimeDelta
  819. );
  820. /* set timeout value. */
  821. gceSTATUS
  822. gcoHAL_SetTimeOut(
  823. IN gcoHAL Hal,
  824. IN gctUINT32 timeOut
  825. );
  826. gceSTATUS
  827. gcoHAL_SetHardwareType(
  828. IN gcoHAL Hal,
  829. IN gceHARDWARE_TYPE HardwardType
  830. );
  831. gceSTATUS
  832. gcoHAL_GetHardwareType(
  833. IN gcoHAL Hal,
  834. OUT gceHARDWARE_TYPE * HardwardType
  835. );
  836. gceSTATUS
  837. gcoHAL_QueryChipCount(
  838. IN gcoHAL Hal,
  839. OUT gctINT32 * Count
  840. );
  841. gceSTATUS
  842. gcoHAL_Query3DCoreCount(
  843. IN gcoHAL Hal,
  844. OUT gctUINT32 *Count
  845. );
  846. gceSTATUS
  847. gcoHAL_QuerySeparated2D(
  848. IN gcoHAL Hal
  849. );
  850. gceSTATUS
  851. gcoHAL_Is3DAvailable(
  852. IN gcoHAL Hal
  853. );
  854. /* Get pointer to gcoVG object. */
  855. gceSTATUS
  856. gcoHAL_GetVGEngine(
  857. IN gcoHAL Hal,
  858. OUT gcoVG * Engine
  859. );
  860. gceSTATUS
  861. gcoHAL_QueryChipLimits(
  862. IN gcoHAL Hal,
  863. IN gctINT32 Chip,
  864. IN gctINT32 Mask,
  865. OUT gcsHAL_LIMITS *Limits);
  866. gceSTATUS
  867. gcoHAL_QueryChipFeature(
  868. IN gcoHAL Hal,
  869. IN gctINT32 Chip,
  870. IN gctINT32 Mask,
  871. IN gceFEATURE Feature);
  872. /*----------------------------------------------------------------------------*/
  873. /*----- Shared Buffer --------------------------------------------------------*/
  874. /* Create shared buffer. */
  875. gceSTATUS
  876. gcoHAL_CreateShBuffer(
  877. IN gctUINT32 Size,
  878. OUT gctSHBUF * ShBuf
  879. );
  880. /* Destroy shared buffer. */
  881. gceSTATUS
  882. gcoHAL_DestroyShBuffer(
  883. IN gctSHBUF ShBuf
  884. );
  885. /* Map shared buffer to current process. */
  886. gceSTATUS
  887. gcoHAL_MapShBuffer(
  888. IN gctSHBUF ShBuf
  889. );
  890. /* Write user data to shared buffer. */
  891. gceSTATUS
  892. gcoHAL_WriteShBuffer(
  893. IN gctSHBUF ShBuf,
  894. IN gctCONST_POINTER Data,
  895. IN gctUINT32 ByteCount
  896. );
  897. /* Read user data from shared buffer. */
  898. gceSTATUS
  899. gcoHAL_ReadShBuffer(
  900. IN gctSHBUF ShBuf,
  901. IN gctPOINTER Data,
  902. IN gctUINT32 BytesCount,
  903. OUT gctUINT32 * BytesRead
  904. );
  905. /* Config power management to be enabled or disabled. */
  906. gceSTATUS
  907. gcoHAL_ConfigPowerManagement(
  908. IN gctBOOL Enable
  909. );
  910. gceSTATUS
  911. gcoHAL_AllocateVideoMemory(
  912. IN gctUINT Alignment,
  913. IN gceSURF_TYPE Type,
  914. IN gctUINT32 Flag,
  915. IN gcePOOL Pool,
  916. IN OUT gctSIZE_T * Bytes,
  917. OUT gctUINT32_PTR Node
  918. );
  919. gceSTATUS
  920. gcoHAL_LockVideoMemory(
  921. IN gctUINT32 Node,
  922. IN gctBOOL Cacheable,
  923. OUT gctUINT32 * Physical,
  924. OUT gctPOINTER * Logical
  925. );
  926. gceSTATUS
  927. gcoHAL_UnlockVideoMemory(
  928. IN gctUINT32 Node,
  929. IN gceSURF_TYPE Type
  930. );
  931. gceSTATUS
  932. gcoHAL_ReleaseVideoMemory(
  933. IN gctUINT32 Node
  934. );
  935. #if gcdENABLE_3D || gcdENABLE_VG
  936. /* Query the target capabilities. */
  937. gceSTATUS
  938. gcoHAL_QueryTargetCaps(
  939. IN gcoHAL Hal,
  940. OUT gctUINT * MaxWidth,
  941. OUT gctUINT * MaxHeight,
  942. OUT gctUINT * MultiTargetCount,
  943. OUT gctUINT * MaxSamples
  944. );
  945. #endif
  946. /******************************************************************************\
  947. ********************************** gcoOS Object *********************************
  948. \******************************************************************************/
  949. /* Lock PLS access */
  950. gceSTATUS
  951. gcoOS_LockPLS(
  952. void
  953. );
  954. /* Unlock PLS access */
  955. gceSTATUS
  956. gcoOS_UnLockPLS(
  957. void
  958. );
  959. /* Get PLS value for given key */
  960. gctPOINTER
  961. gcoOS_GetPLSValue(
  962. IN gcePLS_VALUE key
  963. );
  964. /* Set PLS value of a given key */
  965. void
  966. gcoOS_SetPLSValue(
  967. IN gcePLS_VALUE key,
  968. OUT gctPOINTER value
  969. );
  970. /* Get access to the thread local storage. */
  971. gceSTATUS
  972. gcoOS_GetTLS(
  973. OUT gcsTLS_PTR * TLS
  974. );
  975. /* Copy the TLS from a source thread. */
  976. gceSTATUS gcoOS_CopyTLS(IN gcsTLS_PTR Source);
  977. /* Destroy the objects associated with the current thread. */
  978. void
  979. gcoOS_FreeThreadData(
  980. void
  981. );
  982. /* Empty function for compatibility. */
  983. gceSTATUS
  984. gcoOS_Construct(
  985. IN gctPOINTER Context,
  986. OUT gcoOS * Os
  987. );
  988. /* Empty function for compatibility. */
  989. gceSTATUS
  990. gcoOS_Destroy(
  991. IN gcoOS Os
  992. );
  993. /* Get the base address for the physical memory. */
  994. gceSTATUS
  995. gcoOS_GetBaseAddress(
  996. IN gcoOS Os,
  997. OUT gctUINT32_PTR BaseAddress
  998. );
  999. /* Allocate memory from the heap. */
  1000. gceSTATUS
  1001. gcoOS_Allocate(
  1002. IN gcoOS Os,
  1003. IN gctSIZE_T Bytes,
  1004. OUT gctPOINTER * Memory
  1005. );
  1006. /* Get allocated memory size. */
  1007. gceSTATUS
  1008. gcoOS_GetMemorySize(
  1009. IN gcoOS Os,
  1010. IN gctPOINTER Memory,
  1011. OUT gctSIZE_T_PTR MemorySize
  1012. );
  1013. /* Free allocated memory. */
  1014. gceSTATUS
  1015. gcoOS_Free(
  1016. IN gcoOS Os,
  1017. IN gctPOINTER Memory
  1018. );
  1019. /* Allocate memory. */
  1020. gceSTATUS
  1021. gcoOS_AllocateSharedMemory(
  1022. IN gcoOS Os,
  1023. IN gctSIZE_T Bytes,
  1024. OUT gctPOINTER * Memory
  1025. );
  1026. /* Free memory. */
  1027. gceSTATUS
  1028. gcoOS_FreeSharedMemory(
  1029. IN gcoOS Os,
  1030. IN gctPOINTER Memory
  1031. );
  1032. /* Allocate memory. */
  1033. gceSTATUS
  1034. gcoOS_AllocateMemory(
  1035. IN gcoOS Os,
  1036. IN gctSIZE_T Bytes,
  1037. OUT gctPOINTER * Memory
  1038. );
  1039. /* Free memory. */
  1040. gceSTATUS
  1041. gcoOS_FreeMemory(
  1042. IN gcoOS Os,
  1043. IN gctPOINTER Memory
  1044. );
  1045. /* Allocate contiguous memory. */
  1046. gceSTATUS
  1047. gcoOS_AllocateContiguous(
  1048. IN gcoOS Os,
  1049. IN gctBOOL InUserSpace,
  1050. IN OUT gctSIZE_T * Bytes,
  1051. OUT gctPHYS_ADDR * Physical,
  1052. OUT gctPOINTER * Logical
  1053. );
  1054. /* Free contiguous memory. */
  1055. gceSTATUS
  1056. gcoOS_FreeContiguous(
  1057. IN gcoOS Os,
  1058. IN gctPHYS_ADDR Physical,
  1059. IN gctPOINTER Logical,
  1060. IN gctSIZE_T Bytes
  1061. );
  1062. /* Map user memory. */
  1063. gceSTATUS
  1064. gcoOS_MapUserMemory(
  1065. IN gcoOS Os,
  1066. IN gctPOINTER Memory,
  1067. IN gctSIZE_T Size,
  1068. OUT gctPOINTER * Info,
  1069. OUT gctUINT32_PTR Address
  1070. );
  1071. /* Map user memory. */
  1072. gceSTATUS
  1073. gcoOS_MapUserMemoryEx(
  1074. IN gcoOS Os,
  1075. IN gctPOINTER Memory,
  1076. IN gctUINT32 Physical,
  1077. IN gctSIZE_T Size,
  1078. OUT gctPOINTER * Info,
  1079. OUT gctUINT32_PTR Address
  1080. );
  1081. /* Unmap user memory. */
  1082. gceSTATUS
  1083. gcoOS_UnmapUserMemory(
  1084. IN gcoOS Os,
  1085. IN gctPOINTER Memory,
  1086. IN gctSIZE_T Size,
  1087. IN gctPOINTER Info,
  1088. IN gctUINT32 Address
  1089. );
  1090. /* Device I/O Control call to the kernel HAL layer. */
  1091. gceSTATUS
  1092. gcoOS_DeviceControl(
  1093. IN gcoOS Os,
  1094. IN gctUINT32 IoControlCode,
  1095. IN gctPOINTER InputBuffer,
  1096. IN gctSIZE_T InputBufferSize,
  1097. IN gctPOINTER OutputBuffer,
  1098. IN gctSIZE_T OutputBufferSize
  1099. );
  1100. /* Allocate non paged memory. */
  1101. gceSTATUS
  1102. gcoOS_AllocateNonPagedMemory(
  1103. IN gcoOS Os,
  1104. IN gctBOOL InUserSpace,
  1105. IN OUT gctSIZE_T * Bytes,
  1106. OUT gctPHYS_ADDR * Physical,
  1107. OUT gctPOINTER * Logical
  1108. );
  1109. /* Free non paged memory. */
  1110. gceSTATUS
  1111. gcoOS_FreeNonPagedMemory(
  1112. IN gcoOS Os,
  1113. IN gctSIZE_T Bytes,
  1114. IN gctPHYS_ADDR Physical,
  1115. IN gctPOINTER Logical
  1116. );
  1117. #define gcmOS_SAFE_FREE(os, mem) \
  1118. gcoOS_Free(os, mem); \
  1119. mem = gcvNULL
  1120. #define gcmOS_SAFE_FREE_SHARED_MEMORY(os, mem) \
  1121. gcoOS_FreeSharedMemory(os, mem); \
  1122. mem = gcvNULL
  1123. #define gcmkOS_SAFE_FREE(os, mem) \
  1124. gckOS_Free(os, mem); \
  1125. mem = gcvNULL
  1126. typedef enum _gceFILE_MODE
  1127. {
  1128. gcvFILE_CREATE = 0,
  1129. gcvFILE_APPEND,
  1130. gcvFILE_READ,
  1131. gcvFILE_CREATETEXT,
  1132. gcvFILE_APPENDTEXT,
  1133. gcvFILE_READTEXT,
  1134. }
  1135. gceFILE_MODE;
  1136. /* Open a file. */
  1137. gceSTATUS
  1138. gcoOS_Open(
  1139. IN gcoOS Os,
  1140. IN gctCONST_STRING FileName,
  1141. IN gceFILE_MODE Mode,
  1142. OUT gctFILE * File
  1143. );
  1144. /* Close a file. */
  1145. gceSTATUS
  1146. gcoOS_Close(
  1147. IN gcoOS Os,
  1148. IN gctFILE File
  1149. );
  1150. /* Read data from a file. */
  1151. gceSTATUS
  1152. gcoOS_Read(
  1153. IN gcoOS Os,
  1154. IN gctFILE File,
  1155. IN gctSIZE_T ByteCount,
  1156. IN gctPOINTER Data,
  1157. OUT gctSIZE_T * ByteRead
  1158. );
  1159. /* Write data to a file. */
  1160. gceSTATUS
  1161. gcoOS_Write(
  1162. IN gcoOS Os,
  1163. IN gctFILE File,
  1164. IN gctSIZE_T ByteCount,
  1165. IN gctCONST_POINTER Data
  1166. );
  1167. /* Flush data to a file. */
  1168. gceSTATUS
  1169. gcoOS_Flush(
  1170. IN gcoOS Os,
  1171. IN gctFILE File
  1172. );
  1173. /* Close a file descriptor. */
  1174. gceSTATUS
  1175. gcoOS_CloseFD(
  1176. IN gcoOS Os,
  1177. IN gctINT FD
  1178. );
  1179. /* Dup file descriptor to another. */
  1180. gceSTATUS
  1181. gcoOS_DupFD(
  1182. IN gcoOS Os,
  1183. IN gctINT FD,
  1184. OUT gctINT * FD2
  1185. );
  1186. /* Create an endpoint for communication. */
  1187. gceSTATUS
  1188. gcoOS_Socket(
  1189. IN gcoOS Os,
  1190. IN gctINT Domain,
  1191. IN gctINT Type,
  1192. IN gctINT Protocol,
  1193. OUT gctINT *SockFd
  1194. );
  1195. /* Close a socket. */
  1196. gceSTATUS
  1197. gcoOS_CloseSocket(
  1198. IN gcoOS Os,
  1199. IN gctINT SockFd
  1200. );
  1201. /* Initiate a connection on a socket. */
  1202. gceSTATUS
  1203. gcoOS_Connect(
  1204. IN gcoOS Os,
  1205. IN gctINT SockFd,
  1206. IN gctCONST_POINTER HostName,
  1207. IN gctUINT Port);
  1208. /* Shut down part of connection on a socket. */
  1209. gceSTATUS
  1210. gcoOS_Shutdown(
  1211. IN gcoOS Os,
  1212. IN gctINT SockFd,
  1213. IN gctINT How
  1214. );
  1215. /* Send a message on a socket. */
  1216. gceSTATUS
  1217. gcoOS_Send(
  1218. IN gcoOS Os,
  1219. IN gctINT SockFd,
  1220. IN gctSIZE_T ByteCount,
  1221. IN gctCONST_POINTER Data,
  1222. IN gctINT Flags
  1223. );
  1224. /* Initiate a connection on a socket. */
  1225. gceSTATUS
  1226. gcoOS_WaitForSend(
  1227. IN gcoOS Os,
  1228. IN gctINT SockFd,
  1229. IN gctINT Seconds,
  1230. IN gctINT MicroSeconds);
  1231. /* Get environment variable value. */
  1232. gceSTATUS
  1233. gcoOS_GetEnv(
  1234. IN gcoOS Os,
  1235. IN gctCONST_STRING VarName,
  1236. OUT gctSTRING * Value
  1237. );
  1238. /* Set environment variable value. */
  1239. gceSTATUS
  1240. gcoOS_SetEnv(
  1241. IN gcoOS Os,
  1242. IN gctCONST_STRING VarName,
  1243. IN gctSTRING Value
  1244. );
  1245. /* Get current working directory. */
  1246. gceSTATUS
  1247. gcoOS_GetCwd(
  1248. IN gcoOS Os,
  1249. IN gctINT SizeInBytes,
  1250. OUT gctSTRING Buffer
  1251. );
  1252. /* Get file status info. */
  1253. gceSTATUS
  1254. gcoOS_Stat(
  1255. IN gcoOS Os,
  1256. IN gctCONST_STRING FileName,
  1257. OUT gctPOINTER Buffer
  1258. );
  1259. typedef enum _gceFILE_WHENCE
  1260. {
  1261. gcvFILE_SEEK_SET,
  1262. gcvFILE_SEEK_CUR,
  1263. gcvFILE_SEEK_END
  1264. }
  1265. gceFILE_WHENCE;
  1266. /* Set the current position of a file. */
  1267. gceSTATUS
  1268. gcoOS_Seek(
  1269. IN gcoOS Os,
  1270. IN gctFILE File,
  1271. IN gctUINT32 Offset,
  1272. IN gceFILE_WHENCE Whence
  1273. );
  1274. /* Set the current position of a file. */
  1275. gceSTATUS
  1276. gcoOS_SetPos(
  1277. IN gcoOS Os,
  1278. IN gctFILE File,
  1279. IN gctUINT32 Position
  1280. );
  1281. /* Get the current position of a file. */
  1282. gceSTATUS
  1283. gcoOS_GetPos(
  1284. IN gcoOS Os,
  1285. IN gctFILE File,
  1286. OUT gctUINT32 * Position
  1287. );
  1288. /* Same as strstr. */
  1289. gceSTATUS
  1290. gcoOS_StrStr(
  1291. IN gctCONST_STRING String,
  1292. IN gctCONST_STRING SubString,
  1293. OUT gctSTRING * Output
  1294. );
  1295. /* Find the last occurance of a character inside a string. */
  1296. gceSTATUS
  1297. gcoOS_StrFindReverse(
  1298. IN gctCONST_STRING String,
  1299. IN gctINT8 Character,
  1300. OUT gctSTRING * Output
  1301. );
  1302. gceSTATUS
  1303. gcoOS_StrDup(
  1304. IN gcoOS Os,
  1305. IN gctCONST_STRING String,
  1306. OUT gctSTRING * Target
  1307. );
  1308. /* Copy a string. */
  1309. gceSTATUS
  1310. gcoOS_StrCopySafe(
  1311. IN gctSTRING Destination,
  1312. IN gctSIZE_T DestinationSize,
  1313. IN gctCONST_STRING Source
  1314. );
  1315. /* Append a string. */
  1316. gceSTATUS
  1317. gcoOS_StrCatSafe(
  1318. IN gctSTRING Destination,
  1319. IN gctSIZE_T DestinationSize,
  1320. IN gctCONST_STRING Source
  1321. );
  1322. /* Compare two strings. */
  1323. gceSTATUS
  1324. gcoOS_StrCmp(
  1325. IN gctCONST_STRING String1,
  1326. IN gctCONST_STRING String2
  1327. );
  1328. /* Compare characters of two strings. */
  1329. gceSTATUS
  1330. gcoOS_StrNCmp(
  1331. IN gctCONST_STRING String1,
  1332. IN gctCONST_STRING String2,
  1333. IN gctSIZE_T Count
  1334. );
  1335. /* Convert string to float. */
  1336. gceSTATUS
  1337. gcoOS_StrToFloat(
  1338. IN gctCONST_STRING String,
  1339. OUT gctFLOAT * Float
  1340. );
  1341. /* Convert hex string to integer. */
  1342. gceSTATUS gcoOS_HexStrToInt(
  1343. IN gctCONST_STRING String,
  1344. OUT gctINT * Int
  1345. );
  1346. /* Convert hex string to float. */
  1347. gceSTATUS
  1348. gcoOS_HexStrToFloat(
  1349. IN gctCONST_STRING String,
  1350. OUT gctFLOAT * Float
  1351. );
  1352. /* Convert string to integer. */
  1353. gceSTATUS
  1354. gcoOS_StrToInt(
  1355. IN gctCONST_STRING String,
  1356. OUT gctINT * Int
  1357. );
  1358. gceSTATUS
  1359. gcoOS_MemCmp(
  1360. IN gctCONST_POINTER Memory1,
  1361. IN gctCONST_POINTER Memory2,
  1362. IN gctSIZE_T Bytes
  1363. );
  1364. gceSTATUS
  1365. gcoOS_PrintStrSafe(
  1366. OUT gctSTRING String,
  1367. IN gctSIZE_T StringSize,
  1368. IN OUT gctUINT * Offset,
  1369. IN gctCONST_STRING Format,
  1370. ...
  1371. );
  1372. gceSTATUS
  1373. gcoOS_LoadLibrary(
  1374. IN gcoOS Os,
  1375. IN gctCONST_STRING Library,
  1376. OUT gctHANDLE * Handle
  1377. );
  1378. gceSTATUS
  1379. gcoOS_FreeLibrary(
  1380. IN gcoOS Os,
  1381. IN gctHANDLE Handle
  1382. );
  1383. gceSTATUS
  1384. gcoOS_GetProcAddress(
  1385. IN gcoOS Os,
  1386. IN gctHANDLE Handle,
  1387. IN gctCONST_STRING Name,
  1388. OUT gctPOINTER * Function
  1389. );
  1390. gceSTATUS
  1391. gcoOS_Compact(
  1392. IN gcoOS Os
  1393. );
  1394. gceSTATUS
  1395. gcoOS_AddSignalHandler (
  1396. IN gceSignalHandlerType SignalHandlerType
  1397. );
  1398. #if VIVANTE_PROFILER
  1399. gceSTATUS
  1400. gcoOS_ProfileStart(
  1401. IN gcoOS Os
  1402. );
  1403. gceSTATUS
  1404. gcoOS_ProfileEnd(
  1405. IN gcoOS Os,
  1406. IN gctCONST_STRING Title
  1407. );
  1408. gceSTATUS
  1409. gcoOS_SetProfileSetting(
  1410. IN gcoOS Os,
  1411. IN gctBOOL Enable,
  1412. IN gctCONST_STRING FileName
  1413. );
  1414. #endif
  1415. /* Query the video memory. */
  1416. gceSTATUS
  1417. gcoOS_QueryVideoMemory(
  1418. IN gcoOS Os,
  1419. OUT gctPHYS_ADDR * InternalAddress,
  1420. OUT gctSIZE_T * InternalSize,
  1421. OUT gctPHYS_ADDR * ExternalAddress,
  1422. OUT gctSIZE_T * ExternalSize,
  1423. OUT gctPHYS_ADDR * ContiguousAddress,
  1424. OUT gctSIZE_T * ContiguousSize
  1425. );
  1426. /* Detect if the process is the executable specified. */
  1427. gceSTATUS
  1428. gcoOS_DetectProcessByNamePid(
  1429. IN gctCONST_STRING Name,
  1430. IN gctHANDLE Pid
  1431. );
  1432. /* Detect if the current process is the executable specified. */
  1433. gceSTATUS
  1434. gcoOS_DetectProcessByName(
  1435. IN gctCONST_STRING Name
  1436. );
  1437. gceSTATUS
  1438. gcoOS_DetectProcessByEncryptedName(
  1439. IN gctCONST_STRING Name
  1440. );
  1441. #if defined(ANDROID)
  1442. gceSTATUS
  1443. gcoOS_DetectProgrameByEncryptedSymbols(
  1444. IN gcoOS_SymbolsList Symbols
  1445. );
  1446. #endif
  1447. /*----------------------------------------------------------------------------*/
  1448. /*----- Atoms ----------------------------------------------------------------*/
  1449. /* Construct an atom. */
  1450. gceSTATUS
  1451. gcoOS_AtomConstruct(
  1452. IN gcoOS Os,
  1453. OUT gcsATOM_PTR * Atom
  1454. );
  1455. /* Destroy an atom. */
  1456. gceSTATUS
  1457. gcoOS_AtomDestroy(
  1458. IN gcoOS Os,
  1459. IN gcsATOM_PTR Atom
  1460. );
  1461. /* Get the 32-bit value protected by an atom. */
  1462. gceSTATUS
  1463. gcoOS_AtomGet(
  1464. IN gcoOS Os,
  1465. IN gcsATOM_PTR Atom,
  1466. OUT gctINT32_PTR Value
  1467. );
  1468. /* Set the 32-bit value protected by an atom. */
  1469. gceSTATUS
  1470. gcoOS_AtomSet(
  1471. IN gcoOS Os,
  1472. IN gcsATOM_PTR Atom,
  1473. IN gctINT32 Value
  1474. );
  1475. /* Increment an atom. */
  1476. gceSTATUS
  1477. gcoOS_AtomIncrement(
  1478. IN gcoOS Os,
  1479. IN gcsATOM_PTR Atom,
  1480. OUT gctINT32_PTR OldValue
  1481. );
  1482. /* Decrement an atom. */
  1483. gceSTATUS
  1484. gcoOS_AtomDecrement(
  1485. IN gcoOS Os,
  1486. IN gcsATOM_PTR Atom,
  1487. OUT gctINT32_PTR OldValue
  1488. );
  1489. gctHANDLE
  1490. gcoOS_GetCurrentProcessID(
  1491. void
  1492. );
  1493. gctHANDLE
  1494. gcoOS_GetCurrentThreadID(
  1495. void
  1496. );
  1497. /*----------------------------------------------------------------------------*/
  1498. /*----- Time -----------------------------------------------------------------*/
  1499. /* Get the number of milliseconds since the system started. */
  1500. gctUINT32
  1501. gcoOS_GetTicks(
  1502. void
  1503. );
  1504. /* Get time in microseconds. */
  1505. gceSTATUS
  1506. gcoOS_GetTime(
  1507. gctUINT64_PTR Time
  1508. );
  1509. /* Get CPU usage in microseconds. */
  1510. gceSTATUS
  1511. gcoOS_GetCPUTime(
  1512. gctUINT64_PTR CPUTime
  1513. );
  1514. /* Get memory usage. */
  1515. gceSTATUS
  1516. gcoOS_GetMemoryUsage(
  1517. gctUINT32_PTR MaxRSS,
  1518. gctUINT32_PTR IxRSS,
  1519. gctUINT32_PTR IdRSS,
  1520. gctUINT32_PTR IsRSS
  1521. );
  1522. /* Delay a number of microseconds. */
  1523. gceSTATUS
  1524. gcoOS_Delay(
  1525. IN gcoOS Os,
  1526. IN gctUINT32 Delay
  1527. );
  1528. /*----------------------------------------------------------------------------*/
  1529. /*----- Threads --------------------------------------------------------------*/
  1530. #ifdef _WIN32
  1531. /* Cannot include windows.h here becuase "near" and "far"
  1532. * which are used in gcsDEPTH_INFO, are defined to nothing in WinDef.h.
  1533. * So, use the real value of DWORD and WINAPI, instead.
  1534. * DWORD is unsigned long, and WINAPI is __stdcall.
  1535. * If these two are change in WinDef.h, the following two typdefs
  1536. * need to be changed, too.
  1537. */
  1538. typedef unsigned long gctTHREAD_RETURN;
  1539. typedef unsigned long (__stdcall * gcTHREAD_ROUTINE)(void * Argument);
  1540. #else
  1541. typedef void * gctTHREAD_RETURN;
  1542. typedef void * (* gcTHREAD_ROUTINE)(void *);
  1543. #endif
  1544. /* Create a new thread. */
  1545. gceSTATUS
  1546. gcoOS_CreateThread(
  1547. IN gcoOS Os,
  1548. IN gcTHREAD_ROUTINE Worker,
  1549. IN gctPOINTER Argument,
  1550. OUT gctPOINTER * Thread
  1551. );
  1552. /* Close a thread. */
  1553. gceSTATUS
  1554. gcoOS_CloseThread(
  1555. IN gcoOS Os,
  1556. IN gctPOINTER Thread
  1557. );
  1558. /*----------------------------------------------------------------------------*/
  1559. /*----- Mutexes --------------------------------------------------------------*/
  1560. /* Create a new mutex. */
  1561. gceSTATUS
  1562. gcoOS_CreateMutex(
  1563. IN gcoOS Os,
  1564. OUT gctPOINTER * Mutex
  1565. );
  1566. /* Delete a mutex. */
  1567. gceSTATUS
  1568. gcoOS_DeleteMutex(
  1569. IN gcoOS Os,
  1570. IN gctPOINTER Mutex
  1571. );
  1572. /* Acquire a mutex. */
  1573. gceSTATUS
  1574. gcoOS_AcquireMutex(
  1575. IN gcoOS Os,
  1576. IN gctPOINTER Mutex,
  1577. IN gctUINT32 Timeout
  1578. );
  1579. /* Release a mutex. */
  1580. gceSTATUS
  1581. gcoOS_ReleaseMutex(
  1582. IN gcoOS Os,
  1583. IN gctPOINTER Mutex
  1584. );
  1585. /*----------------------------------------------------------------------------*/
  1586. /*----- Signals --------------------------------------------------------------*/
  1587. /* Create a signal. */
  1588. gceSTATUS
  1589. gcoOS_CreateSignal(
  1590. IN gcoOS Os,
  1591. IN gctBOOL ManualReset,
  1592. OUT gctSIGNAL * Signal
  1593. );
  1594. /* Destroy a signal. */
  1595. gceSTATUS
  1596. gcoOS_DestroySignal(
  1597. IN gcoOS Os,
  1598. IN gctSIGNAL Signal
  1599. );
  1600. /* Signal a signal. */
  1601. gceSTATUS
  1602. gcoOS_Signal(
  1603. IN gcoOS Os,
  1604. IN gctSIGNAL Signal,
  1605. IN gctBOOL State
  1606. );
  1607. /* Wait for a signal. */
  1608. gceSTATUS
  1609. gcoOS_WaitSignal(
  1610. IN gcoOS Os,
  1611. IN gctSIGNAL Signal,
  1612. IN gctUINT32 Wait
  1613. );
  1614. /* Map a signal from another process */
  1615. gceSTATUS
  1616. gcoOS_MapSignal(
  1617. IN gctSIGNAL RemoteSignal,
  1618. OUT gctSIGNAL * LocalSignal
  1619. );
  1620. /* Unmap a signal mapped from another process */
  1621. gceSTATUS
  1622. gcoOS_UnmapSignal(
  1623. IN gctSIGNAL Signal
  1624. );
  1625. /*----------------------------------------------------------------------------*/
  1626. /*----- Android Native Fence -------------------------------------------------*/
  1627. /* Create sync point. */
  1628. gceSTATUS
  1629. gcoOS_CreateSyncPoint(
  1630. IN gcoOS Os,
  1631. OUT gctSYNC_POINT * SyncPoint
  1632. );
  1633. /* Destroy sync point. */
  1634. gceSTATUS
  1635. gcoOS_DestroySyncPoint(
  1636. IN gcoOS Os,
  1637. IN gctSYNC_POINT SyncPoint
  1638. );
  1639. /* Create native fence. */
  1640. gceSTATUS
  1641. gcoOS_CreateNativeFence(
  1642. IN gcoOS Os,
  1643. IN gctSYNC_POINT SyncPoint,
  1644. OUT gctINT * FenceFD
  1645. );
  1646. /* Wait on native fence. */
  1647. gceSTATUS
  1648. gcoOS_WaitNativeFence(
  1649. IN gcoOS Os,
  1650. IN gctINT FenceFD,
  1651. IN gctUINT32 Timeout
  1652. );
  1653. /*----------------------------------------------------------------------------*/
  1654. /*----- Memory Access and Cache ----------------------------------------------*/
  1655. /* Write a register. */
  1656. gceSTATUS
  1657. gcoOS_WriteRegister(
  1658. IN gcoOS Os,
  1659. IN gctUINT32 Address,
  1660. IN gctUINT32 Data
  1661. );
  1662. /* Read a register. */
  1663. gceSTATUS
  1664. gcoOS_ReadRegister(
  1665. IN gcoOS Os,
  1666. IN gctUINT32 Address,
  1667. OUT gctUINT32 * Data
  1668. );
  1669. gceSTATUS
  1670. gcoOS_CacheClean(
  1671. IN gcoOS Os,
  1672. IN gctUINT32 Node,
  1673. IN gctPOINTER Logical,
  1674. IN gctSIZE_T Bytes
  1675. );
  1676. gceSTATUS
  1677. gcoOS_CacheFlush(
  1678. IN gcoOS Os,
  1679. IN gctUINT32 Node,
  1680. IN gctPOINTER Logical,
  1681. IN gctSIZE_T Bytes
  1682. );
  1683. gceSTATUS
  1684. gcoOS_CacheInvalidate(
  1685. IN gcoOS Os,
  1686. IN gctUINT32 Node,
  1687. IN gctPOINTER Logical,
  1688. IN gctSIZE_T Bytes
  1689. );
  1690. gceSTATUS
  1691. gcoOS_MemoryBarrier(
  1692. IN gcoOS Os,
  1693. IN gctPOINTER Logical
  1694. );
  1695. gceSTATUS
  1696. gcoOS_CPUPhysicalToGPUPhysical(
  1697. IN gctUINT32 CPUPhysical,
  1698. OUT gctUINT32_PTR GPUPhysical
  1699. );
  1700. /*----------------------------------------------------------------------------*/
  1701. /*----- Profile --------------------------------------------------------------*/
  1702. gceSTATUS
  1703. gckOS_GetProfileTick(
  1704. OUT gctUINT64_PTR Tick
  1705. );
  1706. gceSTATUS
  1707. gckOS_QueryProfileTickRate(
  1708. OUT gctUINT64_PTR TickRate
  1709. );
  1710. gctUINT32
  1711. gckOS_ProfileToMS(
  1712. IN gctUINT64 Ticks
  1713. );
  1714. gceSTATUS
  1715. gcoOS_GetProfileTick(
  1716. OUT gctUINT64_PTR Tick
  1717. );
  1718. gceSTATUS
  1719. gcoOS_QueryProfileTickRate(
  1720. OUT gctUINT64_PTR TickRate
  1721. );
  1722. #define _gcmPROFILE_INIT(prefix, freq, start) \
  1723. do { \
  1724. prefix ## OS_QueryProfileTickRate(&(freq)); \
  1725. prefix ## OS_GetProfileTick(&(start)); \
  1726. } while (gcvFALSE)
  1727. #define _gcmPROFILE_QUERY(prefix, start, ticks) \
  1728. do { \
  1729. prefix ## OS_GetProfileTick(&(ticks)); \
  1730. (ticks) = ((ticks) > (start)) ? ((ticks) - (start)) \
  1731. : (~0ull - (start) + (ticks) + 1); \
  1732. } while (gcvFALSE)
  1733. #if gcdENABLE_PROFILING
  1734. # define gcmkPROFILE_INIT(freq, start) _gcmPROFILE_INIT(gck, freq, start)
  1735. # define gcmkPROFILE_QUERY(start, ticks) _gcmPROFILE_QUERY(gck, start, ticks)
  1736. # define gcmPROFILE_INIT(freq, start) _gcmPROFILE_INIT(gco, freq, start)
  1737. # define gcmPROFILE_QUERY(start, ticks) _gcmPROFILE_QUERY(gco, start, ticks)
  1738. # define gcmPROFILE_ONLY(x) x
  1739. # define gcmPROFILE_ELSE(x) do { } while (gcvFALSE)
  1740. # define gcmPROFILE_DECLARE_ONLY(x) x
  1741. # define gcmPROFILE_DECLARE_ELSE(x) typedef x
  1742. #else
  1743. # define gcmkPROFILE_INIT(start, freq) do { } while (gcvFALSE)
  1744. # define gcmkPROFILE_QUERY(start, ticks) do { } while (gcvFALSE)
  1745. # define gcmPROFILE_INIT(start, freq) do { } while (gcvFALSE)
  1746. # define gcmPROFILE_QUERY(start, ticks) do { } while (gcvFALSE)
  1747. # define gcmPROFILE_ONLY(x) do { } while (gcvFALSE)
  1748. # define gcmPROFILE_ELSE(x) x
  1749. # define gcmPROFILE_DECLARE_ONLY(x) do { } while (gcvFALSE)
  1750. # define gcmPROFILE_DECLARE_ELSE(x) x
  1751. #endif
  1752. /*******************************************************************************
  1753. ** gcoMATH object
  1754. */
  1755. #define gcdPI 3.14159265358979323846f
  1756. /* Kernel. */
  1757. gctINT
  1758. gckMATH_ModuloInt(
  1759. IN gctINT X,
  1760. IN gctINT Y
  1761. );
  1762. /* User. */
  1763. gctUINT32
  1764. gcoMATH_Log2in5dot5(
  1765. IN gctINT X
  1766. );
  1767. gctFLOAT
  1768. gcoMATH_UIntAsFloat(
  1769. IN gctUINT32 X
  1770. );
  1771. gctUINT32
  1772. gcoMATH_FloatAsUInt(
  1773. IN gctFLOAT X
  1774. );
  1775. gctBOOL
  1776. gcoMATH_CompareEqualF(
  1777. IN gctFLOAT X,
  1778. IN gctFLOAT Y
  1779. );
  1780. gctUINT16
  1781. gcoMATH_UInt8AsFloat16(
  1782. IN gctUINT8 X
  1783. );
  1784. gctUINT32
  1785. gcoMATH_Float16ToFloat(
  1786. IN gctUINT16 In
  1787. );
  1788. gctUINT16
  1789. gcoMATH_FloatToFloat16(
  1790. IN gctUINT32 In
  1791. );
  1792. gctUINT32
  1793. gcoMATH_Float11ToFloat(
  1794. IN gctUINT32 In
  1795. );
  1796. gctUINT16
  1797. gcoMATH_FloatToFloat11(
  1798. IN gctUINT32 In
  1799. );
  1800. gctUINT32
  1801. gcoMATH_Float10ToFloat(
  1802. IN gctUINT32 In
  1803. );
  1804. gctUINT16
  1805. gcoMATH_FloatToFloat10(
  1806. IN gctUINT32 In
  1807. );
  1808. gctUINT32
  1809. gcoMATH_Float14ToFloat(
  1810. IN gctUINT16 In
  1811. );
  1812. /******************************************************************************\
  1813. **************************** Coordinate Structures *****************************
  1814. \******************************************************************************/
  1815. typedef struct _gcsPOINT
  1816. {
  1817. gctINT32 x;
  1818. gctINT32 y;
  1819. }
  1820. gcsPOINT;
  1821. typedef struct _gcsSIZE
  1822. {
  1823. gctINT32 width;
  1824. gctINT32 height;
  1825. }
  1826. gcsSIZE;
  1827. typedef struct _gcsRECT
  1828. {
  1829. gctINT32 left;
  1830. gctINT32 top;
  1831. gctINT32 right;
  1832. gctINT32 bottom;
  1833. }
  1834. gcsRECT;
  1835. typedef union _gcsPIXEL
  1836. {
  1837. struct
  1838. {
  1839. gctFLOAT r, g, b, a;
  1840. gctFLOAT d, s;
  1841. } pf;
  1842. struct
  1843. {
  1844. gctINT32 r, g, b, a;
  1845. gctINT32 d, s;
  1846. } pi;
  1847. struct
  1848. {
  1849. gctUINT32 r, g, b, a;
  1850. gctUINT32 d, s;
  1851. } pui;
  1852. } gcsPIXEL;
  1853. /******************************************************************************\
  1854. ********************************* gcoSURF Object ********************************
  1855. \******************************************************************************/
  1856. /*----------------------------------------------------------------------------*/
  1857. /*------------------------------- gcoSURF Common ------------------------------*/
  1858. /* Color format classes. */
  1859. typedef enum _gceFORMAT_CLASS
  1860. {
  1861. gcvFORMAT_CLASS_RGBA = 4500,
  1862. gcvFORMAT_CLASS_YUV,
  1863. gcvFORMAT_CLASS_INDEX,
  1864. gcvFORMAT_CLASS_LUMINANCE,
  1865. gcvFORMAT_CLASS_BUMP,
  1866. gcvFORMAT_CLASS_DEPTH,
  1867. gcvFORMAT_CLASS_ASTC,
  1868. gcvFORMAT_CLASS_OTHER
  1869. }
  1870. gceFORMAT_CLASS;
  1871. /* Color format data type */
  1872. typedef enum _gceFORMAT_DATATYPE
  1873. {
  1874. gcvFORMAT_DATATYPE_UNSIGNED_NORMALIZED,
  1875. gcvFORMAT_DATATYPE_SIGNED_NORMALIZED,
  1876. gcvFORMAT_DATATYPE_UNSIGNED_INTEGER,
  1877. gcvFORMAT_DATATYPE_SIGNED_INTEGER,
  1878. gcvFORMAT_DATATYPE_FLOAT16,
  1879. gcvFORMAT_DATATYPE_FLOAT32,
  1880. gcvFORMAT_DATATYPE_FLOAT_E5B9G9R9,
  1881. gcvFORMAT_DATATYPE_FLOAT_B10G11R11F,
  1882. gcvFORMAT_DATATYPE_INDEX,
  1883. gcvFORMAT_DATATYPE_SRGB,
  1884. gcvFORMAT_DATATYPE_FLOAT32_UINT,
  1885. }
  1886. gceFORMAT_DATATYPE;
  1887. /* Special enums for width field in gcsFORMAT_COMPONENT. */
  1888. typedef enum _gceCOMPONENT_CONTROL
  1889. {
  1890. gcvCOMPONENT_NOTPRESENT = 0x00,
  1891. gcvCOMPONENT_DONTCARE = 0x80,
  1892. gcvCOMPONENT_WIDTHMASK = 0x7F,
  1893. gcvCOMPONENT_ODD = 0x80
  1894. }
  1895. gceCOMPONENT_CONTROL;
  1896. /* Color format component parameters. */
  1897. typedef struct _gcsFORMAT_COMPONENT
  1898. {
  1899. gctUINT8 start;
  1900. gctUINT8 width;
  1901. }
  1902. gcsFORMAT_COMPONENT;
  1903. /* RGBA color format class. */
  1904. typedef struct _gcsFORMAT_CLASS_TYPE_RGBA
  1905. {
  1906. gcsFORMAT_COMPONENT alpha;
  1907. gcsFORMAT_COMPONENT red;
  1908. gcsFORMAT_COMPONENT green;
  1909. gcsFORMAT_COMPONENT blue;
  1910. }
  1911. gcsFORMAT_CLASS_TYPE_RGBA;
  1912. /* YUV color format class. */
  1913. typedef struct _gcsFORMAT_CLASS_TYPE_YUV
  1914. {
  1915. gcsFORMAT_COMPONENT y;
  1916. gcsFORMAT_COMPONENT u;
  1917. gcsFORMAT_COMPONENT v;
  1918. }
  1919. gcsFORMAT_CLASS_TYPE_YUV;
  1920. /* Index color format class. */
  1921. typedef struct _gcsFORMAT_CLASS_TYPE_INDEX
  1922. {
  1923. gcsFORMAT_COMPONENT value;
  1924. }
  1925. gcsFORMAT_CLASS_TYPE_INDEX;
  1926. /* Luminance color format class. */
  1927. typedef struct _gcsFORMAT_CLASS_TYPE_LUMINANCE
  1928. {
  1929. gcsFORMAT_COMPONENT alpha;
  1930. gcsFORMAT_COMPONENT value;
  1931. }
  1932. gcsFORMAT_CLASS_TYPE_LUMINANCE;
  1933. /* Bump map color format class. */
  1934. typedef struct _gcsFORMAT_CLASS_TYPE_BUMP
  1935. {
  1936. gcsFORMAT_COMPONENT alpha;
  1937. gcsFORMAT_COMPONENT l;
  1938. gcsFORMAT_COMPONENT v;
  1939. gcsFORMAT_COMPONENT u;
  1940. gcsFORMAT_COMPONENT q;
  1941. gcsFORMAT_COMPONENT w;
  1942. }
  1943. gcsFORMAT_CLASS_TYPE_BUMP;
  1944. /* Depth and stencil format class. */
  1945. typedef struct _gcsFORMAT_CLASS_TYPE_DEPTH
  1946. {
  1947. gcsFORMAT_COMPONENT depth;
  1948. gcsFORMAT_COMPONENT stencil;
  1949. }
  1950. gcsFORMAT_CLASS_TYPE_DEPTH;
  1951. typedef union _gcuPIXEL_FORMAT_CLASS
  1952. {
  1953. gcsFORMAT_CLASS_TYPE_BUMP bump;
  1954. gcsFORMAT_CLASS_TYPE_RGBA rgba;
  1955. gcsFORMAT_CLASS_TYPE_YUV yuv;
  1956. gcsFORMAT_CLASS_TYPE_LUMINANCE lum;
  1957. gcsFORMAT_CLASS_TYPE_INDEX index;
  1958. gcsFORMAT_CLASS_TYPE_DEPTH depth;
  1959. }
  1960. gcuPIXEL_FORMAT_CLASS;
  1961. /* Format parameters. */
  1962. typedef struct _gcsSURF_FORMAT_INFO
  1963. {
  1964. /* Name of the format */
  1965. gctCONST_STRING formatName;
  1966. /* Format code and class. */
  1967. gceSURF_FORMAT format;
  1968. gceFORMAT_CLASS fmtClass;
  1969. /* Format data type */
  1970. gceFORMAT_DATATYPE fmtDataType;
  1971. /* The size of one pixel in bits. */
  1972. gctUINT8 bitsPerPixel;
  1973. /* Pixel block dimensions. */
  1974. gctUINT blockWidth;
  1975. gctUINT blockHeight;
  1976. /* Pixel block size in bits. */
  1977. gctUINT blockSize;
  1978. /* Some formats are larger than what the GPU can support. */
  1979. /* These formats are read in the number of layers specified. */
  1980. gctUINT8 layers;
  1981. /* The format is faked and software will interpret it differently
  1982. ** with HW. Most of them can't be blendable(PE) or filterable(TX).
  1983. */
  1984. gctBOOL fakedFormat;
  1985. /* Some formats have two neighbour pixels interleaved together. */
  1986. /* To describe such format, set the flag to 1 and add another */
  1987. /* like this one describing the odd pixel format. */
  1988. gctBOOL interleaved;
  1989. /* sRGB format. */
  1990. gctBOOL sRGB;
  1991. /* Format components. */
  1992. gcuPIXEL_FORMAT_CLASS u;
  1993. /* Format components. */
  1994. gcuPIXEL_FORMAT_CLASS uOdd;
  1995. /* Render format. */
  1996. gceSURF_FORMAT closestRenderFormat;
  1997. /*gctCLOSEST_FORMAT dynamicClosestRenderFormat;*/
  1998. gctUINT renderFormat;
  1999. const gceTEXTURE_SWIZZLE * pixelSwizzle;
  2000. /* Texture format. */
  2001. gceSURF_FORMAT closestTXFormat;
  2002. gctUINT txFormat;
  2003. const gceTEXTURE_SWIZZLE * txSwizzle;
  2004. gctBOOL txIntFilter;
  2005. }
  2006. gcsSURF_FORMAT_INFO;
  2007. /* Frame buffer information. */
  2008. typedef struct _gcsSURF_FRAMEBUFFER
  2009. {
  2010. gctPOINTER logical;
  2011. gctUINT width, height;
  2012. gctINT stride;
  2013. gceSURF_FORMAT format;
  2014. }
  2015. gcsSURF_FRAMEBUFFER;
  2016. /* Generic pixel component descriptors. */
  2017. extern gcsFORMAT_COMPONENT gcvPIXEL_COMP_XXX8;
  2018. extern gcsFORMAT_COMPONENT gcvPIXEL_COMP_XX8X;
  2019. extern gcsFORMAT_COMPONENT gcvPIXEL_COMP_X8XX;
  2020. extern gcsFORMAT_COMPONENT gcvPIXEL_COMP_8XXX;
  2021. typedef enum _gceORIENTATION
  2022. {
  2023. gcvORIENTATION_TOP_BOTTOM,
  2024. gcvORIENTATION_BOTTOM_TOP,
  2025. }
  2026. gceORIENTATION;
  2027. /* Construct a new gcoSURF object. */
  2028. gceSTATUS
  2029. gcoSURF_Construct(
  2030. IN gcoHAL Hal,
  2031. IN gctUINT Width,
  2032. IN gctUINT Height,
  2033. IN gctUINT Depth,
  2034. IN gceSURF_TYPE Type,
  2035. IN gceSURF_FORMAT Format,
  2036. IN gcePOOL Pool,
  2037. OUT gcoSURF * Surface
  2038. );
  2039. /* Destroy an gcoSURF object. */
  2040. gceSTATUS
  2041. gcoSURF_Destroy(
  2042. IN gcoSURF Surface
  2043. );
  2044. /* Map user-allocated surface. */
  2045. gceSTATUS
  2046. gcoSURF_MapUserSurface(
  2047. IN gcoSURF Surface,
  2048. IN gctUINT Alignment,
  2049. IN gctPOINTER Logical,
  2050. IN gctUINT32 Physical
  2051. );
  2052. /* Wrapp surface with known logical/GPU address */
  2053. gceSTATUS
  2054. gcoSURF_WrapSurface(
  2055. IN gcoSURF Surface,
  2056. IN gctUINT Alignment,
  2057. IN gctPOINTER Logical,
  2058. IN gctUINT32 Physical
  2059. );
  2060. /* Query vid mem node info. */
  2061. gceSTATUS
  2062. gcoSURF_QueryVidMemNode(
  2063. IN gcoSURF Surface,
  2064. OUT gctUINT32 * Node,
  2065. OUT gcePOOL * Pool,
  2066. OUT gctSIZE_T_PTR Bytes
  2067. );
  2068. /* Set the color type of the surface. */
  2069. gceSTATUS
  2070. gcoSURF_SetColorType(
  2071. IN gcoSURF Surface,
  2072. IN gceSURF_COLOR_TYPE ColorType
  2073. );
  2074. /* Get the color type of the surface. */
  2075. gceSTATUS
  2076. gcoSURF_GetColorType(
  2077. IN gcoSURF Surface,
  2078. OUT gceSURF_COLOR_TYPE *ColorType
  2079. );
  2080. /* Set the color space of the surface. */
  2081. gceSTATUS
  2082. gcoSURF_SetColorSpace(
  2083. IN gcoSURF Surface,
  2084. IN gceSURF_COLOR_SPACE ColorSpace
  2085. );
  2086. /* Get the color space of the surface. */
  2087. gceSTATUS
  2088. gcoSURF_GetColorSpace(
  2089. IN gcoSURF Surface,
  2090. OUT gceSURF_COLOR_SPACE *ColorSpace
  2091. );
  2092. /* Set the surface ration angle. */
  2093. gceSTATUS
  2094. gcoSURF_SetRotation(
  2095. IN gcoSURF Surface,
  2096. IN gceSURF_ROTATION Rotation
  2097. );
  2098. gceSTATUS
  2099. gcoSURF_IsValid(
  2100. IN gcoSURF Surface
  2101. );
  2102. #if gcdENABLE_3D
  2103. /* Verify and return the state of the tile status mechanism. */
  2104. gceSTATUS
  2105. gcoSURF_IsTileStatusSupported(
  2106. IN gcoSURF Surface
  2107. );
  2108. /* Verify if surface has tile status enabled. */
  2109. gceSTATUS
  2110. gcoSURF_IsTileStatusEnabled(
  2111. IN gcoSURF Surface
  2112. );
  2113. /* Verify if surface is compressed. */
  2114. gceSTATUS
  2115. gcoSURF_IsCompressed(
  2116. IN gcoSURF Surface
  2117. );
  2118. /* Enable tile status for the specified surface on zero slot. */
  2119. gceSTATUS
  2120. gcoSURF_EnableTileStatus(
  2121. IN gcoSURF Surface
  2122. );
  2123. /* Enable tile status for the specified surface on specified slot. */
  2124. gceSTATUS
  2125. gcoSURF_EnableTileStatusEx(
  2126. IN gcoSURF Surface,
  2127. IN gctUINT RtIndex
  2128. );
  2129. /* Disable tile status for the specified surface. */
  2130. gceSTATUS
  2131. gcoSURF_DisableTileStatus(
  2132. IN gcoSURF Surface,
  2133. IN gctBOOL Decompress
  2134. );
  2135. /* Flush tile status cache for the specified surface. */
  2136. gceSTATUS
  2137. gcoSURF_FlushTileStatus(
  2138. IN gcoSURF Surface,
  2139. IN gctBOOL Decompress
  2140. );
  2141. #endif /* gcdENABLE_3D */
  2142. /* Get surface size. */
  2143. gceSTATUS
  2144. gcoSURF_GetSize(
  2145. IN gcoSURF Surface,
  2146. OUT gctUINT * Width,
  2147. OUT gctUINT * Height,
  2148. OUT gctUINT * Depth
  2149. );
  2150. /* Get surface aligned sizes. */
  2151. gceSTATUS
  2152. gcoSURF_GetAlignedSize(
  2153. IN gcoSURF Surface,
  2154. OUT gctUINT * Width,
  2155. OUT gctUINT * Height,
  2156. OUT gctINT * Stride
  2157. );
  2158. /* Get alignments. */
  2159. gceSTATUS
  2160. gcoSURF_GetAlignment(
  2161. IN gceSURF_TYPE Type,
  2162. IN gceSURF_FORMAT Format,
  2163. OUT gctUINT * AddressAlignment,
  2164. OUT gctUINT * XAlignment,
  2165. OUT gctUINT * YAlignment
  2166. );
  2167. gceSTATUS
  2168. gcoSURF_AlignResolveRect(
  2169. IN gcoSURF Surf,
  2170. IN gcsPOINT_PTR RectOrigin,
  2171. IN gcsPOINT_PTR RectSize,
  2172. OUT gcsPOINT_PTR AlignedOrigin,
  2173. OUT gcsPOINT_PTR AlignedSize
  2174. );
  2175. /* Get surface type and format. */
  2176. gceSTATUS
  2177. gcoSURF_GetFormat(
  2178. IN gcoSURF Surface,
  2179. OUT OPTIONAL gceSURF_TYPE * Type,
  2180. OUT OPTIONAL gceSURF_FORMAT * Format
  2181. );
  2182. /* Get surface information */
  2183. gceSTATUS
  2184. gcoSURF_GetFormatInfo(
  2185. IN gcoSURF Surface,
  2186. OUT gcsSURF_FORMAT_INFO_PTR * formatInfo
  2187. );
  2188. /* Get Surface pack format */
  2189. gceSTATUS
  2190. gcoSURF_GetPackedFormat(
  2191. IN gcoSURF Surface,
  2192. OUT gceSURF_FORMAT * Format
  2193. );
  2194. /* Get surface tiling. */
  2195. gceSTATUS
  2196. gcoSURF_GetTiling(
  2197. IN gcoSURF Surface,
  2198. OUT gceTILING * Tiling
  2199. );
  2200. /* Get flip bitmap offset bytes. */
  2201. gceSTATUS
  2202. gcoSURF_GetFlipBitmapOffset(
  2203. IN gcoSURF Surface,
  2204. OUT gctUINT_PTR FlipBitmapOffset
  2205. );
  2206. /* Get bottom buffer offset bytes. */
  2207. gceSTATUS
  2208. gcoSURF_GetBottomBufferOffset(
  2209. IN gcoSURF Surface,
  2210. OUT gctUINT_PTR BottomBufferOffset
  2211. );
  2212. /* Lock the surface. */
  2213. gceSTATUS
  2214. gcoSURF_Lock(
  2215. IN gcoSURF Surface,
  2216. IN OUT gctUINT32 * Address,
  2217. IN OUT gctPOINTER * Memory
  2218. );
  2219. /* Unlock the surface. */
  2220. gceSTATUS
  2221. gcoSURF_Unlock(
  2222. IN gcoSURF Surface,
  2223. IN gctPOINTER Memory
  2224. );
  2225. /*. Query surface flags.*/
  2226. gceSTATUS
  2227. gcoSURF_QueryFlags(
  2228. IN gcoSURF Surface,
  2229. IN gceSURF_FLAG Flag
  2230. );
  2231. /* Return pixel format parameters; Info is required to be a pointer to an
  2232. * array of at least two items because some formats have up to two records
  2233. * of description. */
  2234. gceSTATUS
  2235. gcoSURF_QueryFormat(
  2236. IN gceSURF_FORMAT Format,
  2237. OUT gcsSURF_FORMAT_INFO_PTR * Info
  2238. );
  2239. /* Compute the color pixel mask. */
  2240. gceSTATUS
  2241. gcoSURF_ComputeColorMask(
  2242. IN gcsSURF_FORMAT_INFO_PTR Format,
  2243. OUT gctUINT32_PTR ColorMask
  2244. );
  2245. /* Flush the surface. */
  2246. gceSTATUS
  2247. gcoSURF_Flush(
  2248. IN gcoSURF Surface
  2249. );
  2250. /* Fill surface from it's tile status buffer. */
  2251. gceSTATUS
  2252. gcoSURF_FillFromTile(
  2253. IN gcoSURF Surface
  2254. );
  2255. /* Fill surface with a value. */
  2256. gceSTATUS
  2257. gcoSURF_Fill(
  2258. IN gcoSURF Surface,
  2259. IN gcsPOINT_PTR Origin,
  2260. IN gcsSIZE_PTR Size,
  2261. IN gctUINT32 Value,
  2262. IN gctUINT32 Mask
  2263. );
  2264. /* Alpha blend two surfaces together. */
  2265. gceSTATUS
  2266. gcoSURF_Blend(
  2267. IN gcoSURF SrcSurface,
  2268. IN gcoSURF DestSurface,
  2269. IN gcsPOINT_PTR SrcOrig,
  2270. IN gcsPOINT_PTR DestOrigin,
  2271. IN gcsSIZE_PTR Size,
  2272. IN gceSURF_BLEND_MODE Mode
  2273. );
  2274. /* Create a new gcoSURF wrapper object. */
  2275. gceSTATUS
  2276. gcoSURF_ConstructWrapper(
  2277. IN gcoHAL Hal,
  2278. OUT gcoSURF * Surface
  2279. );
  2280. /* Set surface flags.*/
  2281. gceSTATUS
  2282. gcoSURF_SetFlags(
  2283. IN gcoSURF Surface,
  2284. IN gceSURF_FLAG Flag,
  2285. IN gctBOOL Value
  2286. );
  2287. /* Set the underlying buffer for the surface wrapper. */
  2288. gceSTATUS
  2289. gcoSURF_SetBuffer(
  2290. IN gcoSURF Surface,
  2291. IN gceSURF_TYPE Type,
  2292. IN gceSURF_FORMAT Format,
  2293. IN gctUINT Stride,
  2294. IN gctPOINTER Logical,
  2295. IN gctUINT32 Physical
  2296. );
  2297. /* Set the size of the surface in pixels and map the underlying buffer. */
  2298. gceSTATUS
  2299. gcoSURF_SetWindow(
  2300. IN gcoSURF Surface,
  2301. IN gctUINT X,
  2302. IN gctUINT Y,
  2303. IN gctUINT Width,
  2304. IN gctUINT Height
  2305. );
  2306. /* Set width/height alignment of the surface directly and calculate stride/size. This is only for dri backend now. Please be careful before use. */
  2307. gceSTATUS
  2308. gcoSURF_SetAlignment(
  2309. IN gcoSURF Surface,
  2310. IN gctUINT Width,
  2311. IN gctUINT Height
  2312. );
  2313. /* Increase reference count of the surface. */
  2314. gceSTATUS
  2315. gcoSURF_ReferenceSurface(
  2316. IN gcoSURF Surface
  2317. );
  2318. /* Get surface reference count. */
  2319. gceSTATUS
  2320. gcoSURF_QueryReferenceCount(
  2321. IN gcoSURF Surface,
  2322. OUT gctINT32 * ReferenceCount
  2323. );
  2324. /* Set surface orientation. */
  2325. gceSTATUS
  2326. gcoSURF_SetOrientation(
  2327. IN gcoSURF Surface,
  2328. IN gceORIENTATION Orientation
  2329. );
  2330. /* Query surface orientation. */
  2331. gceSTATUS
  2332. gcoSURF_QueryOrientation(
  2333. IN gcoSURF Surface,
  2334. OUT gceORIENTATION * Orientation
  2335. );
  2336. gceSTATUS
  2337. gcoSURF_SetOffset(
  2338. IN gcoSURF Surface,
  2339. IN gctSIZE_T Offset
  2340. );
  2341. gceSTATUS
  2342. gcoSURF_NODE_Cache(
  2343. IN gcsSURF_NODE_PTR Node,
  2344. IN gctPOINTER Logical,
  2345. IN gctSIZE_T Bytes,
  2346. IN gceCACHEOPERATION Operation
  2347. );
  2348. /* Lock and unlock surface node */
  2349. gceSTATUS
  2350. gcoSURF_LockNode(
  2351. IN gcsSURF_NODE_PTR Node,
  2352. OUT gctUINT32 * Address,
  2353. OUT gctPOINTER * Memory
  2354. );
  2355. gceSTATUS
  2356. gcoSURF_UnLockNode(
  2357. IN gcsSURF_NODE_PTR Node,
  2358. IN gceSURF_TYPE Type
  2359. );
  2360. /* Perform CPU cache operation on surface node */
  2361. gceSTATUS
  2362. gcoSURF_NODE_CPUCacheOperation(
  2363. IN gcsSURF_NODE_PTR Node,
  2364. IN gceSURF_TYPE Type,
  2365. IN gctSIZE_T Offset,
  2366. IN gctSIZE_T Length,
  2367. IN gceCACHEOPERATION Operation
  2368. );
  2369. /* Perform CPU cache operation on surface */
  2370. gceSTATUS
  2371. gcoSURF_CPUCacheOperation(
  2372. IN gcoSURF Surface,
  2373. IN gceCACHEOPERATION Operation
  2374. );
  2375. gceSTATUS
  2376. gcoSURF_Swap(
  2377. IN gcoSURF Surface1,
  2378. IN gcoSURF Surface2
  2379. );
  2380. gceSTATUS
  2381. gcoSURF_ResetSurWH(
  2382. IN gcoSURF Surface,
  2383. IN gctUINT oriw,
  2384. IN gctUINT orih,
  2385. IN gctUINT alignw,
  2386. IN gctUINT alignh,
  2387. IN gceSURF_FORMAT fmt
  2388. );
  2389. /* Update surface timestamp. */
  2390. gceSTATUS
  2391. gcoSURF_UpdateTimeStamp(
  2392. IN gcoSURF Surface
  2393. );
  2394. /* Query surface current timestamp. */
  2395. gceSTATUS
  2396. gcoSURF_QueryTimeStamp(
  2397. IN gcoSURF Surface,
  2398. OUT gctUINT64 * TimeStamp
  2399. );
  2400. /*
  2401. * Allocate shared buffer for this surface, so that
  2402. * surface states can be shared across processes.
  2403. */
  2404. gceSTATUS
  2405. gcoSURF_AllocShBuffer(
  2406. IN gcoSURF Surface,
  2407. OUT gctSHBUF * ShBuf
  2408. );
  2409. /* Bind shared buffer to this surface */
  2410. gceSTATUS
  2411. gcoSURF_BindShBuffer(
  2412. IN gcoSURF Surface,
  2413. IN gctSHBUF ShBuf
  2414. );
  2415. /* Push surface shared states to shared buffer. */
  2416. gceSTATUS
  2417. gcoSURF_PushSharedInfo(
  2418. IN gcoSURF Surface
  2419. );
  2420. /* Pop shared states from shared buffer. */
  2421. gceSTATUS
  2422. gcoSURF_PopSharedInfo(
  2423. IN gcoSURF Surface
  2424. );
  2425. #if (gcdENABLE_3D || gcdENABLE_VG)
  2426. /* Copy surface. */
  2427. gceSTATUS
  2428. gcoSURF_Copy(
  2429. IN gcoSURF Surface,
  2430. IN gcoSURF Source
  2431. );
  2432. /* Set number of samples for a gcoSURF object. */
  2433. gceSTATUS
  2434. gcoSURF_SetSamples(
  2435. IN gcoSURF Surface,
  2436. IN gctUINT Samples
  2437. );
  2438. /* Get the number of samples per pixel. */
  2439. gceSTATUS
  2440. gcoSURF_GetSamples(
  2441. IN gcoSURF Surface,
  2442. OUT gctUINT_PTR Samples
  2443. );
  2444. #endif
  2445. /******************************************************************************\
  2446. ********************************* gcoDUMP Object ********************************
  2447. \******************************************************************************/
  2448. /* Construct a new gcoDUMP object. */
  2449. gceSTATUS
  2450. gcoDUMP_Construct(
  2451. IN gcoOS Os,
  2452. IN gcoHAL Hal,
  2453. OUT gcoDUMP * Dump
  2454. );
  2455. /* Destroy a gcoDUMP object. */
  2456. gceSTATUS
  2457. gcoDUMP_Destroy(
  2458. IN gcoDUMP Dump
  2459. );
  2460. /* Enable/disable dumping. */
  2461. gceSTATUS
  2462. gcoDUMP_Control(
  2463. IN gcoDUMP Dump,
  2464. IN gctSTRING FileName
  2465. );
  2466. gceSTATUS
  2467. gcoDUMP_IsEnabled(
  2468. IN gcoDUMP Dump,
  2469. OUT gctBOOL * Enabled
  2470. );
  2471. /* Add surface. */
  2472. gceSTATUS
  2473. gcoDUMP_AddSurface(
  2474. IN gcoDUMP Dump,
  2475. IN gctINT32 Width,
  2476. IN gctINT32 Height,
  2477. IN gceSURF_FORMAT PixelFormat,
  2478. IN gctUINT32 Address,
  2479. IN gctSIZE_T ByteCount
  2480. );
  2481. /* Mark the beginning of a frame. */
  2482. gceSTATUS
  2483. gcoDUMP_FrameBegin(
  2484. IN gcoDUMP Dump
  2485. );
  2486. /* Mark the end of a frame. */
  2487. gceSTATUS
  2488. gcoDUMP_FrameEnd(
  2489. IN gcoDUMP Dump
  2490. );
  2491. /* Dump data. */
  2492. gceSTATUS
  2493. gcoDUMP_DumpData(
  2494. IN gcoDUMP Dump,
  2495. IN gceDUMP_TAG Type,
  2496. IN gctUINT32 Address,
  2497. IN gctSIZE_T ByteCount,
  2498. IN gctCONST_POINTER Data
  2499. );
  2500. /* Delete an address. */
  2501. gceSTATUS
  2502. gcoDUMP_Delete(
  2503. IN gcoDUMP Dump,
  2504. IN gctUINT32 Address
  2505. );
  2506. /* Enable dump or not. */
  2507. gceSTATUS
  2508. gcoDUMP_SetDumpFlag(
  2509. IN gctBOOL DumpState
  2510. );
  2511. /******************************************************************************\
  2512. ******************************* gcsRECT Structure ******************************
  2513. \******************************************************************************/
  2514. /* Initialize rectangle structure. */
  2515. gceSTATUS
  2516. gcsRECT_Set(
  2517. OUT gcsRECT_PTR Rect,
  2518. IN gctINT32 Left,
  2519. IN gctINT32 Top,
  2520. IN gctINT32 Right,
  2521. IN gctINT32 Bottom
  2522. );
  2523. /* Return the width of the rectangle. */
  2524. gceSTATUS
  2525. gcsRECT_Width(
  2526. IN gcsRECT_PTR Rect,
  2527. OUT gctINT32 * Width
  2528. );
  2529. /* Return the height of the rectangle. */
  2530. gceSTATUS
  2531. gcsRECT_Height(
  2532. IN gcsRECT_PTR Rect,
  2533. OUT gctINT32 * Height
  2534. );
  2535. /* Ensure that top left corner is to the left and above the right bottom. */
  2536. gceSTATUS
  2537. gcsRECT_Normalize(
  2538. IN OUT gcsRECT_PTR Rect
  2539. );
  2540. /* Compare two rectangles. */
  2541. gceSTATUS
  2542. gcsRECT_IsEqual(
  2543. IN gcsRECT_PTR Rect1,
  2544. IN gcsRECT_PTR Rect2,
  2545. OUT gctBOOL * Equal
  2546. );
  2547. /* Compare the sizes of two rectangles. */
  2548. gceSTATUS
  2549. gcsRECT_IsOfEqualSize(
  2550. IN gcsRECT_PTR Rect1,
  2551. IN gcsRECT_PTR Rect2,
  2552. OUT gctBOOL * EqualSize
  2553. );
  2554. gceSTATUS
  2555. gcsRECT_RelativeRotation(
  2556. IN gceSURF_ROTATION Orientation,
  2557. IN OUT gceSURF_ROTATION *Relation);
  2558. gceSTATUS
  2559. gcsRECT_Rotate(
  2560. IN OUT gcsRECT_PTR Rect,
  2561. IN gceSURF_ROTATION Rotation,
  2562. IN gceSURF_ROTATION toRotation,
  2563. IN gctINT32 SurfaceWidth,
  2564. IN gctINT32 SurfaceHeight
  2565. );
  2566. /******************************************************************************\
  2567. **************************** gcsBOUNDARY Structure *****************************
  2568. \******************************************************************************/
  2569. typedef struct _gcsBOUNDARY
  2570. {
  2571. gctINT x;
  2572. gctINT y;
  2573. gctINT width;
  2574. gctINT height;
  2575. }
  2576. gcsBOUNDARY;
  2577. /******************************************************************************\
  2578. ********************************* gcoHEAP Object ********************************
  2579. \******************************************************************************/
  2580. typedef struct _gcoHEAP * gcoHEAP;
  2581. /* Construct a new gcoHEAP object. */
  2582. gceSTATUS
  2583. gcoHEAP_Construct(
  2584. IN gcoOS Os,
  2585. IN gctSIZE_T AllocationSize,
  2586. OUT gcoHEAP * Heap
  2587. );
  2588. /* Destroy an gcoHEAP object. */
  2589. gceSTATUS
  2590. gcoHEAP_Destroy(
  2591. IN gcoHEAP Heap
  2592. );
  2593. /* Allocate memory. */
  2594. gceSTATUS
  2595. gcoHEAP_Allocate(
  2596. IN gcoHEAP Heap,
  2597. IN gctSIZE_T Bytes,
  2598. OUT gctPOINTER * Node
  2599. );
  2600. gceSTATUS
  2601. gcoHEAP_GetMemorySize(
  2602. IN gcoHEAP Heap,
  2603. IN gctPOINTER Memory,
  2604. OUT gctSIZE_T_PTR MemorySize
  2605. );
  2606. /* Free memory. */
  2607. gceSTATUS
  2608. gcoHEAP_Free(
  2609. IN gcoHEAP Heap,
  2610. IN gctPOINTER Node
  2611. );
  2612. #if (VIVANTE_PROFILER || gcdDEBUG)
  2613. /* Profile the heap. */
  2614. gceSTATUS
  2615. gcoHEAP_ProfileStart(
  2616. IN gcoHEAP Heap
  2617. );
  2618. gceSTATUS
  2619. gcoHEAP_ProfileEnd(
  2620. IN gcoHEAP Heap,
  2621. IN gctCONST_STRING Title
  2622. );
  2623. #endif
  2624. /******************************************************************************\
  2625. ******************************* Debugging Macros *******************************
  2626. \******************************************************************************/
  2627. void
  2628. gcoOS_SetDebugLevel(
  2629. IN gctUINT32 Level
  2630. );
  2631. void
  2632. gcoOS_GetDebugLevel(
  2633. OUT gctUINT32_PTR DebugLevel
  2634. );
  2635. void
  2636. gcoOS_SetDebugZone(
  2637. IN gctUINT32 Zone
  2638. );
  2639. void
  2640. gcoOS_GetDebugZone(
  2641. IN gctUINT32 Zone,
  2642. OUT gctUINT32_PTR DebugZone
  2643. );
  2644. void
  2645. gcoOS_SetDebugLevelZone(
  2646. IN gctUINT32 Level,
  2647. IN gctUINT32 Zone
  2648. );
  2649. void
  2650. gcoOS_SetDebugZones(
  2651. IN gctUINT32 Zones,
  2652. IN gctBOOL Enable
  2653. );
  2654. void
  2655. gcoOS_SetDebugFile(
  2656. IN gctCONST_STRING FileName
  2657. );
  2658. gctFILE
  2659. gcoOS_ReplaceDebugFile(
  2660. IN gctFILE fp
  2661. );
  2662. void
  2663. gcoOS_SysTraceBegin(
  2664. IN gctCONST_STRING FuncName
  2665. );
  2666. void
  2667. gcoOS_SysTraceEnd(
  2668. IN void);
  2669. /*******************************************************************************
  2670. **
  2671. ** gcmFATAL
  2672. **
  2673. ** Print a message to the debugger and execute a break point.
  2674. **
  2675. ** ARGUMENTS:
  2676. **
  2677. ** message Message.
  2678. ** ... Optional arguments.
  2679. */
  2680. void
  2681. gckOS_DebugFatal(
  2682. IN gctCONST_STRING Message,
  2683. ...
  2684. );
  2685. void
  2686. gcoOS_DebugFatal(
  2687. IN gctCONST_STRING Message,
  2688. ...
  2689. );
  2690. #if gcmIS_DEBUG(gcdDEBUG_FATAL)
  2691. # define gcmFATAL gcoOS_DebugFatal
  2692. # define gcmkFATAL gckOS_DebugFatal
  2693. #elif gcdHAS_ELLIPSIS
  2694. # define gcmFATAL(...)
  2695. # define gcmkFATAL(...)
  2696. #else
  2697. gcmINLINE static void
  2698. __dummy_fatal(
  2699. IN gctCONST_STRING Message,
  2700. ...
  2701. )
  2702. {
  2703. }
  2704. # define gcmFATAL __dummy_fatal
  2705. # define gcmkFATAL __dummy_fatal
  2706. #endif
  2707. #define gcmENUM2TEXT(e) case e: return #e
  2708. /*******************************************************************************
  2709. **
  2710. ** gcmTRACE
  2711. **
  2712. ** Print a message to the debugfer if the correct level has been set. In
  2713. ** retail mode this macro does nothing.
  2714. **
  2715. ** ARGUMENTS:
  2716. **
  2717. ** level Level of message.
  2718. ** message Message.
  2719. ** ... Optional arguments.
  2720. */
  2721. #define gcvLEVEL_NONE -1
  2722. #define gcvLEVEL_ERROR 0
  2723. #define gcvLEVEL_WARNING 1
  2724. #define gcvLEVEL_INFO 2
  2725. #define gcvLEVEL_VERBOSE 3
  2726. void
  2727. gckOS_DebugTrace(
  2728. IN gctUINT32 Level,
  2729. IN gctCONST_STRING Message,
  2730. ...
  2731. );
  2732. void
  2733. gckOS_DebugTraceN(
  2734. IN gctUINT32 Level,
  2735. IN gctUINT ArgumentSize,
  2736. IN gctCONST_STRING Message,
  2737. ...
  2738. );
  2739. void
  2740. gcoOS_DebugTrace(
  2741. IN gctUINT32 Level,
  2742. IN gctCONST_STRING Message,
  2743. ...
  2744. );
  2745. #if gcmIS_DEBUG(gcdDEBUG_TRACE)
  2746. # define gcmTRACE gcoOS_DebugTrace
  2747. # define gcmkTRACE gckOS_DebugTrace
  2748. # define gcmkTRACE_N gckOS_DebugTraceN
  2749. #elif gcdHAS_ELLIPSIS
  2750. # define gcmTRACE(...)
  2751. # define gcmkTRACE(...)
  2752. # define gcmkTRACE_N(...)
  2753. #else
  2754. gcmINLINE static void
  2755. __dummy_trace(
  2756. IN gctUINT32 Level,
  2757. IN gctCONST_STRING Message,
  2758. ...
  2759. )
  2760. {
  2761. }
  2762. gcmINLINE static void
  2763. __dummy_trace_n(
  2764. IN gctUINT32 Level,
  2765. IN gctUINT ArgumentSize,
  2766. IN gctCONST_STRING Message,
  2767. ...
  2768. )
  2769. {
  2770. }
  2771. # define gcmTRACE __dummy_trace
  2772. # define gcmkTRACE __dummy_trace
  2773. # define gcmkTRACE_N __dummy_trace_n
  2774. #endif
  2775. /* Zones common for kernel and user. */
  2776. #define gcvZONE_OS (1 << 0)
  2777. #define gcvZONE_HARDWARE (1 << 1)
  2778. #define gcvZONE_HEAP (1 << 2)
  2779. #define gcvZONE_SIGNAL (1 << 27)
  2780. /* Kernel zones. */
  2781. #define gcvZONE_KERNEL (1 << 3)
  2782. #define gcvZONE_VIDMEM (1 << 4)
  2783. #define gcvZONE_COMMAND (1 << 5)
  2784. #define gcvZONE_DRIVER (1 << 6)
  2785. #define gcvZONE_CMODEL (1 << 7)
  2786. #define gcvZONE_MMU (1 << 8)
  2787. #define gcvZONE_EVENT (1 << 9)
  2788. #define gcvZONE_DEVICE (1 << 10)
  2789. #define gcvZONE_DATABASE (1 << 11)
  2790. #define gcvZONE_INTERRUPT (1 << 12)
  2791. #define gcvZONE_POWER (1 << 13)
  2792. /* User zones. */
  2793. #define gcvZONE_HAL (1 << 3)
  2794. #define gcvZONE_BUFFER (1 << 4)
  2795. #define gcvZONE_CONTEXT (1 << 5)
  2796. #define gcvZONE_SURFACE (1 << 6)
  2797. #define gcvZONE_INDEX (1 << 7)
  2798. #define gcvZONE_STREAM (1 << 8)
  2799. #define gcvZONE_TEXTURE (1 << 9)
  2800. #define gcvZONE_2D (1 << 10)
  2801. #define gcvZONE_3D (1 << 11)
  2802. #define gcvZONE_COMPILER (1 << 12)
  2803. #define gcvZONE_MEMORY (1 << 13)
  2804. #define gcvZONE_STATE (1 << 14)
  2805. #define gcvZONE_AUX (1 << 15)
  2806. #define gcvZONE_VERTEX (1 << 16)
  2807. #define gcvZONE_CL (1 << 17)
  2808. #define gcvZONE_COMPOSITION (1 << 17)
  2809. #define gcvZONE_VG (1 << 18)
  2810. #define gcvZONE_IMAGE (1 << 19)
  2811. #define gcvZONE_UTILITY (1 << 20)
  2812. #define gcvZONE_PARAMETERS (1 << 21)
  2813. #define gcvZONE_BUFOBJ (1 << 22)
  2814. #define gcvZONE_SHADER (1 << 23)
  2815. #define gcvZONE_STREAM_OUT (1 << 24)
  2816. /* API definitions. */
  2817. #define gcvZONE_API_HAL (1 << 28)
  2818. #define gcvZONE_API_EGL (2 << 28)
  2819. #define gcvZONE_API_ES11 (3 << 28)
  2820. #define gcvZONE_API_ES20 (4 << 28)
  2821. #define gcvZONE_API_VG11 (5 << 28)
  2822. #define gcvZONE_API_GL (6 << 28)
  2823. #define gcvZONE_API_DFB (7 << 28)
  2824. #define gcvZONE_API_GDI ((gctUINT32)8 << 28)
  2825. #define gcvZONE_API_D3D ((gctUINT32)9 << 28)
  2826. #define gcvZONE_API_ES30 ((gctUINT32)10 << 28)
  2827. #define gcmZONE_GET_API(zone) ((zone) >> 28)
  2828. /*Set gcdZONE_MASE like 0x0 | gcvZONE_API_EGL
  2829. will enable print EGL module debug info*/
  2830. #define gcdZONE_MASK 0x0FFFFFFF
  2831. /* Handy zones. */
  2832. #define gcvZONE_NONE 0
  2833. #define gcvZONE_ALL 0x0FFFFFFF
  2834. /*Dump API depth set 1 for API, 2 for API and API behavior*/
  2835. #define gcvDUMP_API_DEPTH 1
  2836. /*******************************************************************************
  2837. **
  2838. ** gcmTRACE_ZONE
  2839. **
  2840. ** Print a message to the debugger if the correct level and zone has been
  2841. ** set. In retail mode this macro does nothing.
  2842. **
  2843. ** ARGUMENTS:
  2844. **
  2845. ** Level Level of message.
  2846. ** Zone Zone of message.
  2847. ** Message Message.
  2848. ** ... Optional arguments.
  2849. */
  2850. void
  2851. gckOS_DebugTraceZone(
  2852. IN gctUINT32 Level,
  2853. IN gctUINT32 Zone,
  2854. IN gctCONST_STRING Message,
  2855. ...
  2856. );
  2857. void
  2858. gckOS_DebugTraceZoneN(
  2859. IN gctUINT32 Level,
  2860. IN gctUINT32 Zone,
  2861. IN gctUINT ArgumentSize,
  2862. IN gctCONST_STRING Message,
  2863. ...
  2864. );
  2865. void
  2866. gcoOS_DebugTraceZone(
  2867. IN gctUINT32 Level,
  2868. IN gctUINT32 Zone,
  2869. IN gctCONST_STRING Message,
  2870. ...
  2871. );
  2872. #if gcmIS_DEBUG(gcdDEBUG_TRACE)
  2873. # define gcmTRACE_ZONE gcoOS_DebugTraceZone
  2874. # define gcmkTRACE_ZONE gckOS_DebugTraceZone
  2875. # define gcmkTRACE_ZONE_N gckOS_DebugTraceZoneN
  2876. #elif gcdHAS_ELLIPSIS
  2877. # define gcmTRACE_ZONE(...)
  2878. # define gcmkTRACE_ZONE(...)
  2879. # define gcmkTRACE_ZONE_N(...)
  2880. #else
  2881. gcmINLINE static void
  2882. __dummy_trace_zone(
  2883. IN gctUINT32 Level,
  2884. IN gctUINT32 Zone,
  2885. IN gctCONST_STRING Message,
  2886. ...
  2887. )
  2888. {
  2889. }
  2890. gcmINLINE static void
  2891. __dummy_trace_zone_n(
  2892. IN gctUINT32 Level,
  2893. IN gctUINT32 Zone,
  2894. IN gctUINT ArgumentSize,
  2895. IN gctCONST_STRING Message,
  2896. ...
  2897. )
  2898. {
  2899. }
  2900. # define gcmTRACE_ZONE __dummy_trace_zone
  2901. # define gcmkTRACE_ZONE __dummy_trace_zone
  2902. # define gcmkTRACE_ZONE_N __dummy_trace_zone_n
  2903. #endif
  2904. /*******************************************************************************
  2905. **
  2906. ** gcmDEBUG_ONLY
  2907. **
  2908. ** Execute a statement or function only in DEBUG mode.
  2909. **
  2910. ** ARGUMENTS:
  2911. **
  2912. ** f Statement or function to execute.
  2913. */
  2914. #if gcmIS_DEBUG(gcdDEBUG_CODE)
  2915. # define gcmDEBUG_ONLY(f) f
  2916. #else
  2917. # define gcmDEBUG_ONLY(f)
  2918. #endif
  2919. /*******************************************************************************
  2920. **
  2921. ** gcmSTACK_PUSH
  2922. ** gcmSTACK_POP
  2923. ** gcmSTACK_DUMP
  2924. **
  2925. ** Push or pop a function with entry arguments on the trace stack.
  2926. **
  2927. ** ARGUMENTS:
  2928. **
  2929. ** Function Name of function.
  2930. ** Line Line number.
  2931. ** Text Optional text.
  2932. ** ... Optional arguments for text.
  2933. */
  2934. #if gcmIS_DEBUG(gcdDEBUG_STACK)
  2935. void gcoOS_StackPush(IN gctINT8_PTR Identity, IN gctCONST_STRING Function, IN gctINT Line, IN gctCONST_STRING Text, ...);
  2936. void gcoOS_StackPop(IN gctINT8_PTR Identity, IN gctCONST_STRING Function);
  2937. void gcoOS_StackDump(void);
  2938. void gcoOS_StackRemove(IN gctHANDLE Thread);
  2939. # define gcmSTACK_PUSH gcoOS_StackPush
  2940. # define gcmSTACK_POP gcoOS_StackPop
  2941. # define gcmSTACK_DUMP gcoOS_StackDump
  2942. # define gcmSTACK_REMOVE gcoOS_StackRemove
  2943. #elif gcdHAS_ELLIPSIS
  2944. # define gcmSTACK_PUSH(...) do { } while (0)
  2945. # define gcmSTACK_POP(...) do { } while (0)
  2946. # define gcmSTACK_DUMP() do { } while (0)
  2947. # define gcmSTACK_REMOVE(...) do { } while (0)
  2948. #else
  2949. gcmINLINE static void
  2950. __dummy_stack_push(
  2951. IN gctCONST_STRING Function,
  2952. IN gctINT Line,
  2953. IN gctCONST_STRING Text, ...
  2954. )
  2955. {
  2956. }
  2957. # define gcmSTACK_PUSH __dummy_stack_push
  2958. # define gcmSTACK_POP(a,b) do { } while (0)
  2959. # define gcmSTACK_DUMP() do { } while (0)
  2960. # define gcmSTACK_REMOVE(a) do { } while (0)
  2961. #endif
  2962. /******************************************************************************\
  2963. ******************************** Binary Trace **********************************
  2964. \******************************************************************************/
  2965. typedef struct _gcsBINARY_TRACE_MESSAGE * gcsBINARY_TRACE_MESSAGE_PTR;
  2966. typedef struct _gcsBINARY_TRACE_MESSAGE
  2967. {
  2968. gctUINT32 signature;
  2969. gctUINT32 pid;
  2970. gctUINT32 tid;
  2971. gctUINT32 line;
  2972. gctUINT32 numArguments;
  2973. gctUINT8 payload;
  2974. }
  2975. gcsBINARY_TRACE_MESSAGE;
  2976. #define gcdBINARY_TRACE_MESSAGE_SIZE 240
  2977. #if gcdBINARY_TRACE
  2978. void
  2979. gcoOS_BinaryTrace(
  2980. IN gctCONST_STRING Function,
  2981. IN gctINT Line,
  2982. IN gctCONST_STRING Text OPTIONAL,
  2983. ...
  2984. );
  2985. void
  2986. gckOS_BinaryTrace(
  2987. IN gctCONST_STRING Function,
  2988. IN gctINT Line,
  2989. IN gctCONST_STRING Text OPTIONAL,
  2990. ...
  2991. );
  2992. # define gcmBINARY_TRACE gcoOS_BinaryTrace
  2993. # define gcmkBINARY_TRACE gckOS_BinaryTrace
  2994. #elif gcdHAS_ELLIPSIS
  2995. # define gcmBINARY_TRACE(Function, Line, Text, ...)
  2996. # define gcmkBINARY_TRACE(Function, Line, Text, ...)
  2997. #else
  2998. gcmINLINE static void
  2999. __dummy_binary_trace(
  3000. IN gctCONST_STRING Function,
  3001. IN gctINT Line,
  3002. IN gctCONST_STRING Text,
  3003. )
  3004. {
  3005. }
  3006. # define gcmBINARY_TRACE __dummy_binary_trace
  3007. # define gcmkBINARY_TRACE __dummy_binary_trace
  3008. #endif
  3009. /******************************************************************************\
  3010. ******************************** Logging Macros ********************************
  3011. \******************************************************************************/
  3012. #define gcdHEADER_LEVEL gcvLEVEL_VERBOSE
  3013. #ifndef gcdEMPTY_HEADER_FOOTER
  3014. #define gcdEMPTY_HEADER_FOOTER 0
  3015. #endif
  3016. #if gcdENABLE_PROFILING
  3017. void
  3018. gcoOS_ProfileDB(
  3019. IN gctCONST_STRING Function,
  3020. IN OUT gctBOOL_PTR Initialized
  3021. );
  3022. #define gcmHEADER() \
  3023. gctINT8 __user__ = 1; \
  3024. static gctBOOL __profile__initialized__ = gcvFALSE; \
  3025. gcmSTACK_PUSH(&__user__, __FUNCTION__, __LINE__, gcvNULL, gcvNULL); \
  3026. gcoOS_ProfileDB(__FUNCTION__, &__profile__initialized__)
  3027. #define gcmHEADER_ARG(...) \
  3028. gctINT8 __user__ = 1; \
  3029. static gctBOOL __profile__initialized__ = gcvFALSE; \
  3030. gcmSTACK_PUSH(&__user__, __FUNCTION__, __LINE__, Text, __VA_ARGS__); \
  3031. gcoOS_ProfileDB(__FUNCTION__, &__profile__initialized__)
  3032. #define gcmFOOTER() \
  3033. gcmSTACK_POP(&__user__, __FUNCTION__); \
  3034. gcoOS_ProfileDB(__FUNCTION__, gcvNULL)
  3035. #define gcmFOOTER_NO() \
  3036. gcmSTACK_POP(&__user__, __FUNCTION__); \
  3037. gcoOS_ProfileDB(__FUNCTION__, gcvNULL)
  3038. #define gcmFOOTER_ARG(...) \
  3039. gcmSTACK_POP(&__user__, __FUNCTION__); \
  3040. gcoOS_ProfileDB(__FUNCTION__, gcvNULL)
  3041. #define gcmFOOTER_KILL() \
  3042. gcmSTACK_POP(&__user__, __FUNCTION__); \
  3043. gcoOS_ProfileDB(gcvNULL, gcvNULL)
  3044. #else /* gcdENABLE_PROFILING */
  3045. #if gcdEMPTY_HEADER_FOOTER
  3046. # define gcmHEADER()
  3047. #elif gcdHAS_ELLIPSIS
  3048. #define gcmHEADER() \
  3049. gctINT8 __user__ = 1; \
  3050. gctINT8_PTR __user_ptr__ = &__user__; \
  3051. gcmSTACK_PUSH(__user_ptr__, __FUNCTION__, __LINE__, gcvNULL, gcvNULL); \
  3052. gcmBINARY_TRACE(__FUNCTION__, __LINE__, gcvNULL, gcvNULL); \
  3053. gcmTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \
  3054. "++%s(%d)", __FUNCTION__, __LINE__)
  3055. #else
  3056. gcmINLINE static void
  3057. __dummy_header(void)
  3058. {
  3059. }
  3060. # define gcmHEADER __dummy_header
  3061. #endif
  3062. #if gcdHAS_ELLIPSIS
  3063. #if gcdEMPTY_HEADER_FOOTER
  3064. # define gcmHEADER_ARG(Text, ...)
  3065. #else
  3066. # define gcmHEADER_ARG(Text, ...) \
  3067. gctINT8 __user__ = 1; \
  3068. gctINT8_PTR __user_ptr__ = &__user__; \
  3069. gcmSTACK_PUSH(__user_ptr__, __FUNCTION__, __LINE__, Text, __VA_ARGS__); \
  3070. gcmBINARY_TRACE(__FUNCTION__, __LINE__, Text, __VA_ARGS__); \
  3071. gcmTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \
  3072. "++%s(%d): " Text, __FUNCTION__, __LINE__, __VA_ARGS__)
  3073. #endif
  3074. #else
  3075. gcmINLINE static void
  3076. __dummy_header_arg(
  3077. IN gctCONST_STRING Text,
  3078. ...
  3079. )
  3080. {
  3081. }
  3082. # define gcmHEADER_ARG __dummy_header_arg
  3083. #endif
  3084. #if gcdEMPTY_HEADER_FOOTER
  3085. # define gcmFOOTER()
  3086. #elif gcdHAS_ELLIPSIS
  3087. # define gcmFOOTER() \
  3088. gcmSTACK_POP(__user_ptr__, __FUNCTION__); \
  3089. gcmBINARY_TRACE(__FUNCTION__, __LINE__, gcvNULL, gcvNULL); \
  3090. gcmTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \
  3091. "--%s(%d): status=%d(%s)", \
  3092. __FUNCTION__, __LINE__, \
  3093. status, gcoOS_DebugStatus2Name(status)); \
  3094. *__user_ptr__ -= 1
  3095. #else
  3096. gcmINLINE static void
  3097. __dummy_footer(void)
  3098. {
  3099. }
  3100. # define gcmFOOTER __dummy_footer
  3101. #endif
  3102. #if gcdEMPTY_HEADER_FOOTER
  3103. # define gcmFOOTER_NO()
  3104. #elif gcdHAS_ELLIPSIS
  3105. #define gcmFOOTER_NO() \
  3106. gcmSTACK_POP(__user_ptr__, __FUNCTION__); \
  3107. gcmBINARY_TRACE(__FUNCTION__, __LINE__, gcvNULL, gcvNULL); \
  3108. gcmTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \
  3109. "--%s(%d)", __FUNCTION__, __LINE__); \
  3110. *__user_ptr__ -= 1
  3111. #else
  3112. gcmINLINE static void
  3113. __dummy_footer_no(void)
  3114. {
  3115. }
  3116. # define gcmFOOTER_NO __dummy_footer_no
  3117. #endif
  3118. #if gcdEMPTY_HEADER_FOOTER
  3119. # define gcmFOOTER_KILL()
  3120. #elif gcdHAS_ELLIPSIS
  3121. #define gcmFOOTER_KILL() \
  3122. gcmSTACK_POP(__user_ptr__, __FUNCTION__); \
  3123. gcmBINARY_TRACE(__FUNCTION__, __LINE__, gcvNULL, gcvNULL); \
  3124. gcmTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \
  3125. "--%s(%d)", __FUNCTION__, __LINE__); \
  3126. *__user_ptr__ -= 1
  3127. #else
  3128. gcmINLINE static void
  3129. __dummy_footer_kill(void)
  3130. {
  3131. }
  3132. # define gcmFOOTER_KILL __dummy_footer_kill
  3133. #endif
  3134. #if gcdHAS_ELLIPSIS
  3135. #if gcdEMPTY_HEADER_FOOTER
  3136. # define gcmFOOTER_ARG(Text, ...)
  3137. #else
  3138. # define gcmFOOTER_ARG(Text, ...) \
  3139. gcmSTACK_POP(__user_ptr__, __FUNCTION__); \
  3140. gcmBINARY_TRACE(__FUNCTION__, __LINE__, Text, __VA_ARGS__); \
  3141. gcmTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \
  3142. "--%s(%d): " Text, __FUNCTION__, __LINE__, __VA_ARGS__); \
  3143. *__user_ptr__ -= 1
  3144. #endif
  3145. #else
  3146. gcmINLINE static void
  3147. __dummy_footer_arg(
  3148. IN gctCONST_STRING Text,
  3149. ...
  3150. )
  3151. {
  3152. }
  3153. # define gcmFOOTER_ARG __dummy_footer_arg
  3154. #endif
  3155. #endif /* gcdENABLE_PROFILING */
  3156. #if gcdHAS_ELLIPSIS
  3157. #define gcmkHEADER() \
  3158. gctINT8 __kernel__ = 1; \
  3159. gctINT8_PTR __kernel_ptr__ = &__kernel__; \
  3160. gcmkBINARY_TRACE(__FUNCTION__, __LINE__, gcvNULL, gcvNULL); \
  3161. gcmkTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \
  3162. "++%s(%d)", __FUNCTION__, __LINE__)
  3163. #else
  3164. gcmINLINE static void
  3165. __dummy_kheader(void)
  3166. {
  3167. }
  3168. # define gcmkHEADER __dummy_kheader
  3169. #endif
  3170. #if gcdHAS_ELLIPSIS
  3171. # define gcmkHEADER_ARG(Text, ...) \
  3172. gctINT8 __kernel__ = 1; \
  3173. gctINT8_PTR __kernel_ptr__ = &__kernel__; \
  3174. gcmkBINARY_TRACE(__FUNCTION__, __LINE__, Text, __VA_ARGS__); \
  3175. gcmkTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \
  3176. "++%s(%d): " Text, __FUNCTION__, __LINE__, __VA_ARGS__)
  3177. #else
  3178. gcmINLINE static void
  3179. __dummy_kheader_arg(
  3180. IN gctCONST_STRING Text,
  3181. ...
  3182. )
  3183. {
  3184. }
  3185. # define gcmkHEADER_ARG __dummy_kheader_arg
  3186. #endif
  3187. #if gcdHAS_ELLIPSIS
  3188. #define gcmkFOOTER() \
  3189. gcmkBINARY_TRACE(__FUNCTION__, __LINE__, gcvNULL, status); \
  3190. gcmkTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \
  3191. "--%s(%d): status=%d(%s)", \
  3192. __FUNCTION__, __LINE__, status, gckOS_DebugStatus2Name(status)); \
  3193. *__kernel_ptr__ -= 1
  3194. #else
  3195. gcmINLINE static void
  3196. __dummy_kfooter(void)
  3197. {
  3198. }
  3199. # define gcmkFOOTER __dummy_kfooter
  3200. #endif
  3201. #if gcdHAS_ELLIPSIS
  3202. #define gcmkFOOTER_NO() \
  3203. gcmkBINARY_TRACE(__FUNCTION__, __LINE__, gcvNULL, gcvNULL); \
  3204. gcmkTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \
  3205. "--%s(%d)", __FUNCTION__, __LINE__); \
  3206. *__kernel_ptr__ -= 1
  3207. #else
  3208. gcmINLINE static void
  3209. __dummy_kfooter_no(void)
  3210. {
  3211. }
  3212. # define gcmkFOOTER_NO __dummy_kfooter_no
  3213. #endif
  3214. #if gcdHAS_ELLIPSIS
  3215. # define gcmkFOOTER_ARG(Text, ...) \
  3216. gcmkBINARY_TRACE(__FUNCTION__, __LINE__, Text, __VA_ARGS__); \
  3217. gcmkTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \
  3218. "--%s(%d): " Text, \
  3219. __FUNCTION__, __LINE__, __VA_ARGS__); \
  3220. *__kernel_ptr__ -= 1
  3221. #else
  3222. gcmINLINE static void
  3223. __dummy_kfooter_arg(
  3224. IN gctCONST_STRING Text,
  3225. ...
  3226. )
  3227. {
  3228. }
  3229. # define gcmkFOOTER_ARG __dummy_kfooter_arg
  3230. #endif
  3231. #define gcmOPT_VALUE(ptr) (((ptr) == gcvNULL) ? 0 : *(ptr))
  3232. #define gcmOPT_VALUE_INDEX(ptr, index) (((ptr) == gcvNULL) ? 0 : ptr[index])
  3233. #define gcmOPT_POINTER(ptr) (((ptr) == gcvNULL) ? gcvNULL : *(ptr))
  3234. #define gcmOPT_STRING(ptr) (((ptr) == gcvNULL) ? "(nil)" : (ptr))
  3235. void
  3236. gckOS_Print(
  3237. IN gctCONST_STRING Message,
  3238. ...
  3239. );
  3240. void
  3241. gckOS_PrintN(
  3242. IN gctUINT ArgumentSize,
  3243. IN gctCONST_STRING Message,
  3244. ...
  3245. );
  3246. void
  3247. gckOS_CopyPrint(
  3248. IN gctCONST_STRING Message,
  3249. ...
  3250. );
  3251. void
  3252. gcoOS_Print(
  3253. IN gctCONST_STRING Message,
  3254. ...
  3255. );
  3256. #define gcmPRINT gcoOS_Print
  3257. #define gcmkPRINT gckOS_Print
  3258. #define gcmkPRINT_N gckOS_PrintN
  3259. #if gcdPRINT_VERSION
  3260. # define gcmPRINT_VERSION() do { \
  3261. _gcmPRINT_VERSION(gcm); \
  3262. gcmSTACK_DUMP(); \
  3263. } while (0)
  3264. # define gcmkPRINT_VERSION() _gcmPRINT_VERSION(gcmk)
  3265. # define _gcmPRINT_VERSION(prefix) \
  3266. prefix##TRACE(gcvLEVEL_ERROR, \
  3267. "Vivante HAL version %d.%d.%d build %d %s %s", \
  3268. gcvVERSION_MAJOR, gcvVERSION_MINOR, gcvVERSION_PATCH, \
  3269. gcvVERSION_BUILD, gcvVERSION_DATE, gcvVERSION_TIME )
  3270. #else
  3271. # define gcmPRINT_VERSION() do { gcmSTACK_DUMP(); } while (gcvFALSE)
  3272. # define gcmkPRINT_VERSION() do { } while (gcvFALSE)
  3273. #endif
  3274. typedef enum _gceDUMP_BUFFER
  3275. {
  3276. gceDUMP_BUFFER_CONTEXT,
  3277. gceDUMP_BUFFER_USER,
  3278. gceDUMP_BUFFER_KERNEL,
  3279. gceDUMP_BUFFER_LINK,
  3280. gceDUMP_BUFFER_WAITLINK,
  3281. gceDUMP_BUFFER_FROM_USER,
  3282. }
  3283. gceDUMP_BUFFER;
  3284. void
  3285. gckOS_DumpBuffer(
  3286. IN gckOS Os,
  3287. IN gctPOINTER Buffer,
  3288. IN gctUINT Size,
  3289. IN gceDUMP_BUFFER Type,
  3290. IN gctBOOL CopyMessage
  3291. );
  3292. #define gcmkDUMPBUFFER gckOS_DumpBuffer
  3293. #if gcdDUMP_COMMAND
  3294. # define gcmkDUMPCOMMAND(Os, Buffer, Size, Type, CopyMessage) \
  3295. gcmkDUMPBUFFER(Os, Buffer, Size, Type, CopyMessage)
  3296. #else
  3297. # define gcmkDUMPCOMMAND(Os, Buffer, Size, Type, CopyMessage)
  3298. #endif
  3299. #if gcmIS_DEBUG(gcdDEBUG_CODE)
  3300. void
  3301. gckOS_DebugFlush(
  3302. gctCONST_STRING CallerName,
  3303. gctUINT LineNumber,
  3304. gctUINT32 DmaAddress
  3305. );
  3306. # define gcmkDEBUGFLUSH(DmaAddress) \
  3307. gckOS_DebugFlush(__FUNCTION__, __LINE__, DmaAddress)
  3308. #else
  3309. # define gcmkDEBUGFLUSH(DmaAddress)
  3310. #endif
  3311. /*******************************************************************************
  3312. **
  3313. ** gcmDUMP_FRAMERATE
  3314. **
  3315. ** Print average frame rate
  3316. **
  3317. */
  3318. #if gcdDUMP_FRAMERATE
  3319. gceSTATUS
  3320. gcfDumpFrameRate(
  3321. void
  3322. );
  3323. # define gcmDUMP_FRAMERATE gcfDumpFrameRate
  3324. #elif gcdHAS_ELLIPSIS
  3325. # define gcmDUMP_FRAMERATE(...)
  3326. #else
  3327. gcmINLINE static void
  3328. __dummy_dump_frame_rate(
  3329. void
  3330. )
  3331. {
  3332. }
  3333. # define gcmDUMP_FRAMERATE __dummy_dump_frame_rate
  3334. #endif
  3335. /*******************************************************************************
  3336. **
  3337. ** gcmDUMP
  3338. **
  3339. ** Print a dump message.
  3340. **
  3341. ** ARGUMENTS:
  3342. **
  3343. ** gctSTRING Message.
  3344. **
  3345. ** ... Optional arguments.
  3346. */
  3347. #if gcdDUMP
  3348. gceSTATUS
  3349. gcfDump(
  3350. IN gcoOS Os,
  3351. IN gctCONST_STRING String,
  3352. ...
  3353. );
  3354. # define gcmDUMP gcfDump
  3355. #elif gcdHAS_ELLIPSIS
  3356. # define gcmDUMP(...)
  3357. #else
  3358. gcmINLINE static void
  3359. __dummy_dump(
  3360. IN gcoOS Os,
  3361. IN gctCONST_STRING Message,
  3362. ...
  3363. )
  3364. {
  3365. }
  3366. # define gcmDUMP __dummy_dump
  3367. #endif
  3368. /*******************************************************************************
  3369. **
  3370. ** gcmDUMP_DATA
  3371. **
  3372. ** Add data to the dump.
  3373. **
  3374. ** ARGUMENTS:
  3375. **
  3376. ** gctSTRING Tag
  3377. ** Tag for dump.
  3378. **
  3379. ** gctPOINTER Logical
  3380. ** Logical address of buffer.
  3381. **
  3382. ** gctSIZE_T Bytes
  3383. ** Number of bytes.
  3384. */
  3385. #if gcdDUMP || gcdDUMP_COMMAND
  3386. gceSTATUS
  3387. gcfDumpData(
  3388. IN gcoOS Os,
  3389. IN gctSTRING Tag,
  3390. IN gctPOINTER Logical,
  3391. IN gctSIZE_T Bytes
  3392. );
  3393. # define gcmDUMP_DATA gcfDumpData
  3394. #elif gcdHAS_ELLIPSIS
  3395. # define gcmDUMP_DATA(...)
  3396. #else
  3397. gcmINLINE static void
  3398. __dummy_dump_data(
  3399. IN gcoOS Os,
  3400. IN gctSTRING Tag,
  3401. IN gctPOINTER Logical,
  3402. IN gctSIZE_T Bytes
  3403. )
  3404. {
  3405. }
  3406. # define gcmDUMP_DATA __dummy_dump_data
  3407. #endif
  3408. /*******************************************************************************
  3409. **
  3410. ** gcmDUMP_BUFFER
  3411. **
  3412. ** Print a buffer to the dump.
  3413. **
  3414. ** ARGUMENTS:
  3415. **
  3416. ** gctSTRING Tag
  3417. ** Tag for dump.
  3418. **
  3419. ** gctUINT32 Physical
  3420. ** Physical address of buffer.
  3421. **
  3422. ** gctPOINTER Logical
  3423. ** Logical address of buffer.
  3424. **
  3425. ** gctUINT32 Offset
  3426. ** Offset into buffer.
  3427. **
  3428. ** gctSIZE_T Bytes
  3429. ** Number of bytes.
  3430. */
  3431. #if gcdDUMP || gcdDUMP_COMMAND
  3432. gceSTATUS
  3433. gcfDumpBuffer(
  3434. IN gcoOS Os,
  3435. IN gctSTRING Tag,
  3436. IN gctUINT32 Physical,
  3437. IN gctPOINTER Logical,
  3438. IN gctUINT32 Offset,
  3439. IN gctSIZE_T Bytes
  3440. );
  3441. # define gcmDUMP_BUFFER gcfDumpBuffer
  3442. #elif gcdHAS_ELLIPSIS
  3443. # define gcmDUMP_BUFFER(...)
  3444. #else
  3445. gcmINLINE static void
  3446. __dummy_dump_buffer(
  3447. IN gcoOS Os,
  3448. IN gctSTRING Tag,
  3449. IN gctUINT32 Physical,
  3450. IN gctPOINTER Logical,
  3451. IN gctUINT32 Offset,
  3452. IN gctSIZE_T Bytes
  3453. )
  3454. {
  3455. }
  3456. # define gcmDUMP_BUFFER __dummy_dump_buffer
  3457. #endif
  3458. /*******************************************************************************
  3459. **
  3460. ** gcmDUMP_API
  3461. **
  3462. ** Print a dump message for a high level API prefixed by the function name.
  3463. **
  3464. ** ARGUMENTS:
  3465. **
  3466. ** gctSTRING Message.
  3467. **
  3468. ** ... Optional arguments.
  3469. */
  3470. gceSTATUS gcfDumpApi(IN gctCONST_STRING String, ...);
  3471. #if gcdDUMP_API
  3472. # define gcmDUMP_API gcfDumpApi
  3473. #elif gcdHAS_ELLIPSIS
  3474. # define gcmDUMP_API(...)
  3475. #else
  3476. gcmINLINE static void
  3477. __dummy_dump_api(
  3478. IN gctCONST_STRING Message,
  3479. ...
  3480. )
  3481. {
  3482. }
  3483. # define gcmDUMP_API __dummy_dump_api
  3484. #endif
  3485. /*******************************************************************************
  3486. **
  3487. ** gcmDUMP_API_ARRAY
  3488. **
  3489. ** Print an array of data.
  3490. **
  3491. ** ARGUMENTS:
  3492. **
  3493. ** gctUINT32_PTR Pointer to array.
  3494. ** gctUINT32 Size.
  3495. */
  3496. gceSTATUS gcfDumpArray(IN gctCONST_POINTER Data, IN gctUINT32 Size);
  3497. #if gcdDUMP_API
  3498. # define gcmDUMP_API_ARRAY gcfDumpArray
  3499. #elif gcdHAS_ELLIPSIS
  3500. # define gcmDUMP_API_ARRAY(...)
  3501. #else
  3502. gcmINLINE static void
  3503. __dummy_dump_api_array(
  3504. IN gctCONST_POINTER Data,
  3505. IN gctUINT32 Size
  3506. )
  3507. {
  3508. }
  3509. # define gcmDUMP_API_ARRAY __dummy_dump_api_array
  3510. #endif
  3511. /*******************************************************************************
  3512. **
  3513. ** gcmDUMP_API_ARRAY_TOKEN
  3514. **
  3515. ** Print an array of data terminated by a token.
  3516. **
  3517. ** ARGUMENTS:
  3518. **
  3519. ** gctUINT32_PTR Pointer to array.
  3520. ** gctUINT32 Termination.
  3521. */
  3522. gceSTATUS gcfDumpArrayToken(IN gctCONST_POINTER Data, IN gctUINT32 Termination);
  3523. #if gcdDUMP_API
  3524. # define gcmDUMP_API_ARRAY_TOKEN gcfDumpArrayToken
  3525. #elif gcdHAS_ELLIPSIS
  3526. # define gcmDUMP_API_ARRAY_TOKEN(...)
  3527. #else
  3528. gcmINLINE static void
  3529. __dummy_dump_api_array_token(
  3530. IN gctCONST_POINTER Data,
  3531. IN gctUINT32 Termination
  3532. )
  3533. {
  3534. }
  3535. # define gcmDUMP_API_ARRAY_TOKEN __dummy_dump_api_array_token
  3536. #endif
  3537. /*******************************************************************************
  3538. **
  3539. ** gcmDUMP_API_DATA
  3540. **
  3541. ** Print an array of bytes.
  3542. **
  3543. ** ARGUMENTS:
  3544. **
  3545. ** gctCONST_POINTER Pointer to array.
  3546. ** gctSIZE_T Size.
  3547. */
  3548. gceSTATUS gcfDumpApiData(IN gctCONST_POINTER Data, IN gctSIZE_T Size);
  3549. #if gcdDUMP_API
  3550. # define gcmDUMP_API_DATA gcfDumpApiData
  3551. #elif gcdHAS_ELLIPSIS
  3552. # define gcmDUMP_API_DATA(...)
  3553. #else
  3554. gcmINLINE static void
  3555. __dummy_dump_api_data(
  3556. IN gctCONST_POINTER Data,
  3557. IN gctSIZE_T Size
  3558. )
  3559. {
  3560. }
  3561. # define gcmDUMP_API_DATA __dummy_dump_api_data
  3562. #endif
  3563. /*******************************************************************************
  3564. ** gcmDUMP_2D_COMMAND
  3565. **
  3566. ** Print the 2D command buffer.
  3567. **
  3568. ** ARGUMENTS:
  3569. **
  3570. ** gctUINT32_PTR Pointer to the command buffer.
  3571. ** gctUINT32 Command buffer size.
  3572. */
  3573. gceSTATUS gcfDump2DCommand(IN gctUINT32_PTR Command, IN gctUINT32 Size);
  3574. #if gcdDUMP_2D
  3575. # define gcmDUMP_2D_COMMAND gcfDump2DCommand
  3576. #elif gcdHAS_ELLIPSIS
  3577. # define gcmDUMP_2D_COMMAND(...)
  3578. #else
  3579. gcmINLINE static void
  3580. __dummy_dump_2d_command(
  3581. IN gctUINT32_PTR Command,
  3582. IN gctUINT32 Size
  3583. )
  3584. {
  3585. }
  3586. # define gcmDUMP_2D_COMMAND __dummy_dump_2d_command
  3587. #endif
  3588. /*******************************************************************************
  3589. ** gcmDUMP_2D_SURFACE
  3590. **
  3591. ** Print the 2D surface memory.
  3592. **
  3593. ** ARGUMENTS:
  3594. **
  3595. ** gctBOOL Src.
  3596. ** gctUINT32 Address.
  3597. */
  3598. gceSTATUS gcfDump2DSurface(IN gctBOOL Src, IN gctUINT32 Address);
  3599. #if gcdDUMP_2D
  3600. # define gcmDUMP_2D_SURFACE gcfDump2DSurface
  3601. #elif gcdHAS_ELLIPSIS
  3602. # define gcmDUMP_2D_SURFACE(...)
  3603. #else
  3604. gcmINLINE static void
  3605. __dummy_dump_2d_surface(
  3606. IN gctBOOL Src,
  3607. IN gctUINT32 Address
  3608. )
  3609. {
  3610. }
  3611. # define gcmDUMP_2D_SURFACE __dummy_dump_2d_surface
  3612. #endif
  3613. /*******************************************************************************
  3614. ** gcmDUMP_ADD_MEMORY_INFO
  3615. **
  3616. ** Record the memory info.
  3617. **
  3618. ** ARGUMENTS:
  3619. **
  3620. ** gctUINT32 Address.
  3621. ** gctSIZE_T Size.
  3622. */
  3623. gceSTATUS gcfAddMemoryInfo(IN gctUINT32 GPUAddress, IN gctPOINTER Logical, IN gctUINT32 Physical, IN gctUINT32 Size);
  3624. #if gcdDUMP_2D
  3625. # define gcmDUMP_ADD_MEMORY_INFO gcfAddMemoryInfo
  3626. #elif gcdHAS_ELLIPSIS
  3627. # define gcmDUMP_ADD_MEMORY_INFO(...)
  3628. #else
  3629. gcmINLINE static void
  3630. __dummy_dump_add_memory_info(
  3631. IN gctUINT32 GPUAddress,
  3632. IN gctPOINTER Logical,
  3633. IN gctUINT32 Physical,
  3634. IN gctUINT32 Size
  3635. )
  3636. {
  3637. }
  3638. # define gcmDUMP_ADD_MEMORY_INFO __dummy_dump_add_memory_info
  3639. #endif
  3640. /*******************************************************************************
  3641. ** gcmDUMP_DEL_MEMORY_INFO
  3642. **
  3643. ** Record the memory info.
  3644. **
  3645. ** ARGUMENTS:
  3646. **
  3647. ** gctUINT32 Address.
  3648. */
  3649. gceSTATUS gcfDelMemoryInfo(IN gctUINT32 Address);
  3650. #if gcdDUMP_2D
  3651. # define gcmDUMP_DEL_MEMORY_INFO gcfDelMemoryInfo
  3652. #elif gcdHAS_ELLIPSIS
  3653. # define gcmDUMP_DEL_MEMORY_INFO(...)
  3654. #else
  3655. gcmINLINE static void
  3656. __dummy_dump_del_memory_info(
  3657. IN gctUINT32 Address
  3658. )
  3659. {
  3660. }
  3661. # define gcmDUMP_DEL_MEMORY_INFO __dummy_dump_del_memory_info
  3662. #endif
  3663. #if gcdDUMP_2D
  3664. extern gctPOINTER dumpMemInfoListMutex;
  3665. extern gctBOOL dump2DFlag;
  3666. #endif
  3667. /*******************************************************************************
  3668. **
  3669. ** gcmTRACE_RELEASE
  3670. **
  3671. ** Print a message to the shader debugger.
  3672. **
  3673. ** ARGUMENTS:
  3674. **
  3675. ** message Message.
  3676. ** ... Optional arguments.
  3677. */
  3678. #define gcmTRACE_RELEASE gcoOS_DebugShaderTrace
  3679. void
  3680. gcoOS_DebugShaderTrace(
  3681. IN gctCONST_STRING Message,
  3682. ...
  3683. );
  3684. void
  3685. gcoOS_SetDebugShaderFiles(
  3686. IN gctCONST_STRING VSFileName,
  3687. IN gctCONST_STRING FSFileName
  3688. );
  3689. void
  3690. gcoOS_SetDebugShaderFileType(
  3691. IN gctUINT32 ShaderType
  3692. );
  3693. void
  3694. gcoOS_EnableDebugBuffer(
  3695. IN gctBOOL Enable
  3696. );
  3697. /*******************************************************************************
  3698. **
  3699. ** gcmBREAK
  3700. **
  3701. ** Break into the debugger. In retail mode this macro does nothing.
  3702. **
  3703. ** ARGUMENTS:
  3704. **
  3705. ** None.
  3706. */
  3707. void
  3708. gcoOS_DebugBreak(
  3709. void
  3710. );
  3711. void
  3712. gckOS_DebugBreak(
  3713. void
  3714. );
  3715. #if gcmIS_DEBUG(gcdDEBUG_BREAK)
  3716. # define gcmBREAK gcoOS_DebugBreak
  3717. # define gcmkBREAK gckOS_DebugBreak
  3718. #else
  3719. # define gcmBREAK()
  3720. # define gcmkBREAK()
  3721. #endif
  3722. /*******************************************************************************
  3723. **
  3724. ** gcmASSERT
  3725. **
  3726. ** Evaluate an expression and break into the debugger if the expression
  3727. ** evaluates to false. In retail mode this macro does nothing.
  3728. **
  3729. ** ARGUMENTS:
  3730. **
  3731. ** exp Expression to evaluate.
  3732. */
  3733. #if gcmIS_DEBUG(gcdDEBUG_ASSERT)
  3734. # define _gcmASSERT(prefix, exp) \
  3735. do \
  3736. { \
  3737. if (!(exp)) \
  3738. { \
  3739. prefix##TRACE(gcvLEVEL_ERROR, \
  3740. #prefix "ASSERT at %s(%d)", \
  3741. __FUNCTION__, __LINE__); \
  3742. prefix##TRACE(gcvLEVEL_ERROR, \
  3743. "(%s)", #exp); \
  3744. prefix##BREAK(); \
  3745. } \
  3746. } \
  3747. while (gcvFALSE)
  3748. # define gcmASSERT(exp) _gcmASSERT(gcm, exp)
  3749. # define gcmkASSERT(exp) _gcmASSERT(gcmk, exp)
  3750. #else
  3751. # define gcmASSERT(exp)
  3752. # define gcmkASSERT(exp)
  3753. #endif
  3754. /*******************************************************************************
  3755. **
  3756. ** gcmVERIFY
  3757. **
  3758. ** Verify if an expression returns true. If the expression does not
  3759. ** evaluates to true, an assertion will happen in debug mode.
  3760. **
  3761. ** ARGUMENTS:
  3762. **
  3763. ** exp Expression to evaluate.
  3764. */
  3765. #if gcmIS_DEBUG(gcdDEBUG_ASSERT)
  3766. # define gcmVERIFY(exp) gcmASSERT(exp)
  3767. # define gcmkVERIFY(exp) gcmkASSERT(exp)
  3768. #else
  3769. # define gcmVERIFY(exp) exp
  3770. # define gcmkVERIFY(exp) exp
  3771. #endif
  3772. /*******************************************************************************
  3773. **
  3774. ** gcmVERIFY_OK
  3775. **
  3776. ** Verify a fucntion returns gcvSTATUS_OK. If the function does not return
  3777. ** gcvSTATUS_OK, an assertion will happen in debug mode.
  3778. **
  3779. ** ARGUMENTS:
  3780. **
  3781. ** func Function to evaluate.
  3782. */
  3783. void
  3784. gcoOS_Verify(
  3785. IN gceSTATUS status
  3786. );
  3787. void
  3788. gckOS_Verify(
  3789. IN gceSTATUS status
  3790. );
  3791. #if gcmIS_DEBUG(gcdDEBUG_ASSERT)
  3792. # define gcmVERIFY_OK(func) \
  3793. do \
  3794. { \
  3795. gceSTATUS verifyStatus = func; \
  3796. gcoOS_Verify(verifyStatus); \
  3797. if (verifyStatus != gcvSTATUS_OK) \
  3798. { \
  3799. gcmTRACE( \
  3800. gcvLEVEL_ERROR, \
  3801. "gcmVERIFY_OK(%d): function returned %d", \
  3802. __LINE__, verifyStatus \
  3803. ); \
  3804. } \
  3805. gcmASSERT(verifyStatus == gcvSTATUS_OK); \
  3806. } \
  3807. while (gcvFALSE)
  3808. # define gcmkVERIFY_OK(func) \
  3809. do \
  3810. { \
  3811. gceSTATUS verifyStatus = func; \
  3812. if (verifyStatus != gcvSTATUS_OK) \
  3813. { \
  3814. gcmkTRACE( \
  3815. gcvLEVEL_ERROR, \
  3816. "gcmkVERIFY_OK(%d): function returned %d", \
  3817. __LINE__, verifyStatus \
  3818. ); \
  3819. } \
  3820. gckOS_Verify(verifyStatus); \
  3821. gcmkASSERT(verifyStatus == gcvSTATUS_OK); \
  3822. } \
  3823. while (gcvFALSE)
  3824. #else
  3825. # define gcmVERIFY_OK(func) func
  3826. # define gcmkVERIFY_OK(func) func
  3827. #endif
  3828. gctCONST_STRING
  3829. gcoOS_DebugStatus2Name(
  3830. gceSTATUS status
  3831. );
  3832. gctCONST_STRING
  3833. gckOS_DebugStatus2Name(
  3834. gceSTATUS status
  3835. );
  3836. /*******************************************************************************
  3837. **
  3838. ** gcmERR_BREAK
  3839. **
  3840. ** Executes a break statement on error.
  3841. **
  3842. ** ASSUMPTIONS:
  3843. **
  3844. ** 'status' variable of gceSTATUS type must be defined.
  3845. **
  3846. ** ARGUMENTS:
  3847. **
  3848. ** func Function to evaluate.
  3849. */
  3850. #define _gcmERR_BREAK(prefix, func) \
  3851. status = func; \
  3852. if (gcmIS_ERROR(status)) \
  3853. { \
  3854. prefix##PRINT_VERSION(); \
  3855. prefix##TRACE(gcvLEVEL_ERROR, \
  3856. #prefix "ERR_BREAK: status=%d(%s) @ %s(%d)", \
  3857. status, gcoOS_DebugStatus2Name(status), __FUNCTION__, __LINE__); \
  3858. break; \
  3859. } \
  3860. do { } while (gcvFALSE)
  3861. #define _gcmkERR_BREAK(prefix, func) \
  3862. status = func; \
  3863. if (gcmIS_ERROR(status)) \
  3864. { \
  3865. prefix##PRINT_VERSION(); \
  3866. prefix##TRACE(gcvLEVEL_ERROR, \
  3867. #prefix "ERR_BREAK: status=%d(%s) @ %s(%d)", \
  3868. status, gckOS_DebugStatus2Name(status), __FUNCTION__, __LINE__); \
  3869. break; \
  3870. } \
  3871. do { } while (gcvFALSE)
  3872. #define gcmERR_BREAK(func) _gcmERR_BREAK(gcm, func)
  3873. #define gcmkERR_BREAK(func) _gcmkERR_BREAK(gcmk, func)
  3874. /*******************************************************************************
  3875. **
  3876. ** gcmERR_RETURN
  3877. **
  3878. ** Executes a return on error.
  3879. **
  3880. ** ASSUMPTIONS:
  3881. **
  3882. ** 'status' variable of gceSTATUS type must be defined.
  3883. **
  3884. ** ARGUMENTS:
  3885. **
  3886. ** func Function to evaluate.
  3887. */
  3888. #define _gcmERR_RETURN(prefix, func) \
  3889. status = func; \
  3890. if (gcmIS_ERROR(status)) \
  3891. { \
  3892. prefix##PRINT_VERSION(); \
  3893. prefix##TRACE(gcvLEVEL_ERROR, \
  3894. #prefix "ERR_RETURN: status=%d(%s) @ %s(%d)", \
  3895. status, gcoOS_DebugStatus2Name(status), __FUNCTION__, __LINE__); \
  3896. prefix##FOOTER(); \
  3897. return status; \
  3898. } \
  3899. do { } while (gcvFALSE)
  3900. #define _gcmkERR_RETURN(prefix, func) \
  3901. status = func; \
  3902. if (gcmIS_ERROR(status)) \
  3903. { \
  3904. prefix##PRINT_VERSION(); \
  3905. prefix##TRACE(gcvLEVEL_ERROR, \
  3906. #prefix "ERR_RETURN: status=%d(%s) @ %s(%d)", \
  3907. status, gckOS_DebugStatus2Name(status), __FUNCTION__, __LINE__); \
  3908. prefix##FOOTER(); \
  3909. return status; \
  3910. } \
  3911. do { } while (gcvFALSE)
  3912. #define gcmERR_RETURN(func) _gcmERR_RETURN(gcm, func)
  3913. #define gcmkERR_RETURN(func) _gcmkERR_RETURN(gcmk, func)
  3914. /*******************************************************************************
  3915. **
  3916. ** gcmONERROR
  3917. **
  3918. ** Jump to the error handler in case there is an error.
  3919. **
  3920. ** ASSUMPTIONS:
  3921. **
  3922. ** 'status' variable of gceSTATUS type must be defined.
  3923. **
  3924. ** ARGUMENTS:
  3925. **
  3926. ** func Function to evaluate.
  3927. */
  3928. #define _gcmONERROR(prefix, func) \
  3929. do \
  3930. { \
  3931. status = func; \
  3932. if (gcmIS_ERROR(status)) \
  3933. { \
  3934. prefix##PRINT_VERSION(); \
  3935. prefix##TRACE(gcvLEVEL_ERROR, \
  3936. #prefix "ONERROR: status=%d(%s) @ %s(%d)", \
  3937. status, gcoOS_DebugStatus2Name(status), __FUNCTION__, __LINE__); \
  3938. goto OnError; \
  3939. } \
  3940. } \
  3941. while (gcvFALSE)
  3942. #define _gcmkONERROR(prefix, func) \
  3943. do \
  3944. { \
  3945. status = func; \
  3946. if (gcmIS_ERROR(status)) \
  3947. { \
  3948. prefix##PRINT_VERSION(); \
  3949. prefix##TRACE(gcvLEVEL_ERROR, \
  3950. #prefix "ONERROR: status=%d(%s) @ %s(%d)", \
  3951. status, gckOS_DebugStatus2Name(status), __FUNCTION__, __LINE__); \
  3952. goto OnError; \
  3953. } \
  3954. } \
  3955. while (gcvFALSE)
  3956. #define gcmONERROR(func) _gcmONERROR(gcm, func)
  3957. #define gcmkONERROR(func) _gcmkONERROR(gcmk, func)
  3958. /*******************************************************************************
  3959. **
  3960. ** gcmkSAFECASTSIZET
  3961. **
  3962. ** Check wether value of a gctSIZE_T varible beyond the capability
  3963. ** of 32bits GPU hardware.
  3964. **
  3965. ** ASSUMPTIONS:
  3966. **
  3967. **
  3968. **
  3969. ** ARGUMENTS:
  3970. **
  3971. ** x A gctUINT32 variable
  3972. ** y A gctSIZE_T variable
  3973. */
  3974. #define gcmkSAFECASTSIZET(x, y) \
  3975. do \
  3976. { \
  3977. gctUINT32 tmp = (gctUINT32)(y); \
  3978. if (gcmSIZEOF(gctSIZE_T) > gcmSIZEOF(gctUINT32)) \
  3979. { \
  3980. gcmkASSERT(tmp <= gcvMAXUINT32); \
  3981. } \
  3982. (x) = tmp; \
  3983. } \
  3984. while (gcvFALSE)
  3985. #define gcmSAFECASTSIZET(x, y) \
  3986. do \
  3987. { \
  3988. gctUINT32 tmp = (gctUINT32)(y); \
  3989. if (gcmSIZEOF(gctSIZE_T) > gcmSIZEOF(gctUINT32)) \
  3990. { \
  3991. gcmASSERT(tmp <= gcvMAXUINT32); \
  3992. } \
  3993. (x) = tmp; \
  3994. } \
  3995. while (gcvFALSE)
  3996. /*******************************************************************************
  3997. **
  3998. ** gcmVERIFY_LOCK
  3999. **
  4000. ** Verifies whether the surface is locked.
  4001. **
  4002. ** ARGUMENTS:
  4003. **
  4004. ** surfaceInfo Pointer to the surface iniformational structure.
  4005. */
  4006. #define gcmVERIFY_LOCK(surfaceInfo) \
  4007. if (!surfaceInfo->node.valid) \
  4008. { \
  4009. gcmONERROR(gcvSTATUS_MEMORY_UNLOCKED); \
  4010. } \
  4011. /*******************************************************************************
  4012. **
  4013. ** gcmVERIFY_NODE_LOCK
  4014. **
  4015. ** Verifies whether the surface node is locked.
  4016. **
  4017. ** ARGUMENTS:
  4018. **
  4019. ** surfaceInfo Pointer to the surface iniformational structure.
  4020. */
  4021. #define gcmVERIFY_NODE_LOCK(surfaceNode) \
  4022. if (!(surfaceNode)->valid) \
  4023. { \
  4024. status = gcvSTATUS_MEMORY_UNLOCKED; \
  4025. break; \
  4026. } \
  4027. do { } while (gcvFALSE)
  4028. /*******************************************************************************
  4029. **
  4030. ** gcmBADOBJECT_BREAK
  4031. **
  4032. ** Executes a break statement on bad object.
  4033. **
  4034. ** ARGUMENTS:
  4035. **
  4036. ** obj Object to test.
  4037. ** t Expected type of the object.
  4038. */
  4039. #define gcmBADOBJECT_BREAK(obj, t) \
  4040. if ((obj == gcvNULL) \
  4041. || (((gcsOBJECT *)(obj))->type != t) \
  4042. ) \
  4043. { \
  4044. status = gcvSTATUS_INVALID_OBJECT; \
  4045. break; \
  4046. } \
  4047. do { } while (gcvFALSE)
  4048. /*******************************************************************************
  4049. **
  4050. ** gcmCHECK_STATUS
  4051. **
  4052. ** Executes a break statement on error.
  4053. **
  4054. ** ASSUMPTIONS:
  4055. **
  4056. ** 'status' variable of gceSTATUS type must be defined.
  4057. **
  4058. ** ARGUMENTS:
  4059. **
  4060. ** func Function to evaluate.
  4061. */
  4062. #define _gcmCHECK_STATUS(prefix, func) \
  4063. do \
  4064. { \
  4065. last = func; \
  4066. if (gcmIS_ERROR(last)) \
  4067. { \
  4068. prefix##TRACE(gcvLEVEL_ERROR, \
  4069. #prefix "CHECK_STATUS: status=%d(%s) @ %s(%d)", \
  4070. last, gcoOS_DebugStatus2Name(last), __FUNCTION__, __LINE__); \
  4071. status = last; \
  4072. } \
  4073. } \
  4074. while (gcvFALSE)
  4075. #define _gcmkCHECK_STATUS(prefix, func) \
  4076. do \
  4077. { \
  4078. last = func; \
  4079. if (gcmIS_ERROR(last)) \
  4080. { \
  4081. prefix##TRACE(gcvLEVEL_ERROR, \
  4082. #prefix "CHECK_STATUS: status=%d(%s) @ %s(%d)", \
  4083. last, gckOS_DebugStatus2Name(last), __FUNCTION__, __LINE__); \
  4084. status = last; \
  4085. } \
  4086. } \
  4087. while (gcvFALSE)
  4088. #define gcmCHECK_STATUS(func) _gcmCHECK_STATUS(gcm, func)
  4089. #define gcmkCHECK_STATUS(func) _gcmkCHECK_STATUS(gcmk, func)
  4090. /*******************************************************************************
  4091. **
  4092. ** gcmVERIFY_ARGUMENT
  4093. **
  4094. ** Assert if an argument does not apply to the specified expression. If
  4095. ** the argument evaluates to false, gcvSTATUS_INVALID_ARGUMENT will be
  4096. ** returned from the current function. In retail mode this macro does
  4097. ** nothing.
  4098. **
  4099. ** ARGUMENTS:
  4100. **
  4101. ** arg Argument to evaluate.
  4102. */
  4103. # define _gcmVERIFY_ARGUMENT(prefix, arg) \
  4104. do \
  4105. { \
  4106. if (!(arg)) \
  4107. { \
  4108. prefix##TRACE(gcvLEVEL_ERROR, #prefix "VERIFY_ARGUMENT failed:"); \
  4109. prefix##ASSERT(arg); \
  4110. prefix##FOOTER_ARG("status=%d", gcvSTATUS_INVALID_ARGUMENT); \
  4111. return gcvSTATUS_INVALID_ARGUMENT; \
  4112. } \
  4113. } \
  4114. while (gcvFALSE)
  4115. # define gcmVERIFY_ARGUMENT(arg) _gcmVERIFY_ARGUMENT(gcm, arg)
  4116. # define gcmkVERIFY_ARGUMENT(arg) _gcmVERIFY_ARGUMENT(gcmk, arg)
  4117. /*******************************************************************************
  4118. **
  4119. ** gcmDEBUG_VERIFY_ARGUMENT
  4120. **
  4121. ** Works just like gcmVERIFY_ARGUMENT, but is only valid in debug mode.
  4122. ** Use this to verify arguments inside non-public API functions.
  4123. */
  4124. #if gcdDEBUG
  4125. # define gcmDEBUG_VERIFY_ARGUMENT(arg) _gcmVERIFY_ARGUMENT(gcm, arg)
  4126. # define gcmkDEBUG_VERIFY_ARGUMENT(arg) _gcmkVERIFY_ARGUMENT(gcm, arg)
  4127. #else
  4128. # define gcmDEBUG_VERIFY_ARGUMENT(arg)
  4129. # define gcmkDEBUG_VERIFY_ARGUMENT(arg)
  4130. #endif
  4131. /*******************************************************************************
  4132. **
  4133. ** gcmVERIFY_ARGUMENT_RETURN
  4134. **
  4135. ** Assert if an argument does not apply to the specified expression. If
  4136. ** the argument evaluates to false, gcvSTATUS_INVALID_ARGUMENT will be
  4137. ** returned from the current function. In retail mode this macro does
  4138. ** nothing.
  4139. **
  4140. ** ARGUMENTS:
  4141. **
  4142. ** arg Argument to evaluate.
  4143. */
  4144. # define _gcmVERIFY_ARGUMENT_RETURN(prefix, arg, value) \
  4145. do \
  4146. { \
  4147. if (!(arg)) \
  4148. { \
  4149. prefix##TRACE(gcvLEVEL_ERROR, \
  4150. #prefix "gcmVERIFY_ARGUMENT_RETURN failed:"); \
  4151. prefix##ASSERT(arg); \
  4152. prefix##FOOTER_ARG("value=%d", value); \
  4153. return value; \
  4154. } \
  4155. } \
  4156. while (gcvFALSE)
  4157. # define gcmVERIFY_ARGUMENT_RETURN(arg, value) \
  4158. _gcmVERIFY_ARGUMENT_RETURN(gcm, arg, value)
  4159. # define gcmkVERIFY_ARGUMENT_RETURN(arg, value) \
  4160. _gcmVERIFY_ARGUMENT_RETURN(gcmk, arg, value)
  4161. #define MAX_LOOP_COUNT 0x7FFFFFFF
  4162. /******************************************************************************\
  4163. ****************************** User Debug Option ******************************
  4164. \******************************************************************************/
  4165. /* User option. */
  4166. typedef enum _gceDEBUG_MSG
  4167. {
  4168. gcvDEBUG_MSG_NONE,
  4169. gcvDEBUG_MSG_ERROR,
  4170. gcvDEBUG_MSG_WARNING
  4171. }
  4172. gceDEBUG_MSG;
  4173. typedef struct _gcsUSER_DEBUG_OPTION
  4174. {
  4175. gceDEBUG_MSG debugMsg;
  4176. }
  4177. gcsUSER_DEBUG_OPTION;
  4178. gcsUSER_DEBUG_OPTION *
  4179. gcGetUserDebugOption(
  4180. void
  4181. );
  4182. #if defined(ANDROID)
  4183. struct _gcoOS_SymbolsList
  4184. {
  4185. #if gcdENABLE_3D
  4186. gcePATCH_ID patchId;
  4187. #endif
  4188. const char * symList[10];
  4189. };
  4190. #endif
  4191. #if gcdHAS_ELLIPSIS
  4192. #define gcmUSER_DEBUG_MSG(level, ...) \
  4193. do \
  4194. { \
  4195. if (level <= gcGetUserDebugOption()->debugMsg) \
  4196. { \
  4197. gcoOS_Print(__VA_ARGS__); \
  4198. } \
  4199. } while (gcvFALSE)
  4200. #define gcmUSER_DEBUG_ERROR_MSG(...) gcmUSER_DEBUG_MSG(gcvDEBUG_MSG_ERROR, "Error: " __VA_ARGS__)
  4201. #define gcmUSER_DEBUG_WARNING_MSG(...) gcmUSER_DEBUG_MSG(gcvDEBUG_MSG_WARNING, "Warring: " __VA_ARGS__)
  4202. #else
  4203. #define gcmUSER_DEBUG_MSG
  4204. #define gcmUSER_DEBUG_ERROR_MSG
  4205. #define gcmUSER_DEBUG_WARNING_MSG
  4206. #endif
  4207. /*******************************************************************************
  4208. **
  4209. ** A set of macros to aid state loading.
  4210. **
  4211. ** ARGUMENTS:
  4212. **
  4213. ** CommandBuffer Pointer to a gcoCMDBUF object.
  4214. ** StateDelta Pointer to a gcsSTATE_DELTA state delta structure.
  4215. ** Memory Destination memory pointer of gctUINT32_PTR type.
  4216. ** PartOfContext Whether or not the state is a part of the context.
  4217. ** FixedPoint Whether or not the state is of the fixed point format.
  4218. ** Count Number of consecutive states to be loaded.
  4219. ** Address State address.
  4220. ** Data Data to be set to the state.
  4221. */
  4222. /*----------------------------------------------------------------------------*/
  4223. #if gcmIS_DEBUG(gcdDEBUG_CODE)
  4224. # define gcmSTORELOADSTATE(CommandBuffer, Memory, Address, Count) \
  4225. CommandBuffer->lastLoadStatePtr = gcmPTR_TO_UINT64(Memory); \
  4226. CommandBuffer->lastLoadStateAddress = Address; \
  4227. CommandBuffer->lastLoadStateCount = Count
  4228. # define gcmVERIFYLOADSTATE(CommandBuffer, Memory, Address) \
  4229. gcmASSERT( \
  4230. (gctUINT) (Memory - gcmUINT64_TO_TYPE(CommandBuffer->lastLoadStatePtr, gctUINT32_PTR) - 1) \
  4231. == \
  4232. (gctUINT) (Address - CommandBuffer->lastLoadStateAddress) \
  4233. ); \
  4234. \
  4235. gcmASSERT(CommandBuffer->lastLoadStateCount > 0); \
  4236. \
  4237. CommandBuffer->lastLoadStateCount -= 1
  4238. # define gcmVERIFYLOADSTATEDONE(CommandBuffer) \
  4239. gcmASSERT(CommandBuffer->lastLoadStateCount == 0);
  4240. # define gcmDEFINELOADSTATEBASE() \
  4241. gctUINT32_PTR LoadStateBase;
  4242. # define gcmSETLOADSTATEBASE(CommandBuffer, OutSide) \
  4243. if (OutSide) \
  4244. {\
  4245. LoadStateBase = (gctUINT32_PTR)*OutSide; \
  4246. }\
  4247. else\
  4248. {\
  4249. LoadStateBase = (gctUINT_PTR)CommandBuffer->buffer;\
  4250. }
  4251. # define gcmVERIFYLOADSTATEALIGNED(CommandBuffer, Memory) \
  4252. gcmASSERT(((Memory - LoadStateBase) & 1) == 0);
  4253. # define gcmUNSETLOADSTATEBASE() \
  4254. LoadStateBase = LoadStateBase;
  4255. #else
  4256. # define gcmSTORELOADSTATE(CommandBuffer, Memory, Address, Count)
  4257. # define gcmVERIFYLOADSTATE(CommandBuffer, Memory, Address)
  4258. # define gcmVERIFYLOADSTATEDONE(CommandBuffer)
  4259. # define gcmDEFINELOADSTATEBASE()
  4260. # define gcmSETLOADSTATEBASE(CommandBuffer, OutSide)
  4261. # define gcmVERIFYLOADSTATEALIGNED(CommandBuffer, Memory)
  4262. # define gcmUNSETLOADSTATEBASE()
  4263. #endif
  4264. #if gcdSECURE_USER
  4265. # define gcmDEFINESECUREUSER() \
  4266. gctUINT __secure_user_offset__; \
  4267. gctUINT32_PTR __secure_user_hintArray__;
  4268. # define gcmBEGINSECUREUSER() \
  4269. __secure_user_offset__ = reserve->lastOffset; \
  4270. \
  4271. __secure_user_hintArray__ = gcmUINT64_TO_PTR(reserve->hintArrayTail)
  4272. # define gcmENDSECUREUSER() \
  4273. reserve->hintArrayTail = gcmPTR_TO_UINT64(__secure_user_hintArray__)
  4274. # define gcmSKIPSECUREUSER() \
  4275. __secure_user_offset__ += gcmSIZEOF(gctUINT32)
  4276. # define gcmUPDATESECUREUSER() \
  4277. *__secure_user_hintArray__ = __secure_user_offset__; \
  4278. \
  4279. __secure_user_offset__ += gcmSIZEOF(gctUINT32); \
  4280. __secure_user_hintArray__ += 1
  4281. #else
  4282. # define gcmDEFINESECUREUSER()
  4283. # define gcmBEGINSECUREUSER()
  4284. # define gcmENDSECUREUSER()
  4285. # define gcmSKIPSECUREUSER()
  4286. # define gcmUPDATESECUREUSER()
  4287. #endif
  4288. /*----------------------------------------------------------------------------*/
  4289. #if gcdDUMP
  4290. # define gcmDUMPSTATEDATA(StateDelta, FixedPoint, Address, Data) \
  4291. if (FixedPoint) \
  4292. { \
  4293. gcmDUMP(gcvNULL, "#[state.x 0x%04X 0x%08X]", \
  4294. Address, Data \
  4295. ); \
  4296. } \
  4297. else \
  4298. { \
  4299. gcmDUMP(gcvNULL, "#[state 0x%04X 0x%08X]", \
  4300. Address, Data \
  4301. ); \
  4302. }
  4303. #else
  4304. # define gcmDUMPSTATEDATA(StateDelta, FixedPoint, Address, Data)
  4305. #endif
  4306. #define gcmDEFINESTATEBUFFER(CommandBuffer, StateDelta, Memory, ReserveSize) \
  4307. gcmDEFINESECUREUSER() \
  4308. gctSIZE_T ReserveSize; \
  4309. gcoCMDBUF CommandBuffer; \
  4310. gctUINT32_PTR Memory; \
  4311. gcsSTATE_DELTA_PTR StateDelta
  4312. #define gcmBEGINSTATEBUFFER(Hardware, CommandBuffer, StateDelta, Memory, ReserveSize) \
  4313. { \
  4314. gcmONERROR(gcoBUFFER_Reserve( \
  4315. Hardware->buffer, ReserveSize, gcvTRUE, gcvCOMMAND_3D, &CommandBuffer \
  4316. )); \
  4317. \
  4318. Memory = (gctUINT32_PTR) gcmUINT64_TO_PTR(CommandBuffer->lastReserve); \
  4319. \
  4320. StateDelta = Hardware->delta; \
  4321. \
  4322. gcmBEGINSECUREUSER(); \
  4323. }
  4324. #define gcmENDSTATEBUFFER(Hardware, CommandBuffer, Memory, ReserveSize) \
  4325. { \
  4326. gcmENDSECUREUSER(); \
  4327. \
  4328. gcmASSERT( \
  4329. gcmUINT64_TO_TYPE(CommandBuffer->lastReserve, gctUINT8_PTR) + ReserveSize \
  4330. == \
  4331. (gctUINT8_PTR) Memory \
  4332. ); \
  4333. }
  4334. /*----------------------------------------------------------------------------*/
  4335. #define gcmBEGINSTATEBATCH(CommandBuffer, Memory, FixedPoint, Address, Count) \
  4336. { \
  4337. gcmASSERT(((Memory - gcmUINT64_TO_TYPE(CommandBuffer->lastReserve, gctUINT32_PTR)) & 1) == 0); \
  4338. gcmASSERT((gctUINT32)Count <= 1024); \
  4339. \
  4340. gcmVERIFYLOADSTATEDONE(CommandBuffer); \
  4341. \
  4342. gcmSTORELOADSTATE(CommandBuffer, Memory, Address, Count); \
  4343. \
  4344. *Memory++ \
  4345. = gcmSETFIELDVALUE(0, AQ_COMMAND_LOAD_STATE_COMMAND, OPCODE, LOAD_STATE) \
  4346. | gcmSETFIELD (0, AQ_COMMAND_LOAD_STATE_COMMAND, FLOAT, FixedPoint) \
  4347. | gcmSETFIELD (0, AQ_COMMAND_LOAD_STATE_COMMAND, COUNT, Count) \
  4348. | gcmSETFIELD (0, AQ_COMMAND_LOAD_STATE_COMMAND, ADDRESS, Address); \
  4349. \
  4350. gcmSKIPSECUREUSER(); \
  4351. }
  4352. #define gcmENDSTATEBATCH(CommandBuffer, Memory) \
  4353. { \
  4354. gcmVERIFYLOADSTATEDONE(CommandBuffer); \
  4355. \
  4356. gcmASSERT(((Memory - gcmUINT64_TO_TYPE(CommandBuffer->lastReserve, gctUINT32_PTR)) & 1) == 0); \
  4357. }
  4358. /*----------------------------------------------------------------------------*/
  4359. #define gcmSETSTATEDATA(StateDelta, CommandBuffer, Memory, FixedPoint, \
  4360. Address, Data) \
  4361. { \
  4362. gctUINT32 __temp_data32__; \
  4363. \
  4364. gcmVERIFYLOADSTATE(CommandBuffer, Memory, Address); \
  4365. \
  4366. gcmSAFECASTSIZET(__temp_data32__, Data); \
  4367. \
  4368. *Memory++ = __temp_data32__; \
  4369. \
  4370. gcoHARDWARE_UpdateDelta( \
  4371. StateDelta, Address, 0, __temp_data32__ \
  4372. ); \
  4373. \
  4374. gcmDUMPSTATEDATA(StateDelta, FixedPoint, Address, __temp_data32__); \
  4375. \
  4376. gcmUPDATESECUREUSER(); \
  4377. }
  4378. #define gcmSETSTATEDATAWITHMASK(StateDelta, CommandBuffer, Memory, FixedPoint, \
  4379. Address, Mask, Data) \
  4380. { \
  4381. gctUINT32 __temp_data32__; \
  4382. \
  4383. gcmVERIFYLOADSTATE(CommandBuffer, Memory, Address); \
  4384. \
  4385. __temp_data32__ = Data; \
  4386. \
  4387. *Memory++ = __temp_data32__; \
  4388. \
  4389. gcoHARDWARE_UpdateDelta( \
  4390. StateDelta, Address, Mask, __temp_data32__ \
  4391. ); \
  4392. \
  4393. gcmDUMPSTATEDATA(StateDelta, FixedPoint, Address, __temp_data32__); \
  4394. \
  4395. gcmUPDATESECUREUSER(); \
  4396. }
  4397. #define gcmSETCTRLSTATE(StateDelta, CommandBuffer, Memory, Address, Data) \
  4398. { \
  4399. gctUINT32 __temp_data32__; \
  4400. \
  4401. gcmVERIFYLOADSTATE(CommandBuffer, Memory, Address); \
  4402. \
  4403. __temp_data32__ = Data; \
  4404. \
  4405. *Memory++ = __temp_data32__; \
  4406. \
  4407. gcmDUMPSTATEDATA(StateDelta, gcvFALSE, Address, __temp_data32__); \
  4408. \
  4409. gcmSKIPSECUREUSER(); \
  4410. }
  4411. #define gcmSETFILLER(CommandBuffer, Memory) \
  4412. { \
  4413. gcmVERIFYLOADSTATEDONE(CommandBuffer); \
  4414. \
  4415. Memory += 1; \
  4416. \
  4417. gcmSKIPSECUREUSER(); \
  4418. }
  4419. /*----------------------------------------------------------------------------*/
  4420. #define gcmSETSINGLESTATE(StateDelta, CommandBuffer, Memory, FixedPoint, \
  4421. Address, Data) \
  4422. { \
  4423. gcmBEGINSTATEBATCH(CommandBuffer, Memory, FixedPoint, Address, 1); \
  4424. gcmSETSTATEDATA(StateDelta, CommandBuffer, Memory, FixedPoint, \
  4425. Address, Data); \
  4426. gcmENDSTATEBATCH(CommandBuffer, Memory); \
  4427. }
  4428. #define gcmSETSINGLESTATEWITHMASK(StateDelta, CommandBuffer, Memory, FixedPoint, \
  4429. Address, Mask, Data) \
  4430. { \
  4431. gcmBEGINSTATEBATCH(CommandBuffer, Memory, FixedPoint, Address, 1); \
  4432. gcmSETSTATEDATAWITHMASK(StateDelta, CommandBuffer, Memory, FixedPoint, \
  4433. Address, Mask, Data); \
  4434. gcmENDSTATEBATCH(CommandBuffer, Memory); \
  4435. }
  4436. #define gcmSETSINGLECTRLSTATE(StateDelta, CommandBuffer, Memory, FixedPoint, \
  4437. Address, Data) \
  4438. { \
  4439. gcmBEGINSTATEBATCH(CommandBuffer, Memory, FixedPoint, Address, 1); \
  4440. gcmSETCTRLSTATE(StateDelta, CommandBuffer, Memory, Address, Data); \
  4441. gcmENDSTATEBATCH(CommandBuffer, Memory); \
  4442. }
  4443. #define gcmSETSEMASTALLPIPE(StateDelta, CommandBuffer, Memory, Data) \
  4444. { \
  4445. gcmSETSINGLESTATE(StateDelta, CommandBuffer, Memory, gcvFALSE, AQSemaphoreRegAddrs, Data); \
  4446. \
  4447. *Memory++ = gcmSETFIELDVALUE(0, STALL_COMMAND, OPCODE, STALL); \
  4448. \
  4449. *Memory++ = Data; \
  4450. \
  4451. gcmDUMP(gcvNULL, "#[stall 0x%08X 0x%08X]", \
  4452. gcmSETFIELDVALUE(0, AQ_SEMAPHORE, SOURCE, FRONT_END), \
  4453. gcmSETFIELDVALUE(0, AQ_SEMAPHORE, DESTINATION, PIXEL_ENGINE)); \
  4454. \
  4455. gcmSKIPSECUREUSER(); \
  4456. }
  4457. /*******************************************************************************
  4458. **
  4459. ** gcmSETSTARTDECOMMAND
  4460. **
  4461. ** Form a START_DE command.
  4462. **
  4463. ** ARGUMENTS:
  4464. **
  4465. ** Memory Destination memory pointer of gctUINT32_PTR type.
  4466. ** Count Number of the rectangles.
  4467. */
  4468. #define gcmSETSTARTDECOMMAND(Memory, Count) \
  4469. { \
  4470. *Memory++ \
  4471. = gcmSETFIELDVALUE(0, AQ_COMMAND_START_DE_COMMAND, OPCODE, START_DE) \
  4472. | gcmSETFIELD (0, AQ_COMMAND_START_DE_COMMAND, COUNT, Count) \
  4473. | gcmSETFIELD (0, AQ_COMMAND_START_DE_COMMAND, DATA_COUNT, 0); \
  4474. \
  4475. *Memory++ = 0xDEADDEED; \
  4476. }
  4477. /*****************************************
  4478. ** Temp command buffer macro
  4479. */
  4480. #define gcmDEFINESTATEBUFFER_NEW(CommandBuffer, StateDelta, Memory) \
  4481. gcmDEFINESECUREUSER() \
  4482. gcmDEFINELOADSTATEBASE() \
  4483. gcsTEMPCMDBUF CommandBuffer = gcvNULL; \
  4484. gctUINT32_PTR Memory; \
  4485. gcsSTATE_DELTA_PTR StateDelta
  4486. #define gcmBEGINSTATEBUFFER_NEW(Hardware, CommandBuffer, StateDelta, Memory, OutSide) \
  4487. { \
  4488. if (OutSide) \
  4489. {\
  4490. Memory = (gctUINT32_PTR)*OutSide; \
  4491. }\
  4492. else \
  4493. {\
  4494. gcmONERROR(gcoBUFFER_StartTEMPCMDBUF( \
  4495. Hardware->buffer, &CommandBuffer \
  4496. ));\
  4497. \
  4498. Memory = (gctUINT32_PTR)(CommandBuffer->buffer); \
  4499. \
  4500. }\
  4501. StateDelta = Hardware->delta; \
  4502. \
  4503. gcmBEGINSECUREUSER(); \
  4504. gcmSETLOADSTATEBASE(CommandBuffer,OutSide);\
  4505. }
  4506. #define gcmENDSTATEBUFFER_NEW(Hardware, CommandBuffer, Memory, OutSide) \
  4507. { \
  4508. gcmENDSECUREUSER(); \
  4509. \
  4510. if (OutSide) \
  4511. {\
  4512. *OutSide = Memory; \
  4513. }\
  4514. else \
  4515. {\
  4516. CommandBuffer->currentByteSize = (gctUINT32)((gctUINT8_PTR)Memory - \
  4517. (gctUINT8_PTR)CommandBuffer->buffer); \
  4518. \
  4519. gcmONERROR(gcoBUFFER_EndTEMPCMDBUF(Hardware->buffer));\
  4520. }\
  4521. gcmUNSETLOADSTATEBASE()\
  4522. }
  4523. /*----------------------------------------------------------------------------*/
  4524. #define gcmBEGINSTATEBATCH_NEW(CommandBuffer, Memory, FixedPoint, Address, Count) \
  4525. { \
  4526. gcmVERIFYLOADSTATEALIGNED(CommandBuffer,Memory);\
  4527. gcmASSERT((gctUINT32)Count <= 1024); \
  4528. \
  4529. *Memory++ \
  4530. = gcmSETFIELDVALUE(0, AQ_COMMAND_LOAD_STATE_COMMAND, OPCODE, LOAD_STATE) \
  4531. | gcmSETFIELD (0, AQ_COMMAND_LOAD_STATE_COMMAND, FLOAT, FixedPoint) \
  4532. | gcmSETFIELD (0, AQ_COMMAND_LOAD_STATE_COMMAND, COUNT, Count) \
  4533. | gcmSETFIELD (0, AQ_COMMAND_LOAD_STATE_COMMAND, ADDRESS, Address); \
  4534. \
  4535. gcmSKIPSECUREUSER(); \
  4536. }
  4537. #define gcmENDSTATEBATCH_NEW(CommandBuffer, Memory) \
  4538. gcmVERIFYLOADSTATEALIGNED(CommandBuffer,Memory);
  4539. /*----------------------------------------------------------------------------*/
  4540. #define gcmSETSTATEDATA_NEW(StateDelta, CommandBuffer, Memory, FixedPoint, \
  4541. Address, Data) \
  4542. { \
  4543. gctUINT32 __temp_data32__; \
  4544. \
  4545. __temp_data32__ = Data; \
  4546. \
  4547. *Memory++ = __temp_data32__; \
  4548. \
  4549. gcoHARDWARE_UpdateDelta( \
  4550. StateDelta, Address, 0, __temp_data32__ \
  4551. ); \
  4552. \
  4553. gcmDUMPSTATEDATA(StateDelta, FixedPoint, Address, __temp_data32__); \
  4554. \
  4555. gcmUPDATESECUREUSER(); \
  4556. }
  4557. #define gcmSETSTATEDATAWITHMASK_NEW(StateDelta, CommandBuffer, Memory, FixedPoint, \
  4558. Address, Mask, Data) \
  4559. { \
  4560. gctUINT32 __temp_data32__; \
  4561. \
  4562. __temp_data32__ = Data; \
  4563. \
  4564. *Memory++ = __temp_data32__; \
  4565. \
  4566. gcoHARDWARE_UpdateDelta( \
  4567. StateDelta, Address, Mask, __temp_data32__ \
  4568. ); \
  4569. \
  4570. gcmDUMPSTATEDATA(StateDelta, FixedPoint, Address, __temp_data32__); \
  4571. \
  4572. gcmUPDATESECUREUSER(); \
  4573. }
  4574. #define gcmSETCTRLSTATE_NEW(StateDelta, CommandBuffer, Memory, Address, Data) \
  4575. { \
  4576. gctUINT32 __temp_data32__; \
  4577. \
  4578. __temp_data32__ = Data; \
  4579. \
  4580. *Memory++ = __temp_data32__; \
  4581. \
  4582. gcmDUMPSTATEDATA(StateDelta, gcvFALSE, Address, __temp_data32__); \
  4583. \
  4584. gcmSKIPSECUREUSER(); \
  4585. }
  4586. #define gcmSETFILLER_NEW(CommandBuffer, Memory) \
  4587. { \
  4588. Memory += 1; \
  4589. \
  4590. gcmSKIPSECUREUSER(); \
  4591. }
  4592. /*----------------------------------------------------------------------------*/
  4593. #define gcmSETSINGLESTATE_NEW(StateDelta, CommandBuffer, Memory, FixedPoint, \
  4594. Address, Data) \
  4595. { \
  4596. gcmBEGINSTATEBATCH_NEW(CommandBuffer, Memory, FixedPoint, Address, 1); \
  4597. gcmSETSTATEDATA_NEW(StateDelta, CommandBuffer, Memory, FixedPoint, \
  4598. Address, Data); \
  4599. gcmENDSTATEBATCH_NEW(CommandBuffer, Memory); \
  4600. }
  4601. #define gcmSETSINGLESTATEWITHMASK_NEW(StateDelta, CommandBuffer, Memory, FixedPoint, \
  4602. Address, Mask, Data) \
  4603. { \
  4604. gcmBEGINSTATEBATCH_NEW(CommandBuffer, Memory, FixedPoint, Address, 1); \
  4605. gcmSETSTATEDATAWITHMASK_NEW(StateDelta, CommandBuffer, Memory, FixedPoint, \
  4606. Address, Mask, Data); \
  4607. gcmENDSTATEBATCH_NEW(CommandBuffer, Memory); \
  4608. }
  4609. #define gcmSETSINGLECTRLSTATE_NEW(StateDelta, CommandBuffer, Memory, FixedPoint, \
  4610. Address, Data) \
  4611. { \
  4612. gcmBEGINSTATEBATCH_NEW(CommandBuffer, Memory, FixedPoint, Address, 1); \
  4613. gcmSETCTRLSTATE_NEW(StateDelta, CommandBuffer, Memory, Address, Data); \
  4614. gcmENDSTATEBATCH_NEW(CommandBuffer, Memory); \
  4615. }
  4616. #define gcmSETSEMASTALLPIPE_NEW(StateDelta, CommandBuffer, Memory, Data) \
  4617. { \
  4618. gcmSETSINGLESTATE_NEW(StateDelta, CommandBuffer, Memory, gcvFALSE, AQSemaphoreRegAddrs, Data); \
  4619. \
  4620. *Memory++ = gcmSETFIELDVALUE(0, STALL_COMMAND, OPCODE, STALL); \
  4621. \
  4622. *Memory++ = Data; \
  4623. \
  4624. gcmDUMP(gcvNULL, "#[stall 0x%08X 0x%08X]", \
  4625. gcmSETFIELDVALUE(0, AQ_SEMAPHORE, SOURCE, FRONT_END), \
  4626. gcmSETFIELDVALUE(0, AQ_SEMAPHORE, DESTINATION, PIXEL_ENGINE)); \
  4627. \
  4628. gcmSKIPSECUREUSER(); \
  4629. }
  4630. #define gcmSETSTARTDECOMMAND_NEW(CommandBuffer, Memory, Count) \
  4631. { \
  4632. *Memory++ \
  4633. = gcmSETFIELDVALUE(0, AQ_COMMAND_START_DE_COMMAND, OPCODE, START_DE) \
  4634. | gcmSETFIELD (0, AQ_COMMAND_START_DE_COMMAND, COUNT, Count) \
  4635. | gcmSETFIELD (0, AQ_COMMAND_START_DE_COMMAND, DATA_COUNT, 0); \
  4636. \
  4637. *Memory++ = 0xDEADDEED; \
  4638. \
  4639. }
  4640. #define gcmSETSTATEDATA_NEW_FAST(StateDelta, CommandBuffer, Memory, FixedPoint, \
  4641. Address, Data) \
  4642. { \
  4643. gctUINT32 __temp_data32__; \
  4644. \
  4645. __temp_data32__ = Data; \
  4646. \
  4647. *Memory++ = __temp_data32__; \
  4648. \
  4649. gcmDUMPSTATEDATA(StateDelta, FixedPoint, Address, __temp_data32__); \
  4650. \
  4651. gcmUPDATESECUREUSER(); \
  4652. }
  4653. #define gcmSETSTATEDATAWITHMASK_NEW_FAST(StateDelta, CommandBuffer, Memory, FixedPoint, \
  4654. Address, Mask, Data) \
  4655. { \
  4656. gctUINT32 __temp_data32__; \
  4657. \
  4658. __temp_data32__ = Data; \
  4659. \
  4660. *Memory++ = __temp_data32__; \
  4661. \
  4662. gcmDUMPSTATEDATA(StateDelta, FixedPoint, Address, __temp_data32__); \
  4663. \
  4664. gcmUPDATESECUREUSER(); \
  4665. }
  4666. #define gcmSETSINGLESTATE_NEW_FAST(StateDelta, CommandBuffer, Memory, FixedPoint, \
  4667. Address, Data) \
  4668. { \
  4669. gcmBEGINSTATEBATCH_NEW(CommandBuffer, Memory, FixedPoint, Address, 1); \
  4670. gcmSETSTATEDATA_NEW_FAST(StateDelta, CommandBuffer, Memory, FixedPoint, \
  4671. Address, Data); \
  4672. gcmENDSTATEBATCH_NEW(CommandBuffer, Memory); \
  4673. }
  4674. #define gcmSETSINGLESTATEWITHMASK_NEW_FAST(StateDelta, CommandBuffer, Memory, FixedPoint, \
  4675. Address, Mask, Data) \
  4676. { \
  4677. gcmBEGINSTATEBATCH_NEW(CommandBuffer, Memory, FixedPoint, Address, 1); \
  4678. gcmSETSTATEDATAWITHMASK_NEW_FAST(StateDelta, CommandBuffer, Memory, FixedPoint, \
  4679. Address, Mask, Data); \
  4680. gcmENDSTATEBATCH_NEW(CommandBuffer, Memory); \
  4681. }
  4682. #define gcmSETSTATEDATA_FAST(StateDelta, CommandBuffer, Memory, FixedPoint, \
  4683. Address, Data) \
  4684. { \
  4685. gctUINT32 __temp_data32__; \
  4686. \
  4687. gcmVERIFYLOADSTATE(CommandBuffer, Memory, Address); \
  4688. \
  4689. gcmSAFECASTSIZET(__temp_data32__, Data); \
  4690. \
  4691. *Memory++ = __temp_data32__; \
  4692. \
  4693. gcmDUMPSTATEDATA(StateDelta, FixedPoint, Address, __temp_data32__); \
  4694. \
  4695. gcmUPDATESECUREUSER(); \
  4696. }
  4697. #define gcmSETSTATEDATAWITHMASK_FAST(StateDelta, CommandBuffer, Memory, FixedPoint, \
  4698. Address, Mask, Data) \
  4699. { \
  4700. gctUINT32 __temp_data32__; \
  4701. \
  4702. gcmVERIFYLOADSTATE(CommandBuffer, Memory, Address); \
  4703. \
  4704. __temp_data32__ = Data; \
  4705. \
  4706. *Memory++ = __temp_data32__; \
  4707. \
  4708. gcmDUMPSTATEDATA(StateDelta, FixedPoint, Address, __temp_data32__); \
  4709. \
  4710. gcmUPDATESECUREUSER(); \
  4711. }
  4712. #define gcmSETSINGLESTATE_FAST(StateDelta, CommandBuffer, Memory, FixedPoint, \
  4713. Address, Data) \
  4714. { \
  4715. gcmBEGINSTATEBATCH(CommandBuffer, Memory, FixedPoint, Address, 1); \
  4716. gcmSETSTATEDATA_FAST(StateDelta, CommandBuffer, Memory, FixedPoint, \
  4717. Address, Data); \
  4718. gcmENDSTATEBATCH(CommandBuffer, Memory); \
  4719. }
  4720. #define gcmSETSINGLESTATEWITHMASK_FAST(StateDelta, CommandBuffer, Memory, FixedPoint, \
  4721. Address, Mask, Data) \
  4722. { \
  4723. gcmBEGINSTATEBATCH(CommandBuffer, Memory, FixedPoint, Address, 1); \
  4724. gcmSETSTATEDATAWITHMASK_FAST(StateDelta, CommandBuffer, Memory, FixedPoint, \
  4725. Address, Mask, Data); \
  4726. gcmENDSTATEBATCH(CommandBuffer, Memory); \
  4727. }
  4728. #define gcmDEFINESTATEBUFFER_NEW_FAST(CommandBuffer, Memory) \
  4729. gcmDEFINESECUREUSER() \
  4730. gcmDEFINELOADSTATEBASE() \
  4731. gcsTEMPCMDBUF CommandBuffer = gcvNULL; \
  4732. gctUINT32_PTR Memory;
  4733. #define gcmDEFINESTATEBUFFER_FAST(CommandBuffer, Memory, ReserveSize) \
  4734. gcmDEFINESECUREUSER() \
  4735. gctSIZE_T ReserveSize; \
  4736. gcoCMDBUF CommandBuffer; \
  4737. gctUINT32_PTR Memory;
  4738. #define gcmBEGINSTATEBUFFER_FAST(Hardware, CommandBuffer, Memory, ReserveSize) \
  4739. { \
  4740. gcmONERROR(gcoBUFFER_Reserve( \
  4741. Hardware->buffer, ReserveSize, gcvTRUE, &CommandBuffer \
  4742. )); \
  4743. \
  4744. Memory = (gctUINT32_PTR) gcmUINT64_TO_PTR(CommandBuffer->lastReserve); \
  4745. \
  4746. gcmBEGINSECUREUSER(); \
  4747. }
  4748. #define gcmBEGINSTATEBUFFER_NEW_FAST(Hardware, CommandBuffer, Memory, OutSide) \
  4749. { \
  4750. if (OutSide) \
  4751. {\
  4752. Memory = (gctUINT32_PTR)*OutSide; \
  4753. }\
  4754. else \
  4755. {\
  4756. gcmONERROR(gcoBUFFER_StartTEMPCMDBUF( \
  4757. Hardware->buffer, &CommandBuffer \
  4758. ));\
  4759. \
  4760. Memory = (gctUINT32_PTR)(CommandBuffer->buffer); \
  4761. \
  4762. }\
  4763. \
  4764. gcmBEGINSECUREUSER(); \
  4765. gcmSETLOADSTATEBASE(CommandBuffer,OutSide);\
  4766. }
  4767. /*******************************************************************************
  4768. **
  4769. ** gcmCONFIGUREUNIFORMS
  4770. **
  4771. ** Configure uniforms according to chip and numConstants.
  4772. */
  4773. #if !gcdENABLE_UNIFIED_CONSTANT
  4774. #define gcmCONFIGUREUNIFORMS(ChipModel, ChipRevision, NumConstants, \
  4775. UnifiedConst, VsConstBase, PsConstBase, VsConstMax, PsConstMax, ConstMax) \
  4776. { \
  4777. if (ChipModel == gcv2000 && ChipRevision == 0x5118) \
  4778. { \
  4779. UnifiedConst = gcvFALSE; \
  4780. VsConstBase = AQVertexShaderConstRegAddrs; \
  4781. PsConstBase = AQPixelShaderConstRegAddrs; \
  4782. VsConstMax = 256; \
  4783. PsConstMax = 64; \
  4784. ConstMax = 320; \
  4785. } \
  4786. else if (NumConstants == 320) \
  4787. { \
  4788. UnifiedConst = gcvFALSE; \
  4789. VsConstBase = AQVertexShaderConstRegAddrs; \
  4790. PsConstBase = AQPixelShaderConstRegAddrs; \
  4791. VsConstMax = 256; \
  4792. PsConstMax = 64; \
  4793. ConstMax = 320; \
  4794. } \
  4795. /* All GC1000 series chips can only support 64 uniforms for ps on non-unified const mode. */ \
  4796. else if (NumConstants > 256 && ChipModel == gcv1000) \
  4797. { \
  4798. UnifiedConst = gcvFALSE; \
  4799. VsConstBase = AQVertexShaderConstRegAddrs; \
  4800. PsConstBase = AQPixelShaderConstRegAddrs; \
  4801. VsConstMax = 256; \
  4802. PsConstMax = 64; \
  4803. ConstMax = 320; \
  4804. } \
  4805. else if (NumConstants > 256) \
  4806. { \
  4807. UnifiedConst = gcvFALSE; \
  4808. VsConstBase = AQVertexShaderConstRegAddrs; \
  4809. PsConstBase = AQPixelShaderConstRegAddrs; \
  4810. VsConstMax = 256; \
  4811. PsConstMax = 256; \
  4812. ConstMax = 512; \
  4813. } \
  4814. else if (NumConstants == 256) \
  4815. { \
  4816. UnifiedConst = gcvFALSE; \
  4817. VsConstBase = AQVertexShaderConstRegAddrs; \
  4818. PsConstBase = AQPixelShaderConstRegAddrs; \
  4819. VsConstMax = 256; \
  4820. PsConstMax = 256; \
  4821. ConstMax = 512; \
  4822. } \
  4823. else \
  4824. { \
  4825. UnifiedConst = gcvFALSE; \
  4826. VsConstBase = AQVertexShaderConstRegAddrs; \
  4827. PsConstBase = AQPixelShaderConstRegAddrs; \
  4828. VsConstMax = 168; \
  4829. PsConstMax = 64; \
  4830. ConstMax = 232; \
  4831. } \
  4832. }
  4833. #else
  4834. #define gcmCONFIGUREUNIFORMS(ChipModel, ChipRevision, NumConstants, \
  4835. UnifiedConst, VsConstBase, PsConstBase, VsConstMax, PsConstMax, ConstMax) \
  4836. { \
  4837. if (NumConstants > 256) \
  4838. { \
  4839. UnifiedConst = gcvTRUE; \
  4840. VsConstBase = gcregSHUniformsRegAddrs; \
  4841. PsConstBase = gcregSHUniformsRegAddrs; \
  4842. VsConstMax = gcmMIN(512, NumConstants - 64); \
  4843. PsConstMax = gcmMIN(512, NumConstants - 64); \
  4844. ConstMax = NumConstants; \
  4845. } \
  4846. else if (NumConstants == 256) \
  4847. { \
  4848. if (ChipModel == gcv2000 && ChipRevision == 0x5118) \
  4849. { \
  4850. UnifiedConst = gcvFALSE; \
  4851. VsConstBase = AQVertexShaderConstRegAddrs; \
  4852. PsConstBase = AQPixelShaderConstRegAddrs; \
  4853. VsConstMax = 256; \
  4854. PsConstMax = 64; \
  4855. ConstMax = 320; \
  4856. } \
  4857. else \
  4858. { \
  4859. UnifiedConst = gcvFALSE; \
  4860. VsConstBase = AQVertexShaderConstRegAddrs; \
  4861. PsConstBase = AQPixelShaderConstRegAddrs; \
  4862. VsConstMax = 256; \
  4863. PsConstMax = 256; \
  4864. ConstMax = 512; \
  4865. } \
  4866. } \
  4867. else \
  4868. { \
  4869. UnifiedConst = gcvFALSE; \
  4870. VsConstBase = AQVertexShaderConstRegAddrs; \
  4871. PsConstBase = AQPixelShaderConstRegAddrs; \
  4872. VsConstMax = 168; \
  4873. PsConstMax = 64; \
  4874. ConstMax = 232; \
  4875. } \
  4876. }
  4877. #endif
  4878. #ifdef __cplusplus
  4879. }
  4880. #endif
  4881. #endif /* __gc_hal_base_h_ */