//---------------------------------------------------------------------------- void PdrPixelShader::Enable (Renderer* renderer, const PixelShader* pshader, const ShaderParameters* parameters) { IDirect3DDevice9* device = renderer->mData->mDevice; // Enable the buffer by setting the state. HRESULT hr = device->SetPixelShader(mShader); assertion(hr == D3D_OK, "Failed to enable pixel shader: %s\n", DXGetErrorString(hr)); // Set the shader constants. int profile = PixelShader::GetProfile(); const int numConstants = pshader->GetNumConstants(); int i; for (i = 0; i < numConstants; ++i) { hr = device->SetPixelShaderConstantF( pshader->GetBaseRegister(profile, i), parameters->GetConstant(i)->GetData(), pshader->GetNumRegistersUsed(i)); assertion(hr == D3D_OK, "Failed to set shader constant: %s\n", DXGetErrorString(hr)); } SetSamplerState(renderer, pshader, profile, parameters, renderer->mData->mMaxPShaderImages, 0, renderer->mData->mCurrentPSState); }
void StateManager9::setShaderConstants() { if (!mDxUniformsDirty) return; IDirect3DDevice9 *device = mRenderer9->getDevice(); device->SetVertexShaderConstantF(0, reinterpret_cast<float *>(&mVertexConstants), sizeof(dx_VertexConstants) / sizeof(float[4])); device->SetPixelShaderConstantF(0, reinterpret_cast<float *>(&mPixelConstants), sizeof(dx_PixelConstants) / sizeof(float[4])); mDxUniformsDirty = false; }
void Blit::saveState() { IDirect3DDevice9 *device = getDevice(); HRESULT hr; device->GetDepthStencilSurface(&mSavedDepthStencil); device->GetRenderTarget(0, &mSavedRenderTarget); if (mSavedStateBlock == NULL) { hr = device->BeginStateBlock(); ASSERT(SUCCEEDED(hr) || hr == D3DERR_OUTOFVIDEOMEMORY || hr == E_OUTOFMEMORY); setCommonBlitState(); static const float dummyConst[4] = { 0, 0, 0, 0 }; device->SetVertexShader(NULL); device->SetVertexShaderConstantF(0, dummyConst, 1); device->SetPixelShader(NULL); device->SetPixelShaderConstantF(0, dummyConst, 1); D3DVIEWPORT9 dummyVp; dummyVp.X = 0; dummyVp.Y = 0; dummyVp.Width = 1; dummyVp.Height = 1; dummyVp.MinZ = 0; dummyVp.MaxZ = 1; device->SetViewport(&dummyVp); device->SetTexture(0, NULL); device->SetStreamSource(0, mQuadVertexBuffer, 0, 0); device->SetVertexDeclaration(mQuadVertexDeclaration); hr = device->EndStateBlock(&mSavedStateBlock); ASSERT(SUCCEEDED(hr) || hr == D3DERR_OUTOFVIDEOMEMORY || hr == E_OUTOFMEMORY); } ASSERT(mSavedStateBlock != NULL); if (mSavedStateBlock != NULL) { hr = mSavedStateBlock->Capture(); ASSERT(SUCCEEDED(hr)); } }
void GPUContextDX9::bindConstant( size_t inIndex, const float4& inValue ) { HRESULT result = _device->SetPixelShaderConstantF( inIndex, (const float*)&inValue, 1 ); GPUAssert( !FAILED(result), "SetPixelShaderConstantF failed" ); }