Jump to content
  • Advertisement
Sign in to follow this  
SquirrelPop

Interpolating data using sampling in a pixel shader

This topic is 2170 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

I'm sending a array of data to the GPU (as a 1D texture) that I sample in my pixel shader. I use the data to draw a figure onto a quad in the PS. Everything's kosher until I zoom in. After getting very close, my figure is highly aliased with large stair-steps, even though I believe my sampler's filtering is set up correctly.
What part of the equation am I missing here? I appreciate the suggestions! The following code is SharpDX, but the important parts should be easy to read.
[source lang="csharp"]
Texture1DDescription textureDesc = new Texture1DDescription();
t1dDesc.ArraySize = 1;
t1dDesc.Usage = ResourceUsage.Immutable;
t1dDesc.Width = dataArray.Length;
t1dDesc.Format = Format.R32_Float;
t1dDesc.BindFlags = BindFlags.ShaderResource;
t1dDesc.CpuAccessFlags = CpuAccessFlags.None;
t1dDesc.OptionFlags = ResourceOptionFlags.None;
t1dDesc.MipLevels = 1;


DataStream ds = DataStream.Create(dataArray, false, false, false);
dataTexture = new Texture1D(d3dDevice, textureDesc, ds);
ds.Dispose();

this.dataTextureView = new ShaderResourceView(d3dDevice, dataTexture);

this.dataSampler = new SamplerState(d3dDevice, new SamplerStateDescription()
{
Filter = Filter.MinMagMipLinear,
AddressU = TextureAddressMode.Clamp,
AddressV = TextureAddressMode.Clamp,
AddressW = TextureAddressMode.Clamp
});[/source]

HLSL:
[source]
float4 PS(PixelShaderInput input) : SV_TARGET
{
float4 color = float4(0,0,0,0);
float dataValue = data.Sample(dataSampler, input.texcoord.x);
if(input.texcoord.y <= dataValue)
{
color = dataValue;
}

return color;
}[/source]

[attachment=9452:Awful.jpg] Edited by SquirrelPop

Share this post


Link to post
Share on other sites
Advertisement
I would run the executable from PIX to see step by step where things go wrong. I would start by confirming that the texture contain what I expect.

Share this post


Link to post
Share on other sites

Keep in mind that SamplerStateDescription (like in C++) is not initialized, so you should probably better set min/max lod...


I cut out those values to make the code paste shorter, but I do have them in there.
[source] ComparisonFunction = Comparison.Never,
MaximumAnisotropy = 16,
MipLodBias = 0,
MinimumLod = 0,
MaximumLod = 16[/source]

I didn't expect any difference, but I did try deleting them and I didn't see any effect, since I don't think those settings apply.

Share this post


Link to post
Share on other sites

I would run the executable from PIX to see step by step where things go wrong. I would start by confirming that the texture contain what I expect.


I will give that a shot. Visual Studio 12 doesn't seem to be able to do any graphics debugging when DX is embedded in a Metro app, which is what I am doing. I'll give PIX a shot, but I'm not hopeful. I will probably need to extract this from the Metro container and just do a vanilla DirectX version in order to use the tools.

Thank you.

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.

Participate in the game development conversation and more when you create an account on GameDev.net!

Sign me up!