Jump to content

  • Log In with Google      Sign In   
  • Create Account


Mipmaps and Mapping


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
8 replies to this topic

#1 Queequeg   Members   -  Reputation: 139

Like
0Likes
Like

Posted 19 February 2014 - 06:25 PM

I'm trying to use the ID3D11DeviceContext::Map function to change the data of a staging texture but I am having trouble determining the exact size of the texture. I am using the Directx Tool Kit to create the texture from a bmp file (test.bmp is just 4 pixels, red top left, green top right, blue bottom left, yellow bottom right):

 

 

CreateWICTextureFromFileEx(d3d11DeviceInterface, d3d11DeviceContextInterface, L"test.bmp", 0, D3D11_USAGE_STAGING, 0, D3D11_CPU_ACCESS_WRITE | D3D11_CPU_ACCESS_READ, 0, 0, &g_pOverlay_Staging, NULL)

 

Checking the desc after the creation:

 

 

ID3D11Texture2D * txt = reinterpret_cast<ID3D11Texture2D*>(g_pOverlay_Staging);

D3D11_TEXTURE2D_DESC desc;
txt->GetDesc(&desc);
std::wostringstream outs1;
outs1 << "HEIGHT = " << desc.Height << " WIDTH = " << desc.Width << " MIPMAP = " << desc.MipLevels << " Array size = " << desc.ArraySize << " Format = " << desc.Format << std::endl;
OutputDebugString(outs1.str().c_str());
 

I'm seeing HEIGHT = 2 WIDTH = 2 MIPMAP = 1 Array size = 1 Format = 28 (DXGI_FORMAT_R8G8B8A8_UNORM) Bind Flags = 0 Misc Flags = 0

 

Consequently, I am confused as to why I am seeing 120 bytes between the green and blue pixels. I thought this might be something to do with the WICtextureloader auto generating mipmaps but according to http://msdn.microsoft.com/en-us/library/windows/desktop/ff476426(v=vs.85).aspx generatemips should have no effect unless D3D11_BIND_RENDER_TARGET and D3D11_RESOURCE_MISC_GENERATE_MIPS are set. 

 

With the following code:

 

 

D3D11_MAPPED_SUBRESOURCE mapped_subresource;

HR(d3d11DeviceContextInterface->Map(g_pOverlay_Staging, 0, D3D11_MAP_READ_WRITE, 0, &mapped_subresource));
uint8_t * v = reinterpret_cast<uint8_t*>(mapped_subresource.pData);
unsigned int x = 0;
 
