Problem with ID3D11Create Texture2D mipmap

Started by
5 comments, last by Jason Z 11 years, 5 months ago
I want to Create a Texture2D with mipmap?but it looks like failure?
my texture data is 24bit?R8G8A8??any sugguestion? thanks ?
[source lang="cpp"]
VInt iLevel = V_log((float)iSrcWidth)/V_log((float)2)+1;//iLevel = 7

//????????
D3D11_TEXTURE2D_DESC textureDesc = {0};
textureDesc.Width = 64;
textureDesc.Height = 64;
textureDesc.SampleDesc.Count = 1;
textureDesc.SampleDesc.Quality = 0;
textureDesc.Usage = D3D11_USAGE_DEFAULT;
textureDesc.CPUAccessFlags = 0;
textureDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET;

textureDesc.MiscFlags = 0;
textureDesc.MipLevels = iLevel-1;
textureDesc.ArraySize = 1;

switch (uiBits)
{
//????32???
case 32:
case 24:
textureDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
break;
default:
break;
}

//????mipmap????
VInt iSrcWidthBits = iSrcWidth*4;
VInt iYoffset = 0;
VChar* pBuffer = (VChar*)CVMem::Allocate( iSrcWidthBits*iSrcHeight, __FILE__, __LINE__ );

if( pBuffer == V_NULL )
{
hTextrue.ReleaseAndGetAddressOf();
return 0;
}

D3D11_SUBRESOURCE_DATA* InitDataArray = new D3D11_SUBRESOURCE_DATA[iLevel-1];
D3D11_SUBRESOURCE_DATA Data;
//
// 32 16 8 4 2 1
for( VInt i = 0; i < iLevel/*-2*/; i++ ) // 0 32 48 56 60 62
{
VInt iWidthTextrue = iSrcWidth>>i;
VInt iHeightTextrue = iSrcHeight>>(i+1);
VInt iWidthBits = iWidthTextrue*4;

VChar* pBufferTmp = pBuffer;
VChar* pSrcBuffer = pData + iYoffset*iSrcWidthBits;
iYoffset = iYoffset + iHeightTextrue;
for( VInt y = 0; y < iHeightTextrue; y++ )
{
V_memcpy( pBufferTmp, pSrcBuffer, iWidthBits );
pBufferTmp += iWidthBits;
pSrcBuffer += iSrcWidthBits;
}

Data.pSysMem = pBuffer;
Data.SysMemPitch = iWidthBits ;////
Data.SysMemSlicePitch = 0;
InitDataArray = Data;
}



ThrowIfFailed(
m_d3dDevice->CreateTexture2D(
&textureDesc,
&Data,
&hTextrue)
);
[/source]
Advertisement
Are you running with the debug device active? If so, what is the error message that you get on the debug output window?

Are you running with the debug device active? If so, what is the error message that you get on the debug output window?

sorry?i dont know how to active on windows metro app?directx 11.1 / VS 2012?,could you tell me how?
yeah?i got the message
what i want to know is
1.is this the correct way to create mipmap texture2d manually?
2.when i call drawindexed ?the ouptput window show one message ->
D3D11 WARNING: ID3D11DeviceContext::DrawIndexed: The Pixel Shader unit expects a Sampler to be set at Slot 0, but none is bound. This is perfectly valid, as a NULL Sampler maps to default Sampler state. However, the developer may not want to rely on the defaults. [ EXECUTION WARNING #352: DEVICE_DRAW_SAMPLER_NOT_SET]
You create the device with the D3D11_CREATE_DEVICE_DEBUG flag, and then you can get a COM interface to the debug device. That should work in Metro style usage the same as it does in the native world. You can also check the HRESULT value that comes from the ID3D11Device::CreateTexture2D call, and that will tell you if you are successfully creating the texture object or not.

If it is being created properly, then you should be able to inspect the contents of the texture through Visual Studio (with the capabilities that used to be in PIX).

You create the device with the D3D11_CREATE_DEVICE_DEBUG flag, and then you can get a COM interface to the debug device. That should work in Metro style usage the same as it does in the native world. You can also check the HRESULT value that comes from the ID3D11Device::CreateTexture2D call, and that will tell you if you are successfully creating the texture object or not.

If it is being created properly, then you should be able to inspect the contents of the texture through Visual Studio (with the capabilities that used to be in PIX).


thanks ,Jason
i checked HRESULT from ID3D11Device::CreateTexture2D ?CreateShaderResourceView
It returns S_OK
could you tell me how to "inspect the contents of the texture through Visual Studio" ? i'm really a new beginner
thanks again!
Unfortunately I haven't had the opportunity to try this out in the Visual Studio graphics tools - I'm still using VS2010 at the moment, so I typically use PIX instead. You will have to search for some info on the tool, or perhaps someone else around here can provide some links about where to start looking...

Sorry I couldn't help more.

This topic is closed to new replies.

Advertisement