Gå til innhold

Kræsj i ID3D10EffectShaderResourceVariable::SetResourceArray


Anbefalte innlegg

Driver å stuker med noe som kan se ut som en feil i DirectX 10 API-en for øyeblikket, men hadde vært veldig rart hvis det var det.

 

Har dette definert i .fx fila:

Texture2DArray txTextures;

 

Og så henter jeg opp den variabelen i programmet mitt slik:

g_pTextureArray = g_pEffect->GetVariableByName( "txTextures" )->AsShaderResource ();
if ( !g_pTextureArray->IsValid () )
{
_asm int 3;
}

Breakpointen oppstår ikke, så den er valid.

 

Så prøver jeg seinere å sette denne variabelen til en array med teksturer:

// TODO: Fix this shitty code
std::vector < ID3D10ShaderResourceView* > Temp;
std::vector < CTextureResource* > ::const_iterator iter = m_vecTextures.begin ();
for (; iter != m_vecTextures.end (); iter++ )
{
Temp.push_back ( (*iter)->GetDeviceResource () );
}

ID3D10ShaderResourceView** pTe = &Temp [0];

g_pTextureArray->SetResourceArray ( pTe, 0, Temp.size () );

 

Men dette fører til inni SDK-en i SetResourceArray kallet:

Unhandled exception at 0x6bc9addb in Spear.exe: 0xC0000005: Access violation reading location 0x00000004.

 

Dette fungerer som det skal:

g_pTextureArray->SetResourceArray ( pTe, 0, 1 );

 

Men ikke dette (index: 0, count: 2)

g_pTextureArray->SetResourceArray ( pTe, 0, 2 );

 

Og heller ikke dette (index: 1, count: 1)

g_pTextureArray->SetResourceArray ( pTe, 1, 1 );

 

Dette kræsjer også på andre linje:

g_pTextureArray->SetResourceArray ( pTe, 0, 1 );
g_pTextureArray->SetResourceArray ( pTe + 1, 1, 1 );

 

Har også prøvd å bytte rekkefølgen på teksturene og laste dette i index 0 og det fungerer uten problemer, så alle teksturene er valide, problemet oppstår så fort jeg prøver å legge en tekstur i en index som er over 0.

 

Har sitti med dette problemet i flere timer nå og kan ikke tenke meg hvorfor dette skjer, har leita overalt på MSDN dokumentasjonen men det står ingenting der jeg har leita om ting som kan forårsake det. Etter et søk på Google virker det som jeg er den første som bruker den funksjonen, for det har kanskje ett relevant treff, men uten noe relevant info.

 

Noen som har noen erfaringer med dette og kan tenke seg hva som forårsaker det?

Endret av chrml
Lenke til kommentar
Videoannonse
Annonse

Hmm, fant ut at det var fordi en Texture2DArray er en variabeltype, og skal man bruke SetResourceArray, så må det være en annen type array i shaderen ( Texture2D blah [n] ).

 

Men så traff jeg på en annen dum begrensning i shader 4.0, kan visst ikke indexe den arrayen fra shaderen annet enn med konstante tall :|. Så nå kan jeg bare drite i hele ideen jeg hadde å tegne hele meshes med mange teksturer ved å bruke et Draw call, tekstur array og tekstur ID beskrevet i input-en til vertexshaderen. :( Faen ta HLSL.

 

Alternativet er da Texture2DArray eller Texture3D, men da må alle teksturstørrelsene visstnok være like, og da faller hele poenget bort. Må nok gå tilbake til den tradisjonelle løsningen.

Endret av chrml
Lenke til kommentar

Ser du har funnet ut av dette, men jeg slenger meg på allikevel. Riktignok er det vel en begrensning at du kun kan indexere med konstanter som et array, og teksturerene må være homogene. Uansett, det er fullt mulig å aksessere dx10 texturer med å se på texture2d array som en ressurs som samples med en float3. Dette kan indekseres med en variabel fra en shader. Et eksempel på slik bruk finner du i dx10 sdk (mars 2008). Det (forøvrig veldig kule) instancing sample, indekserer et array av gress-teksturer. Du kan jo kanskje kikke der. Mer enn dette har jeg ikke å tilføye, har ennå ikke rukket å testet texture-arrays.

 

Generelt er det lite info om dx10-apiet. Driver å plages med artikulerte-dx10 mesher for tiden, som ikke direkte passer med den gamle d3dxmesh strukturen i dx9. Virker som vi må lære av hverandre, evt. prøve og feile.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...