while (x < 256 ) {
std::bitset<8> one(v[x]);
std::bitset<8> two(v[x+1]);
std::bitset<8> three(v[x+2]);
std::bitset<8> four(v[x + 3]);
std::wostringstream outs1;
outs1 << "x[" << x << "] = " << one << " x[" << x + 1 << "] = " << two << " x[" << x + 2 << "] = " << three << " x[" << x + 3 << "] = " << four << std::endl;
OutputDebugString(outs1.str().c_str());

 

I get an output of:

 

 

x[0] = 11111111 x[1] = 00000000 x[2] = 00000000 x[3] = 11111111

x[4] = 00000000 x[5] = 11111111 x[6] = 00000000 x[7] = 11111111
x[8] = 00000000 x[9] = 00000000 x[10] = 00000000 x[11] = 00000000
x[12] = 00000000 x[13] = 00000000 x[14] = 00000000 x[15] = 00000000
x[16] = 00000000 x[17] = 00000000 x[18] = 00000000 x[19] = 00000000
x[20] = 00000000 x[21] = 00000000 x[22] = 00000000 x[23] = 00000000
x[24] = 00000000 x[25] = 00000000 x[26] = 00000000 x[27] = 00000000
x[28] = 00000000 x[29] = 00000000 x[30] = 00000000 x[31] = 00000000
x[32] = 00000000 x[33] = 00000000 x[34] = 00000000 x[35] = 00000000
x[36] = 00000000 x[37] = 00000000 x[38] = 00000000 x[39] = 00000000
x[40] = 00000000 x[41] = 00000000 x[42] = 00000000 x[43] = 00000000
x[44] = 00000000 x[45] = 00000000 x[46] = 00000000 x[47] = 00000000
x[48] = 00000000 x[49] = 00000000 x[50] = 00000000 x[51] = 00000000
x[52] = 00000000 x[53] = 00000000 x[54] = 00000000 x[55] = 00000000
x[56] = 00000000 x[57] = 00000000 x[58] = 00000000 x[59] = 00000000
x[60] = 00000000 x[61] = 00000000 x[62] = 00000000 x[63] = 00000000
x[64] = 00000000 x[65] = 00000000 x[66] = 00000000 x[67] = 00000000
x[68] = 00000000 x[69] = 00000000 x[70] = 00000000 x[71] = 00000000
x[72] = 00000000 x[73] = 00000000 x[74] = 00000000 x[75] = 00000000
x[76] = 00000000 x[77] = 00000000 x[78] = 00000000 x[79] = 00000000
x[80] = 00000000 x[81] = 00000000 x[82] = 00000000 x[83] = 00000000
x[84] = 00000000 x[85] = 00000000 x[86] = 00000000 x[87] = 00000000
x[88] = 00000000 x[89] = 00000000 x[90] = 00000000 x[91] = 00000000
x[92] = 00000000 x[93] = 00000000 x[94] = 00000000 x[95] = 00000000
x[96] = 00000000 x[97] = 00000000 x[98] = 00000000 x[99] = 00000000
x[100] = 00000000 x[101] = 00000000 x[102] = 00000000 x[103] = 00000000
x[104] = 00000000 x[105] = 00000000 x[106] = 00000000 x[107] = 00000000
x[108] = 00000000 x[109] = 00000000 x[110] = 00000000 x[111] = 00000000
x[112] = 00000000 x[113] = 00000000 x[114] = 00000000 x[115] = 00000000
x[116] = 00000000 x[117] = 00000000 x[118] = 00000000 x[119] = 00000000
x[120] = 00000000 x[121] = 00000000 x[122] = 00000000 x[123] = 00000000
x[124] = 00000000 x[125] = 00000000 x[126] = 00000000 x[127] = 00000000
x[128] = 00000000 x[129] = 00000000 x[130] = 11111111 x[131] = 11111111
x[132] = 11111111 x[133] = 11111111 x[134] = 00000000 x[135] = 11111111
x[136] = 00000000 x[137] = 00000000 x[138] = 00000000 x[139] = 00000000
x[140] = 00000000 x[141] = 00000000 x[142] = 00000000 x[143] = 00000000
x[144] = 00000000 x[145] = 00000000 x[146] = 00000000 x[147] = 00000000
x[148] = 00000000 x[149] = 00000000 x[150] = 00000000 x[151] = 00000000
x[152] = 00000000 x[153] = 00000000 x[154] = 00000000 x[155] = 00000000
x[156] = 00000000 x[157] = 00000000 x[158] = 00000000 x[159] = 00000000
x[160] = 00000000 x[161] = 00000000 x[162] = 00000000 x[163] = 00000000
x[164] = 00000000 x[165] = 00000000 x[166] = 00000000 x[167] = 00000000
x[168] = 00000000 x[169] = 00000000 x[170] = 00000000 x[171] = 00000000
x[172] = 00000000 x[173] = 00000000 x[174] = 00000000 x[175] = 00000000
x[176] = 00000000 x[177] = 00000000 x[178] = 00000000 x[179] = 00000000
x[180] = 00000000 x[181] = 00000000 x[182] = 00000000 x[183] = 00000000
x[184] = 00000000 x[185] = 00000000 x[186] = 00000000 x[187] = 00000000
x[188] = 00000000 x[189] = 00000000 x[190] = 00000000 x[191] = 00000000
x[192] = 00000000 x[193] = 00000000 x[194] = 00000000 x[195] = 00000000
x[196] = 00000000 x[197] = 00000000 x[198] = 00000000 x[199] = 00000000
x[200] = 00000000 x[201] = 00000000 x[202] = 00000000 x[203] = 00000000
x[204] = 00000000 x[205] = 00000000 x[206] = 00000000 x[207] = 00000000
x[208] = 00000000 x[209] = 00000000 x[210] = 00000000 x[211] = 00000000
x[212] = 00000000 x[213] = 00000000 x[214] = 00000000 x[215] = 00000000
x[216] = 00000000 x[217] = 00000000 x[218] = 00000000 x[219] = 00000000
x[220] = 00000000 x[221] = 00000000 x[222] = 00000000 x[223] = 00000000
x[224] = 00000000 x[225] = 00000000 x[226] = 00000000 x[227] = 00000000
x[228] = 00000000 x[229] = 00000000 x[230] = 00000000 x[231] = 00000000
x[232] = 00000000 x[233] = 00000000 x[234] = 00000000 x[235] = 00000000
x[236] = 00000000 x[237] = 00000000 x[238] = 00000000 x[239] = 00000000
x[240] = 00000000 x[241] = 00000000 x[242] = 00000000 x[243] = 00000000
x[244] = 00000000 x[245] = 00000000 x[246] = 00000000 x[247] = 00000000
x[248] = 00000000 x[249] = 00000000 x[250] = 00000000 x[251] = 00000000
x[252] = 00000000 x[253] = 00000000 x[254] = 00000000 x[255] = 00000000

 

Any insight into why there is all this extra space would be much appreciated!

 



Sponsor:

#2 L. Spiro   Crossbones+   -  Reputation: 11939

Like
0Likes
Like

Posted 19 February 2014 - 06:42 PM

D3D11_MAPPED_SUBRESOURCE::RowPitch indicates the length of scanlines, which in this case would be 128 bytes.  Each row in the texture starts on a new scanline.

 

 

L. Spiro


Edited by L. Spiro, 19 February 2014 - 07:39 PM.

It is amazing how often people try to be unique, and yet they are always trying to make others be like them. - L. Spiro 2011
I spent most of my life learning the courage it takes to go out and get what I want. Now that I have it, I am not sure exactly what it is that I want. - L. Spiro 2013
I went to my local Subway once to find some guy yelling at the staff. When someone finally came to take my order and asked, “May I help you?”, I replied, “Yeah, I’ll have one asshole to go.”
L. Spiro Engine: http://lspiroengine.com
L. Spiro Engine Forums: http://lspiroengine.com/forums

#3 Queequeg   Members   -  Reputation: 139

Like
0Likes
Like

Posted 19 February 2014 - 07:45 PM

Thank you! However i'm still not sure how the WICTextureLoader is resolving 128 bytes for rowpitch. I'm missing something here but i'm not sure what:

 

http://directxtk.codeplex.com/SourceControl/latest#Src/WICTextureLoader.cpp

 

 

 

 

if ( autogen ) { desc.BindFlags = bindFlags | D3D11_BIND_RENDER_TARGET; desc.MiscFlags = miscFlags | D3D11_RESOURCE_MISC_GENERATE_MIPS; } else { desc.BindFlags = bindFlags; desc.MiscFlags = miscFlags; } D3D11_SUBRESOURCE_DATA initData; initData.pSysMem = temp.get(); initData.SysMemPitch = static_cast<UINT>( rowPitch ); initData.SysMemSlicePitch = static_cast<UINT>( imageSize ); ID3D11Texture2D* tex = nullptr; hr = d3dDevice->CreateTexture2D( &desc, (autogen) ? nullptr : &initData, &tex );

 

So since I've checked and there are no bind flags or misc flags autogen = false. Therefore it must be passing nullptr for the second parameter of CreateTexture2D(). On the page for CreateTexture2D() http://msdn.microsoft.com/en-us/library/windows/desktop/ff476521(v=vs.85).aspx, passing null for the second parameter results in an array size of MipLevels * ArraySize. But in the D3D11_TEXTURE2D_DESC  mipmaps = 1 and arraysize = 1.



#4 L. Spiro   Crossbones+   -  Reputation: 11939

Like
0Likes
Like

Posted 19 February 2014 - 09:29 PM

    // See if format is supported for auto-gen mipmaps (varies by feature level)
    bool autogen = false;
    if ( d3dContext != 0 && textureView != 0 ) // Must have context and shader-view to auto generate mipmaps
    {
        UINT fmtSupport = 0;
        hr = d3dDevice->CheckFormatSupport( format, &fmtSupport );
        if ( SUCCEEDED(hr) && ( fmtSupport & D3D11_FORMAT_SUPPORT_MIP_AUTOGEN ) )
        {
            autogen = true;
        }
    }
autogen can be set to true.




 

if ( autogen ) {
    desc.BindFlags = bindFlags | D3D11_BIND_RENDER_TARGET;
    desc.MiscFlags = miscFlags | D3D11_RESOURCE_MISC_GENERATE_MIPS;
}
else {
    desc.BindFlags = bindFlags;
    desc.MiscFlags = miscFlags;
}
D3D11_SUBRESOURCE_DATA initData;
initData.pSysMem = temp.get();
initData.SysMemPitch = static_cast( rowPitch );  // Right here.
initData.SysMemSlicePitch = static_cast( imageSize );
ID3D11Texture2D* tex = nullptr;
hr = d3dDevice->CreateTexture2D( &desc, (autogen) ? nullptr : &initData, &tex );
passing null for the second parameter results in an array size of MipLevels * ArraySize.

The second parameter only contains initialization data and pitches. It has nothing to do with array sizes etc.; those are set in parameter 1.


L. Spiro
It is amazing how often people try to be unique, and yet they are always trying to make others be like them. - L. Spiro 2011
I spent most of my life learning the courage it takes to go out and get what I want. Now that I have it, I am not sure exactly what it is that I want. - L. Spiro 2013
I went to my local Subway once to find some guy yelling at the staff. When someone finally came to take my order and asked, “May I help you?”, I replied, “Yeah, I’ll have one asshole to go.”
L. Spiro Engine: http://lspiroengine.com
L. Spiro Engine Forums: http://lspiroengine.com/forums

#5 Queequeg   Members   -  Reputation: 139

Like
0Likes
Like

Posted 20 February 2014 - 01:31 PM

Again, thank you for the help. 

 

For the allocation of rowPitch here:

size_t rowPitch = ( twidth * bpp + 7 ) / 8;

The twidth is 2, the bpp is 32, so (2*32+7)/8 = 8 (truncated)

 

Is there something going on with the format conversion/resizing below that which changes this to 128?


Edited by Queequeg, 20 February 2014 - 05:58 PM.


#6 L. Spiro   Crossbones+   -  Reputation: 11939

Like
0Likes
Like

Posted 20 February 2014 - 08:41 PM

If NULL is ultimately passed, yes, the device will pick its own row pitch. NULL may be passed in your case. You should single-step through and see.


L. Spiro
It is amazing how often people try to be unique, and yet they are always trying to make others be like them. - L. Spiro 2011
I spent most of my life learning the courage it takes to go out and get what I want. Now that I have it, I am not sure exactly what it is that I want. - L. Spiro 2013
I went to my local Subway once to find some guy yelling at the staff. When someone finally came to take my order and asked, “May I help you?”, I replied, “Yeah, I’ll have one asshole to go.”
L. Spiro Engine: http://lspiroengine.com
L. Spiro Engine Forums: http://lspiroengine.com/forums

#7 Queequeg   Members   -  Reputation: 139

Like
0Likes
Like

Posted 22 February 2014 - 03:48 PM

Ok, I tried carefully going through each step of the WICtextureloader but I'm just not getting it. So, I have written my own and I'm still getting the 128 bytes for each scan line even though i'm specifying 8 bytes:

ID3D11Resource *g_pOverlay_Staging = nullptr;
IWICImagingFactory* WICFactory = nullptr;
IWICBitmapDecoder * WICBitmapDecoder = nullptr;
IWICBitmapFrameDecode * WICBitmapFrame = nullptr;
WICPixelFormatGUID pixelFormat;
HR(CoCreateInstance(CLSID_WICImagingFactory, nullptr, CLSCTX_INPROC_SERVER, __uuidof(IWICImagingFactory), (LPVOID*)&WICFactory));

HR(WICFactory->CreateDecoderFromFilename(L"province_map.bmp", nullptr, GENERIC_READ, WICDecodeMetadataCacheOnDemand, &WICBitmapDecoder));

HR(WICBitmapDecoder->GetFrame(0,&WICBitmapFrame));

HR(WICBitmapFrame->GetPixelFormat(&pixelFormat));

DXGI_FORMAT format;

if (pixelFormat == GUID_WICPixelFormat24bppBGR){
	std::wostringstream outs2;
	outs2 << "pixelformat = GUID_WICPixelFormat24bppBGR" << std::endl;
	OutputDebugString(outs2.str().c_str());
	format = DXGI_FORMAT_R8G8B8A8_UNORM;
}

IWICFormatConverter * FC = nullptr;
WICFactory->CreateFormatConverter(&FC);
HR(FC->Initialize(WICBitmapFrame, GUID_WICPixelFormat32bppRGBA, WICBitmapDitherTypeErrorDiffusion, 0, 0, WICBitmapPaletteTypeCustom));
std::unique_ptr<uint8_t[]> temp(new uint8_t[16]);
HR(FC->CopyPixels(0, 8, 16, temp.get()));

D3D11_TEXTURE2D_DESC desc;
desc.Width = 2;
desc.Height = 2;
desc.MipLevels = 1;
desc.ArraySize = 1;
desc.Format = format;
desc.SampleDesc.Count = 1;
desc.SampleDesc.Quality = 0;
desc.Usage = D3D11_USAGE_STAGING;
desc.BindFlags = 0;
desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE | D3D11_CPU_ACCESS_READ;
desc.MiscFlags = 0;

D3D11_SUBRESOURCE_DATA initData;
initData.pSysMem = temp.get();
initData.SysMemPitch = 8;
initData.SysMemSlicePitch = 16;
ID3D11Texture2D* tex = nullptr;
HR(d3d11DeviceInterface->CreateTexture2D(&desc, &initData, &tex));
g_pOverlay_Staging = tex;

D3D11_MAPPED_SUBRESOURCE mapped_subresource;
HR(d3d11DeviceContextInterface->Map(g_pOverlay_Staging, 0, D3D11_MAP_READ_WRITE, 0, &mapped_subresource));
uint8_t * v = reinterpret_cast<uint8_t*>(mapped_subresource.pData);
unsigned int x = 0;

while (x < 256 ) {
std::bitset<8> one(v[x]);
std::bitset<8> two(v[x+1]);
std::bitset<8> three(v[x+2]);
std::bitset<8> four(v[x + 3]);
std::wostringstream outs1;
outs1 << "x[" << x << "] = " << one << " x[" << x + 1 << "] = " << two << " x[" << x + 2 << "] = " << three << " x[" << x + 3 << "] = " << four << std::endl;
OutputDebugString(outs1.str().c_str());
x += 4;
}

I am seeing the "pixelformat = GUID_WICPixelFormat24bppBGR" output. So I think the conversions are right according to this chart http://msdn.microsoft.com/en-us/library/windows/desktop/ff476904(v=vs.85).aspx

 

output is :

pixelformat = GUID_WICPixelFormat24bppBGR
x[0] = 11111111 x[1] = 00000000 x[2] = 00000000 x[3] = 11111111
x[4] = 00000000 x[5] = 11111111 x[6] = 00000000 x[7] = 11111111
x[8] = 00000000 x[9] = 00000000 x[10] = 00000000 x[11] = 00000000
x[12] = 00000000 x[13] = 00000000 x[14] = 00000000 x[15] = 00000000
x[16] = 00000000 x[17] = 00000000 x[18] = 00000000 x[19] = 00000000
x[20] = 00000000 x[21] = 00000000 x[22] = 00000000 x[23] = 00000000
x[24] = 00000000 x[25] = 00000000 x[26] = 00000000 x[27] = 00000000
x[28] = 00000000 x[29] = 00000000 x[30] = 00000000 x[31] = 00000000
x[32] = 00000000 x[33] = 00000000 x[34] = 00000000 x[35] = 00000000
x[36] = 00000000 x[37] = 00000000 x[38] = 00000000 x[39] = 00000000
x[40] = 00000000 x[41] = 00000000 x[42] = 00000000 x[43] = 00000000
x[44] = 00000000 x[45] = 00000000 x[46] = 00000000 x[47] = 00000000
x[48] = 00000000 x[49] = 00000000 x[50] = 00000000 x[51] = 00000000
x[52] = 00000000 x[53] = 00000000 x[54] = 00000000 x[55] = 00000000
x[56] = 00000000 x[57] = 00000000 x[58] = 00000000 x[59] = 00000000
x[60] = 00000000 x[61] = 00000000 x[62] = 00000000 x[63] = 00000000
x[64] = 00000000 x[65] = 00000000 x[66] = 00000000 x[67] = 00000000
x[68] = 00000000 x[69] = 00000000 x[70] = 00000000 x[71] = 00000000
x[72] = 00000000 x[73] = 00000000 x[74] = 00000000 x[75] = 00000000
x[76] = 00000000 x[77] = 00000000 x[78] = 00000000 x[79] = 00000000
x[80] = 00000000 x[81] = 00000000 x[82] = 00000000 x[83] = 00000000
x[84] = 00000000 x[85] = 00000000 x[86] = 00000000 x[87] = 00000000
x[88] = 00000000 x[89] = 00000000 x[90] = 00000000 x[91] = 00000000
x[92] = 00000000 x[93] = 00000000 x[94] = 00000000 x[95] = 00000000
x[96] = 00000000 x[97] = 00000000 x[98] = 00000000 x[99] = 00000000
x[100] = 00000000 x[101] = 00000000 x[102] = 00000000 x[103] = 00000000
x[104] = 00000000 x[105] = 00000000 x[106] = 00000000 x[107] = 00000000
x[108] = 00000000 x[109] = 00000000 x[110] = 00000000 x[111] = 00000000
x[112] = 00000000 x[113] = 00000000 x[114] = 00000000 x[115] = 00000000
x[116] = 00000000 x[117] = 00000000 x[118] = 00000000 x[119] = 00000000
x[120] = 00000000 x[121] = 00000000 x[122] = 00000000 x[123] = 00000000
x[124] = 00000000 x[125] = 00000000 x[126] = 00000000 x[127] = 00000000
x[128] = 00000000 x[129] = 00000000 x[130] = 11111111 x[131] = 11111111
x[132] = 11111111 x[133] = 11111111 x[134] = 00000000 x[135] = 11111111
x[136] = 00000000 x[137] = 00000000 x[138] = 00000000 x[139] = 00000000
x[140] = 00000000 x[141] = 00000000 x[142] = 00000000 x[143] = 00000000
x[144] = 00000000 x[145] = 00000000 x[146] = 00000000 x[147] = 00000000
x[148] = 00000000 x[149] = 00000000 x[150] = 00000000 x[151] = 00000000
x[152] = 00000000 x[153] = 00000000 x[154] = 00000000 x[155] = 00000000
x[156] = 00000000 x[157] = 00000000 x[158] = 00000000 x[159] = 00000000
x[160] = 00000000 x[161] = 00000000 x[162] = 00000000 x[163] = 00000000
x[164] = 00000000 x[165] = 00000000 x[166] = 00000000 x[167] = 00000000
x[168] = 00000000 x[169] = 00000000 x[170] = 00000000 x[171] = 00000000
x[172] = 00000000 x[173] = 00000000 x[174] = 00000000 x[175] = 00000000
x[176] = 00000000 x[177] = 00000000 x[178] = 00000000 x[179] = 00000000
x[180] = 00000000 x[181] = 00000000 x[182] = 00000000 x[183] = 00000000
x[184] = 00000000 x[185] = 00000000 x[186] = 00000000 x[187] = 00000000
x[188] = 00000000 x[189] = 00000000 x[190] = 00000000 x[191] = 00000000
x[192] = 00000000 x[193] = 00000000 x[194] = 00000000 x[195] = 00000000
x[196] = 00000000 x[197] = 00000000 x[198] = 00000000 x[199] = 00000000
x[200] = 00000000 x[201] = 00000000 x[202] = 00000000 x[203] = 00000000
x[204] = 00000000 x[205] = 00000000 x[206] = 00000000 x[207] = 00000000
x[208] = 00000000 x[209] = 00000000 x[210] = 00000000 x[211] = 00000000
x[212] = 00000000 x[213] = 00000000 x[214] = 00000000 x[215] = 00000000
x[216] = 00000000 x[217] = 00000000 x[218] = 00000000 x[219] = 00000000
x[220] = 00000000 x[221] = 00000000 x[222] = 00000000 x[223] = 00000000
x[224] = 00000000 x[225] = 00000000 x[226] = 00000000 x[227] = 00000000
x[228] = 00000000 x[229] = 00000000 x[230] = 00000000 x[231] = 00000000
x[232] = 00000000 x[233] = 00000000 x[234] = 00000000 x[235] = 00000000
x[236] = 00000000 x[237] = 00000000 x[238] = 00000000 x[239] = 00000000
x[240] = 00000000 x[241] = 00000000 x[242] = 00000000 x[243] = 00000000
x[244] = 00000000 x[245] = 00000000 x[246] = 00000000 x[247] = 00000000
x[248] = 00000000 x[249] = 00000000 x[250] = 00000000 x[251] = 00000000
x[252] = 00000000 x[253] = 00000000 x[254] = 00000000 x[255] = 00000000

Edited by Queequeg, 22 February 2014 - 03:57 PM.


#8 Nik02   Crossbones+   -  Reputation: 2632

Like
0Likes
Like

Posted 23 February 2014 - 11:58 AM

The driver is free to assign any pitch to your surfaces upon their creation. The D3D11_SUBRESOURCE_DATA::SysMemPitch field merely specifies what the scanline width of your original system memory copy is (so that D3D can match the memory layout of the original data with the actual device resource pitch for the purpose of copying the data).

 

128 bytes may well be related to some texture cache line width. The driver likely knows that this is the optimal minimum width for a surface for the particular device.

 

Do note that for each map() call, the pitch for the same resource can potentially be different. This is because the DXGI infrastructure virtualizes video memory, and the driver/device can internally reallocate any resources at any time to accommodate page requests. Your app has no control over this process.


Niko Suni


#9 Queequeg   Members   -  Reputation: 139

Like
0Likes
Like

Posted 23 February 2014 - 12:59 PM

Thank you, this makes sense now. 






Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS