yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
591affaf7
master
1// debug-device.cpp 2#include "debug-device.h" 3 4#include "debug-buffer.h" 5#include "debug-command-queue.h" 6#include "debug-fence.h" 7#include "debug-framebuffer.h" 8#include "debug-helper-functions.h" 9#include "debug-pipeline-state.h" 10#include "debug-query.h" 11#include "debug-render-pass.h" 12#include "debug-resource-views.h" 13#include "debug-sampler-state.h" 14#include "debug-shader-object.h" 15#include "debug-shader-program.h" 16#include "debug-shader-table.h" 17#include "debug-swap-chain.h" 18#include "debug-texture.h" 19#include "debug-transient-heap.h" 20#include "debug-vertex-layout.h" 21 22namespace gfx 23{ 24using namespace Slang ; 25 26namespace debug 27{ 28 29SlangResult DebugDevice ::queryInterface (SlangUUID const & uuid ,void ** outObject )noexcept 30{ 31void * intf = getInterface (uuid ); 32if (intf ) 33 { 34addRef (); 35* outObject = intf ; 36return SLANG_OK ; 37 } 38 39// Fallback to trying to get the interface from the debugged object 40return baseObject -> queryInterface (uuid ,outObject ); 41} 42 43Result DebugDevice ::getNativeDeviceHandles (InteropHandles * outHandles ) 44{ 45return baseObject -> getNativeDeviceHandles (outHandles ); 46} 47 48Result DebugDevice ::getFeatures ( 49const char ** outFeatures , 50Size bufferSize , 51GfxCount * outFeatureCount ) 52{ 53SLANG_GFX_API_FUNC ; 54 55return baseObject -> getFeatures (outFeatures ,bufferSize ,outFeatureCount ); 56} 57 58Result DebugDevice ::getFormatSupportedResourceStates (Format format ,ResourceStateSet * outStates ) 59{ 60SLANG_GFX_API_FUNC ; 61return baseObject -> getFormatSupportedResourceStates (format ,outStates ); 62} 63 64DebugDevice ::DebugDevice () 65{ 66SLANG_GFX_API_FUNC_NAME ("CreateDevice" ); 67GFX_DIAGNOSE_INFO ("Debug layer is enabled." ); 68} 69 70SLANG_NO_THROW bool SLANG_MCALL DebugDevice ::hasFeature (const char * feature ) 71{ 72SLANG_GFX_API_FUNC ; 73 74return baseObject -> hasFeature (feature ); 75} 76 77Result DebugDevice ::getSlangSession (slang::ISession ** outSlangSession ) 78{ 79SLANG_GFX_API_FUNC ; 80 81return baseObject -> getSlangSession (outSlangSession ); 82} 83 84Result DebugDevice ::createTransientResourceHeap ( 85const ITransientResourceHeap ::Desc & desc , 86ITransientResourceHeap ** outHeap ) 87{ 88SLANG_GFX_API_FUNC ; 89 90RefPtr < DebugTransientResourceHeap > outObject = new DebugTransientResourceHeap (); 91auto result = baseObject -> createTransientResourceHeap (desc ,outObject -> baseObject .writeRef ()); 92if (SLANG_FAILED (result )) 93return result ; 94returnComPtr (outHeap ,outObject ); 95return result ; 96} 97 98Result DebugDevice ::createTextureResource ( 99const ITextureResource ::Desc & desc , 100const ITextureResource ::SubresourceData * initData , 101ITextureResource ** outResource ) 102{ 103SLANG_GFX_API_FUNC ; 104 105RefPtr < DebugTextureResource > outObject = new DebugTextureResource (); 106auto result = 107baseObject -> createTextureResource (desc ,initData ,outObject -> baseObject .writeRef ()); 108if (SLANG_FAILED (result )) 109return result ; 110returnComPtr (outResource ,outObject ); 111return result ; 112} 113 114Result DebugDevice ::createTextureFromNativeHandle ( 115InteropHandle handle , 116const ITextureResource ::Desc & srcDesc , 117ITextureResource ** outResource ) 118{ 119SLANG_GFX_API_FUNC ; 120 121RefPtr < DebugTextureResource > outObject = new DebugTextureResource (); 122auto result = baseObject -> createTextureFromNativeHandle ( 123handle , 124srcDesc , 125outObject -> baseObject .writeRef ()); 126if (SLANG_FAILED (result )) 127return result ; 128returnComPtr (outResource ,outObject ); 129return result ; 130} 131 132Result DebugDevice ::createTextureFromSharedHandle ( 133InteropHandle handle , 134const ITextureResource ::Desc & srcDesc , 135const size_t size , 136ITextureResource ** outResource ) 137{ 138SLANG_GFX_API_FUNC ; 139 140RefPtr < DebugTextureResource > outObject = new DebugTextureResource (); 141auto result = baseObject -> createTextureFromSharedHandle ( 142handle , 143srcDesc , 144size , 145outObject -> baseObject .writeRef ()); 146if (SLANG_FAILED (result )) 147return result ; 148returnComPtr (outResource ,outObject ); 149return result ; 150} 151 152Result DebugDevice ::createBufferResource ( 153const IBufferResource ::Desc & desc , 154const void * initData , 155IBufferResource ** outResource ) 156{ 157SLANG_GFX_API_FUNC ; 158 159RefPtr < DebugBufferResource > outObject = new DebugBufferResource (); 160auto result = 161baseObject -> createBufferResource (desc ,initData ,outObject -> baseObject .writeRef ()); 162if (SLANG_FAILED (result )) 163return result ; 164returnComPtr (outResource ,outObject ); 165return result ; 166} 167 168Result DebugDevice ::createBufferFromNativeHandle ( 169InteropHandle handle , 170const IBufferResource ::Desc & srcDesc , 171IBufferResource ** outResource ) 172{ 173SLANG_GFX_API_FUNC ; 174 175RefPtr < DebugBufferResource > outObject = new DebugBufferResource (); 176auto result = 177baseObject -> createBufferFromNativeHandle (handle ,srcDesc ,outObject -> baseObject .writeRef ()); 178if (SLANG_FAILED (result )) 179return result ; 180returnComPtr (outResource ,outObject ); 181return result ; 182} 183 184Result DebugDevice ::createBufferFromSharedHandle ( 185InteropHandle handle , 186const IBufferResource ::Desc & srcDesc , 187IBufferResource ** outResource ) 188{ 189SLANG_GFX_API_FUNC ; 190 191RefPtr < DebugBufferResource > outObject = new DebugBufferResource (); 192auto result = 193baseObject -> createBufferFromSharedHandle (handle ,srcDesc ,outObject -> baseObject .writeRef ()); 194if (SLANG_FAILED (result )) 195return result ; 196returnComPtr (outResource ,outObject ); 197return result ; 198} 199 200Result DebugDevice ::createSamplerState (ISamplerState ::Desc const & desc ,ISamplerState ** outSampler ) 201{ 202SLANG_GFX_API_FUNC ; 203 204RefPtr < DebugSamplerState > outObject = new DebugSamplerState (); 205auto result = baseObject -> createSamplerState (desc ,outObject -> baseObject .writeRef ()); 206if (SLANG_FAILED (result )) 207return result ; 208returnComPtr (outSampler ,outObject ); 209return result ; 210} 211 212Result DebugDevice ::createTextureView ( 213ITextureResource * texture , 214IResourceView ::Desc const & desc , 215IResourceView ** outView ) 216{ 217SLANG_GFX_API_FUNC ; 218 219RefPtr < DebugResourceView > outObject = new DebugResourceView (); 220auto result = 221baseObject -> createTextureView (getInnerObj (texture ),desc ,outObject -> baseObject .writeRef ()); 222if (SLANG_FAILED (result )) 223return result ; 224returnComPtr (outView ,outObject ); 225return result ; 226} 227 228Result DebugDevice ::createBufferView ( 229IBufferResource * buffer , 230IBufferResource * counterBuffer , 231IResourceView ::Desc const & desc , 232IResourceView ** outView ) 233{ 234SLANG_GFX_API_FUNC ; 235 236RefPtr < DebugResourceView > outObject = new DebugResourceView (); 237auto result = baseObject -> createBufferView ( 238getInnerObj (buffer ), 239getInnerObj (counterBuffer ), 240desc , 241outObject -> baseObject .writeRef ()); 242if (SLANG_FAILED (result )) 243return result ; 244returnComPtr (outView ,outObject ); 245return result ; 246} 247 248Result DebugDevice ::getAccelerationStructurePrebuildInfo ( 249const IAccelerationStructure ::BuildInputs & buildInputs , 250IAccelerationStructure ::PrebuildInfo * outPrebuildInfo ) 251{ 252SLANG_GFX_API_FUNC ; 253validateAccelerationStructureBuildInputs (buildInputs ); 254return baseObject -> getAccelerationStructurePrebuildInfo (buildInputs ,outPrebuildInfo ); 255} 256 257Result DebugDevice ::createAccelerationStructure ( 258const IAccelerationStructure ::CreateDesc & desc , 259IAccelerationStructure ** outAS ) 260{ 261SLANG_GFX_API_FUNC ; 262auto innerDesc = desc ; 263innerDesc .buffer = getInnerObj (innerDesc .buffer ); 264RefPtr < DebugAccelerationStructure > outObject = new DebugAccelerationStructure (); 265auto result = 266baseObject -> createAccelerationStructure (innerDesc ,outObject -> baseObject .writeRef ()); 267if (SLANG_FAILED (result )) 268return result ; 269returnComPtr (outAS ,outObject ); 270return SLANG_OK ; 271} 272 273Result DebugDevice ::createFramebufferLayout ( 274IFramebufferLayout ::Desc const & desc , 275IFramebufferLayout ** outFrameBuffer ) 276{ 277SLANG_GFX_API_FUNC ; 278 279RefPtr < DebugFramebufferLayout > outObject = new DebugFramebufferLayout (); 280auto result = baseObject -> createFramebufferLayout (desc ,outObject -> baseObject .writeRef ()); 281if (SLANG_FAILED (result )) 282return result ; 283returnComPtr (outFrameBuffer ,outObject ); 284return result ; 285} 286 287Result DebugDevice ::createFramebuffer (IFramebuffer ::Desc const & desc ,IFramebuffer ** outFrameBuffer ) 288{ 289SLANG_GFX_API_FUNC ; 290 291auto innerDesc = desc ; 292innerDesc .layout = getInnerObj (desc .layout ); 293innerDesc .depthStencilView = getInnerObj (desc .depthStencilView ); 294List < IResourceView *> innerRenderTargets ; 295for (GfxIndex i = 0 ;i < desc .renderTargetCount ;i ++ ) 296 { 297auto innerRenderTarget = getInnerObj (desc .renderTargetViews [i ]); 298innerRenderTargets .add (innerRenderTarget ); 299 } 300innerDesc .renderTargetViews = innerRenderTargets .getBuffer (); 301 302RefPtr < DebugFramebuffer > outObject = new DebugFramebuffer (); 303auto result = baseObject -> createFramebuffer (innerDesc ,outObject -> baseObject .writeRef ()); 304if (SLANG_FAILED (result )) 305return result ; 306returnComPtr (outFrameBuffer ,outObject ); 307return result ; 308} 309 310Result DebugDevice ::createRenderPassLayout ( 311const IRenderPassLayout ::Desc & desc , 312IRenderPassLayout ** outRenderPassLayout ) 313{ 314SLANG_GFX_API_FUNC ; 315 316auto innerDesc = desc ; 317innerDesc .framebufferLayout = getInnerObj (desc .framebufferLayout ); 318RefPtr < DebugRenderPassLayout > outObject = new DebugRenderPassLayout (); 319auto result = baseObject -> createRenderPassLayout (innerDesc ,outObject -> baseObject .writeRef ()); 320if (SLANG_FAILED (result )) 321return result ; 322returnComPtr (outRenderPassLayout ,outObject ); 323return result ; 324} 325 326Result DebugDevice ::createSwapchain ( 327ISwapchain ::Desc const & desc , 328WindowHandle window , 329ISwapchain ** outSwapchain ) 330{ 331SLANG_GFX_API_FUNC ; 332 333auto innerDesc = desc ; 334innerDesc .queue = getInnerObj (desc .queue ); 335RefPtr < DebugSwapchain > outObject = new DebugSwapchain (); 336outObject -> queue = getDebugObj (desc .queue ); 337auto result = baseObject -> createSwapchain (innerDesc ,window ,outObject -> baseObject .writeRef ()); 338if (SLANG_FAILED (result )) 339return result ; 340returnComPtr (outSwapchain ,outObject ); 341return Result (); 342} 343 344Result DebugDevice ::createInputLayout (IInputLayout ::Desc const & desc ,IInputLayout ** outLayout ) 345{ 346SLANG_GFX_API_FUNC ; 347 348RefPtr < DebugInputLayout > outObject = new DebugInputLayout (); 349auto result = baseObject -> createInputLayout (desc ,outObject -> baseObject .writeRef ()); 350if (SLANG_FAILED (result )) 351return result ; 352returnComPtr (outLayout ,outObject ); 353return result ; 354} 355 356Result DebugDevice ::createCommandQueue (const ICommandQueue ::Desc & desc ,ICommandQueue ** outQueue ) 357{ 358SLANG_GFX_API_FUNC ; 359 360RefPtr < DebugCommandQueue > outObject = new DebugCommandQueue (); 361auto result = baseObject -> createCommandQueue (desc ,outObject -> baseObject .writeRef ()); 362if (SLANG_FAILED (result )) 363return result ; 364returnComPtr (outQueue ,outObject ); 365return result ; 366} 367 368Result DebugDevice ::createShaderObject ( 369 slang::TypeReflection * type , 370ShaderObjectContainerType containerType , 371IShaderObject ** outShaderObject ) 372{ 373SLANG_GFX_API_FUNC ; 374 375RefPtr < DebugShaderObject > outObject = new DebugShaderObject (); 376auto typeName = type -> getName (); 377auto result = 378baseObject -> createShaderObject (type ,containerType ,outObject -> baseObject .writeRef ()); 379outObject -> m_typeName = typeName ; 380outObject -> m_device = this ; 381outObject -> m_slangType = type ; 382if (SLANG_FAILED (result )) 383return result ; 384returnComPtr (outShaderObject ,outObject ); 385return result ; 386} 387 388Result DebugDevice ::createShaderObject2 ( 389 slang::ISession * session , 390 slang::TypeReflection * type , 391ShaderObjectContainerType containerType , 392IShaderObject ** outShaderObject ) 393{ 394SLANG_GFX_API_FUNC ; 395 396RefPtr < DebugShaderObject > outObject = new DebugShaderObject (); 397auto typeName = type -> getName (); 398auto result = baseObject -> createShaderObject2 ( 399session , 400type , 401containerType , 402outObject -> baseObject .writeRef ()); 403outObject -> m_typeName = typeName ; 404outObject -> m_device = this ; 405outObject -> m_slangType = type ; 406if (SLANG_FAILED (result )) 407return result ; 408returnComPtr (outShaderObject ,outObject ); 409return result ; 410} 411 412Result DebugDevice ::createMutableShaderObject ( 413 slang::TypeReflection * type , 414ShaderObjectContainerType containerType , 415IShaderObject ** outShaderObject ) 416{ 417SLANG_GFX_API_FUNC ; 418 419RefPtr < DebugShaderObject > outObject = new DebugShaderObject (); 420auto typeName = type -> getName (); 421auto result = baseObject -> createMutableShaderObject ( 422type , 423containerType , 424outObject -> baseObject .writeRef ()); 425outObject -> m_typeName = typeName ; 426outObject -> m_device = this ; 427outObject -> m_slangType = type ; 428if (SLANG_FAILED (result )) 429return result ; 430returnComPtr (outShaderObject ,outObject ); 431return result ; 432} 433 434Result DebugDevice ::createMutableShaderObject2 ( 435 slang::ISession * session , 436 slang::TypeReflection * type , 437ShaderObjectContainerType containerType , 438IShaderObject ** outShaderObject ) 439{ 440SLANG_GFX_API_FUNC ; 441 442RefPtr < DebugShaderObject > outObject = new DebugShaderObject (); 443auto typeName = type -> getName (); 444auto result = baseObject -> createMutableShaderObject2 ( 445session , 446type , 447containerType , 448outObject -> baseObject .writeRef ()); 449outObject -> m_typeName = typeName ; 450outObject -> m_device = this ; 451outObject -> m_slangType = type ; 452if (SLANG_FAILED (result )) 453return result ; 454returnComPtr (outShaderObject ,outObject ); 455return result ; 456} 457 458Result DebugDevice ::createMutableRootShaderObject ( 459IShaderProgram * program , 460IShaderObject ** outRootObject ) 461{ 462SLANG_GFX_API_FUNC ; 463RefPtr < DebugShaderObject > outObject = new DebugShaderObject (); 464auto result = baseObject -> createMutableRootShaderObject ( 465getInnerObj (program ), 466outObject -> baseObject .writeRef ()); 467if (SLANG_FAILED (result )) 468return result ; 469outObject -> m_device = this ; 470outObject -> m_slangType = nullptr ; 471outObject -> m_rootComponentType = getDebugObj (program )-> m_slangProgram ; 472returnComPtr (outRootObject ,outObject ); 473return result ; 474} 475 476Result DebugDevice ::createShaderObjectFromTypeLayout ( 477 slang::TypeLayoutReflection * typeLayout , 478IShaderObject ** outShaderObject ) 479{ 480SLANG_GFX_API_FUNC ; 481 482RefPtr < DebugShaderObject > outObject = new DebugShaderObject (); 483auto result = 484baseObject -> createShaderObjectFromTypeLayout (typeLayout ,outObject -> baseObject .writeRef ()); 485auto type = typeLayout -> getType (); 486auto typeName = type -> getName (); 487outObject -> m_typeName = typeName ; 488outObject -> m_device = this ; 489outObject -> m_slangType = type ; 490if (SLANG_FAILED (result )) 491return result ; 492returnComPtr (outShaderObject ,outObject ); 493return result ; 494} 495 496Result DebugDevice ::createMutableShaderObjectFromTypeLayout ( 497 slang::TypeLayoutReflection * typeLayout , 498IShaderObject ** outShaderObject ) 499{ 500SLANG_GFX_API_FUNC ; 501RefPtr < DebugShaderObject > outObject = new DebugShaderObject (); 502auto result = baseObject -> createMutableShaderObjectFromTypeLayout ( 503typeLayout , 504outObject -> baseObject .writeRef ()); 505if (SLANG_FAILED (result )) 506return result ; 507auto type = typeLayout -> getType (); 508auto typeName = type -> getName (); 509outObject -> m_typeName = typeName ; 510outObject -> m_device = this ; 511outObject -> m_slangType = type ; 512returnComPtr (outShaderObject ,outObject ); 513return result ; 514} 515 516Result DebugDevice ::createProgram ( 517const IShaderProgram ::Desc & desc , 518IShaderProgram ** outProgram , 519ISlangBlob ** outDiagnostics ) 520{ 521SLANG_GFX_API_FUNC ; 522 523RefPtr < DebugShaderProgram > outObject = new DebugShaderProgram (); 524auto result = baseObject -> createProgram (desc ,outObject -> baseObject .writeRef (),outDiagnostics ); 525if (SLANG_FAILED (result )) 526return result ; 527outObject -> m_slangProgram = desc .slangGlobalScope ; 528returnComPtr (outProgram ,outObject ); 529return result ; 530} 531 532Result DebugDevice ::createProgram2 ( 533const IShaderProgram ::CreateDesc2 & desc , 534IShaderProgram ** outProgram , 535ISlangBlob ** outDiagnostics ) 536{ 537SLANG_GFX_API_FUNC ; 538IShaderProgram ::Desc desc1 = {}; 539RefPtr < DebugShaderProgram > outObject = new DebugShaderProgram (); 540auto result = 541baseObject -> createProgram2 (desc ,outObject -> baseObject .writeRef (),outDiagnostics ); 542if (SLANG_FAILED (result )) 543return result ; 544auto base = static_cast < ShaderProgramBase *> (outObject -> baseObject .get ()); 545outObject -> m_slangProgram = base -> desc .slangGlobalScope ; 546returnComPtr (outProgram ,outObject ); 547return result ; 548} 549 550Result DebugDevice ::createGraphicsPipelineState ( 551const GraphicsPipelineStateDesc & desc , 552IPipelineState ** outState ) 553{ 554SLANG_GFX_API_FUNC ; 555 556GraphicsPipelineStateDesc innerDesc = desc ; 557innerDesc .program = getInnerObj (desc .program ); 558innerDesc .inputLayout = getInnerObj (desc .inputLayout ); 559innerDesc .framebufferLayout = getInnerObj (desc .framebufferLayout ); 560RefPtr < DebugPipelineState > outObject = new DebugPipelineState (); 561auto result = 562baseObject -> createGraphicsPipelineState (innerDesc ,outObject -> baseObject .writeRef ()); 563if (SLANG_FAILED (result )) 564return result ; 565returnComPtr (outState ,outObject ); 566return result ; 567} 568 569Result DebugDevice ::createComputePipelineState ( 570const ComputePipelineStateDesc & desc , 571IPipelineState ** outState ) 572{ 573SLANG_GFX_API_FUNC ; 574 575ComputePipelineStateDesc innerDesc = desc ; 576innerDesc .program = getInnerObj (desc .program ); 577 578RefPtr < DebugPipelineState > outObject = new DebugPipelineState (); 579auto result = 580baseObject -> createComputePipelineState (innerDesc ,outObject -> baseObject .writeRef ()); 581if (SLANG_FAILED (result )) 582return result ; 583returnComPtr (outState ,outObject ); 584return result ; 585} 586 587Result DebugDevice ::createRayTracingPipelineState ( 588const RayTracingPipelineStateDesc & desc , 589IPipelineState ** outState ) 590{ 591SLANG_GFX_API_FUNC ; 592 593RayTracingPipelineStateDesc innerDesc = desc ; 594innerDesc .program = getInnerObj (desc .program ); 595 596RefPtr < DebugPipelineState > outObject = new DebugPipelineState (); 597auto result = 598baseObject -> createRayTracingPipelineState (innerDesc ,outObject -> baseObject .writeRef ()); 599if (SLANG_FAILED (result )) 600return result ; 601returnComPtr (outState ,outObject ); 602return result ; 603} 604 605SlangResult DebugDevice ::readTextureResource ( 606ITextureResource * resource , 607ResourceState state , 608ISlangBlob ** outBlob , 609size_t * outRowPitch , 610size_t * outPixelSize ) 611{ 612SLANG_GFX_API_FUNC ; 613return baseObject 614-> readTextureResource (getInnerObj (resource ),state ,outBlob ,outRowPitch ,outPixelSize ); 615} 616 617SlangResult DebugDevice ::readBufferResource ( 618IBufferResource * buffer , 619size_t offset , 620size_t size , 621ISlangBlob ** outBlob ) 622{ 623SLANG_GFX_API_FUNC ; 624return baseObject -> readBufferResource (getInnerObj (buffer ),offset ,size ,outBlob ); 625} 626 627const DeviceInfo & DebugDevice ::getDeviceInfo ()const 628{ 629SLANG_GFX_API_FUNC ; 630return baseObject -> getDeviceInfo (); 631} 632 633Result DebugDevice ::createQueryPool (const IQueryPool ::Desc & desc ,IQueryPool ** outPool ) 634{ 635SLANG_GFX_API_FUNC ; 636RefPtr < DebugQueryPool > result = new DebugQueryPool (); 637result -> desc = desc ; 638SLANG_RETURN_ON_FAIL (baseObject -> createQueryPool (desc ,result -> baseObject .writeRef ())); 639returnComPtr (outPool ,result ); 640return SLANG_OK ; 641} 642 643Result DebugDevice ::createFence (const IFence ::Desc & desc ,IFence ** outFence ) 644{ 645SLANG_GFX_API_FUNC ; 646RefPtr < DebugFence > result = new DebugFence (); 647SLANG_RETURN_ON_FAIL (baseObject -> createFence (desc ,result -> baseObject .writeRef ())); 648returnComPtr (outFence ,result ); 649return SLANG_OK ; 650} 651 652Result DebugDevice ::waitForFences ( 653GfxCount fenceCount , 654IFence ** fences , 655uint64_t * values , 656bool waitForAll , 657uint64_t timeout ) 658{ 659SLANG_GFX_API_FUNC ; 660ShortList < IFence *> innerFences ; 661for (GfxCount i = 0 ;i < fenceCount ;i ++ ) 662 { 663innerFences .add (getInnerObj (fences [i ])); 664 } 665return baseObject -> waitForFences ( 666fenceCount , 667innerFences .getArrayView ().getBuffer (), 668values , 669waitForAll , 670timeout ); 671} 672 673Result DebugDevice ::getTextureAllocationInfo ( 674const ITextureResource ::Desc & desc , 675size_t * outSize , 676size_t * outAlignment ) 677{ 678SLANG_GFX_API_FUNC ; 679return baseObject -> getTextureAllocationInfo (desc ,outSize ,outAlignment ); 680} 681 682Result DebugDevice ::getTextureRowAlignment (size_t * outAlignment ) 683{ 684SLANG_GFX_API_FUNC ; 685return baseObject -> getTextureRowAlignment (outAlignment ); 686} 687 688Result DebugDevice ::getCooperativeVectorProperties ( 689CooperativeVectorProperties * properties , 690uint32_t * propertyCount ) 691{ 692SLANG_GFX_API_FUNC ; 693return baseObject -> getCooperativeVectorProperties (properties ,propertyCount ); 694} 695 696Result DebugDevice ::createShaderTable (const IShaderTable ::Desc & desc ,IShaderTable ** outTable ) 697{ 698SLANG_GFX_API_FUNC ; 699RefPtr < DebugShaderTable > result = new DebugShaderTable (); 700SLANG_RETURN_ON_FAIL (baseObject -> createShaderTable (desc ,result -> baseObject .writeRef ())); 701returnComPtr (outTable ,result ); 702return SLANG_OK ; 703} 704 705}// namespace debug 706}// namespace gfx