Jump to content
  • Advertisement
Sign in to follow this  
jerrycao_1985

DX11 How to generate mipmap for a texture

This topic is 2029 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

hi all

 

Here is my case:

An empty 2d texture is created and then it is filled with some memory without mipmap information.

 

I want to generate mip mapping for the texture.

It's dx11. I see there is an interface called "GenerateMips" could do some sort of job.

But "GenerateMips" requires the "D3D11_RESOURCE_MISC_GENERATE_MIPS" , which is only available if the texture is both a render target and shader resource.

My texture is just used for texture mapping , it's not a render target of course.

 

So how can I generate mip map using DX11 interface.
( I know I can generate mipmap using cpu code , but I just want to know the professional way of doing it.)

 

Thanks

Share this post


Link to post
Share on other sites
Advertisement

So how can I generate mip map using DX11 interface.
( I know I can generate mipmap using cpu code , but I just want to know the professional way of doing it.)

 

if the dx11 API doesn't provide that functionality, you'll have to do it yourself. actually a great opportunity to implement mipmaps that don't blend the background into the edge of sprite textures. odds are either way (your code or DX11 code) the work will be done by the cpu, not gpu.

Share this post


Link to post
Share on other sites

- If you have photoshop you can generate the mipmap chain using the nvidia dds plugin:

  https://developer.nvidia.com/nvidia-texture-tools-adobe-photoshop

- For mipmap generation, you could integrate nvidia texture tools into your pipeline: http://code.google.com/p/nvidia-texture-tools/

- If you are looking for a general "howto" on generating and loading the chain, I would suggest checking out the replacement code for D3DX load texture:

  (This uses WIC (Windows Imaging Components) and I would not touch it with a 10 ft pole, however, it does show you the steps needed to load the mipmap chain etc...).

  http://msdn.microsoft.com/en-us/library/windows/apps/jj651550.aspx

- I think MJP's framework supports this, along with hieroglyph if you feel like diving through their code:

  (I think hieroglyph integrated the texture code from the Microsoft example when d3dx was phased out).

  http://mynameismjp.wordpress.com/

  http://hieroglyph3.codeplex.com/

Edited by sensate

Share this post


Link to post
Share on other sites

- I think MJP's framework supports this, along with hieroglyph if you feel like diving through their code:

(I think hieroglyph integrated the texture code from the Microsoft example when d3dx was phased out).

http://mynameismjp.wordpress.com/

http://hieroglyph3.codeplex.com/

Hieroglyph uses DirectXTK now that D3DX is deprecated, which is the same WIC method that you mentioned above.  Actually there is an alternative to WIC available in DirectXTK too, so you should take a look and see if it will work for you.

 

But the OP was specifically taking about generating the texture at runtime and then producing the mip-maps.  @jerrycao_1985: Have you tried creating your texture with the render target usage flag, even if you won't use it for a render target?  It would be worth a try to see if it allows you to generate your mips that way.  Otherwise, what the others have said is right - you will probably have to generate the mips on the CPU...

Share this post


Link to post
Share on other sites

Yes.

- If he is targeting Direct3d11 with non Direct3d11 conformant hardware he will have to generate the pyramid on the cpu. Which is why I suggested looking at the nvidia texture tools library.

- If he is targeting Direct3d11 with Direct3d11 conformant hardware he can use compute shaders (and apply compression as needed):

http://code.msdn.microsoft.com/windowsdesktop/BC6HBC7-DirectCompute-35e8884a

 

I have not tried applying rendertarget flags to a texture that I'm uploading data to from a staging resource before (never had the need).

I would be intrigued to hear if this works. If it does, this is of course the simplest line to follow, however you thenmiss out on writing a bunch of code that will be useful to you for as long as you continue to render (as long as you don't write it using DirectCompute).

Edited by sensate

Share this post


Link to post
Share on other sites

I would be intrigued to hear if this works. If it does, this is of course the simplest line to follow, however you thenmiss out on writing a bunch of code that will be useful to you for as long as you continue to render (as long as you don't write it using DirectCompute).

Maybe as a learning exercise, but I haven't ever had the need to generate my own mip-maps...  Can you think of other cases where this would be beneficial code to write?  Seems like a good thing to use a library for, but that is only my opinion.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!