/** Fills the associated state object using the given IDs */ void D3D11GraphicsEngineQueued::FillPipelineStateObject(PipelineState* state) { D3D11PipelineState* s = (D3D11PipelineState*)state; // Get state objects from id D3D11BlendStateInfo* blendState = D3D11ObjectIDs::BlendStateByID[(UINT8)state->BaseState.BlendStateID]; D3D11RasterizerStateInfo* rasterizerState = D3D11ObjectIDs::RasterizerStateByID[(UINT8)state->BaseState.RasterizerStateID]; D3D11DepthBufferState* depthStencilState = D3D11ObjectIDs::DepthStateByID[(UINT8)state->BaseState.DepthStencilID]; // Put them into our queue object if(blendState) s->BlendState = blendState->State; if(rasterizerState) s->RasterizerState = rasterizerState->State; if(depthStencilState) s->DepthStencilState = depthStencilState->State; // TODO: Do this for sampler states as well s->SamplerState = DefaultSamplerState; // Enter rendertargets s->RenderTargetViews[0] = Backbuffer->GetRenderTargetView(); s->NumRenderTargetViews = 1; s->DepthStencilView = DepthStencilBuffer->GetDepthStencilView(); // Enter textures for(int i=0;i<8;i++) { D3D11Texture* tex = (D3D11Texture *)D3D11ObjectIDs::TextureByID[s->BaseState.TextureIDs[i]]; if(!tex) break; s->Textures[i] = tex->GetShaderResourceView(); s->BaseState.NumTextures = i+1; } // Buffers s->ConstantBuffersVS.clear(); for(int i=0;i<ARRAYSIZE(s->BaseState.ConstantBuffersVS);i++) { D3D11ConstantBuffer* buf = (D3D11ConstantBuffer *)s->BaseState.ConstantBuffersVS[i]; if(!buf) break; s->ConstantBuffersVS.push_back(buf->Get()); } s->ConstantBuffersPS.clear(); for(int i=0;i<ARRAYSIZE(s->BaseState.ConstantBuffersPS);i++) { D3D11ConstantBuffer* buf = (D3D11ConstantBuffer *)s->BaseState.ConstantBuffersPS[i]; if(!buf) break; s->ConstantBuffersPS.push_back(buf->Get()); } s->ConstantBuffersHDS.clear(); for(int i=0;i<ARRAYSIZE(s->BaseState.ConstantBuffersHDS);i++) { D3D11ConstantBuffer* buf = (D3D11ConstantBuffer *)s->BaseState.ConstantBuffersHDS[i]; if(!buf) break; s->ConstantBuffersHDS.push_back(buf->Get()); } s->ConstantBuffersGS.clear(); for(int i=0;i<ARRAYSIZE(s->BaseState.ConstantBuffersGS);i++) { D3D11ConstantBuffer* buf = (D3D11ConstantBuffer *)s->BaseState.ConstantBuffersGS[i]; if(!buf) break; s->ConstantBuffersGS.push_back(buf->Get()); } s->VertexBuffers.clear(); for(int i=0;i<ARRAYSIZE(s->BaseState.VertexBuffers);i++) { D3D11VertexBuffer* buf = (D3D11VertexBuffer *)s->BaseState.VertexBuffers[i]; if(buf) s->VertexBuffers.push_back(buf->GetVertexBuffer()); } s->StructuredBuffersVS.clear(); for(int i=0;i<ARRAYSIZE(s->BaseState.StructuredBuffersVS);i++) { D3D11VertexBuffer* buf = (D3D11VertexBuffer *)s->BaseState.StructuredBuffersVS[i]; if(buf) s->StructuredBuffersVS.push_back(buf->GetShaderResourceView()); } if(s->BaseState.IndexBuffer) s->IndexBuffer = ((D3D11VertexBuffer *)s->BaseState.IndexBuffer)->GetVertexBuffer(); D3D11PShader* ps = D3D11ObjectIDs::PShadersByID[s->BaseState.PShaderID]; D3D11VShader* vs = D3D11ObjectIDs::VShadersByID[s->BaseState.VShaderID]; D3D11HDShader* hds = D3D11ObjectIDs::HDShadersByID[s->BaseState.HDShaderID]; //D3D11PShader* gs = NULL;//D3D11PShader::ShadersByID[s->BaseState.PShaderID]; s->PixelShader = ps ? ps->GetShader() : NULL; s->VertexShader = vs ? vs->GetShader() : NULL; s->InputLayout = vs ? vs->GetInputLayout() : NULL; s->HullShader = hds ? hds->GetHShader() : NULL; s->DomainShader = hds ? hds->GetDShader() : NULL; s->GeometryShader = NULL;//D3D11PShader::ShadersByID[s->BaseState.PShaderID]->GetShader(); // Build the sort-key s->SortItem.stateValue = s->SortItem.Build(s->BaseState); }