Jump to content

  • Log In with Google      Sign In   
  • Create Account

Firelark

Member Since 19 Apr 2012
Offline Last Active Nov 14 2013 02:08 AM

Topics I've Started

Another Input layout question...

12 November 2013 - 01:39 AM

Hello

 

In directX 11, if I have a shader that takes vertices with POSITION defined as float3:

float3 pos : POSITION

Am I then allowed to use that shader with an input layout where the POSITION is defined to be a four component float using DXGI_FORMAT_R32G32B32A32_FLOAT? In essence am I allowed to use an input layout with more components (float3 < float4) in the input than the shader requires?

 

Also am I allowed to use an input layout where the POSITION is defined to be a two component float using DXGI_FORMAT_R32G32_FLOAT or a one component float using DXGI_FORMAT_R32_FLOAT? In essence am I allowed to use an input layout with fewer components in the input than what is defined in the shader.

 

Is there any kind of flexibility like this or do I have to provide an input layout where the POSITION is defined to be exactly a three component float?

 

Thanks for any help!

Karl


Constant Buffers and multiple objects question

19 April 2012 - 11:40 AM

Hello hello

I have an effect to be used on several objects. Is it ok to have one buffer object that you can update between rendering? Or is this bad for performance? I read here that mapping resources before the command buffer is finished with them will hurt performance.

Instead is it better to have one buffer object (ID3D10Buffer in this case) for each object to be rendered by this effect?

Below is a simplified exaple of what I mean, I hope it makes sence Posted Image

This code is using one buffer object (ID3D10Buffer) which it initiates with the WVP matrix of the first scene object. It then renders the first scene object. Then it updates the buffer and renders the second scene object. If the command buffer is not finished with the buffer when I map it, will that cause a stall? Or is this handled behind the scene since I'm using D3D10_MAP_WRITE_DISCARD?

Thanks
Karl


ID3D10Effect *pFX;

// create effect and technique, etc....
//.... done

// Matrix structures
Matrix mWVP1 = GetWVPmatrix(my3Dobj1);
Matrix mWVP2 = GetWVPmatrix(my3Dobj2);

// Retrieve the constant buffer
ID3D10EffectConstantBuffer *pCBuf = pFX->GetConstantBufferByName(“perObj”);

// Create a buffer
D3D10_BUFFER_DESC cbDesc;
cbDesc.Usage = D3D10_USAGE_DYNAMIC;
cbDesc.BindFlags = D3D10_BIND_CONSTANT_BUFFER;
cbDesc.CPUAccessFlags = D3D10_CPU_ACCESS_WRITE;
cbDesc.MiscFlags = 0;
cbDesc.ByteWidth = sizeof(Matrix);
D3D10_SUBRESOURCE_DATA initData;
initData.SysMemPitch = 0;
initData.SysMemSlicePitch = 0;
initData.pSysMem = reinterpret_cast<void*>(&mWVP1);

ID3D10Buffer *pBuf;
deviceObj->CreateBuffer(&cbDesc, &initData, &pBuf);

// Assign pBuf to the constant buffer
pCBuf->SetConstantBuffer(pBuf);

// Render my3Dobj1....
// ...rendering my3Dobj1 done!

// Update pBuf with my3Dobj2s WVP matrix
void *memBuf = NULL;
if(S_OK == pBuf->Map(D3D10_MAP_WRITE_DISCARD, 0, &memBuf)
{
	 if(memBuf)
	 {
			memcpy_s(memBuf, sizeof(Matrix), reinterpret_cast<void*>(&mWVP2), sizeof(Matrix));
	 }

	 pBuf->Unmap();
}

// Assign pBuf to the constant buffer again
pCBuf->SetConstantBuffer(pBuf);

// Render my3Dobj2....
// ...rendering my3Dobj2done!


PARTNERS