Encapsulated memory pool details for vertex and index buffer creation.

TRAC #21963 Signed-off-by: Daniel Koch Author: Nicolas Capens git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1359 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent 2507f41e
...@@ -286,8 +286,7 @@ IndexBuffer::IndexBuffer(renderer::Renderer9 *renderer, UINT size, D3DFORMAT for ...@@ -286,8 +286,7 @@ IndexBuffer::IndexBuffer(renderer::Renderer9 *renderer, UINT size, D3DFORMAT for
if (size > 0) if (size > 0)
{ {
// D3D9_REPLACE // D3D9_REPLACE
D3DPOOL pool = mRenderer->getBufferPool(D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY); HRESULT result = mRenderer->createIndexBuffer(size, D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY, format, &mIndexBuffer);
HRESULT result = mRenderer->getDevice()->CreateIndexBuffer(size, D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY, format, pool, &mIndexBuffer, NULL);
mSerial = issueSerial(); mSerial = issueSerial();
if (FAILED(result)) if (FAILED(result))
...@@ -371,8 +370,7 @@ void StreamingIndexBuffer::reserveSpace(UINT requiredSpace, GLenum type) ...@@ -371,8 +370,7 @@ void StreamingIndexBuffer::reserveSpace(UINT requiredSpace, GLenum type)
mBufferSize = std::max(requiredSpace, 2 * mBufferSize); mBufferSize = std::max(requiredSpace, 2 * mBufferSize);
// D3D9_REPLACE // D3D9_REPLACE
D3DPOOL pool = mRenderer->getBufferPool(D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY); HRESULT result = mRenderer->createIndexBuffer(mBufferSize, D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY, type == GL_UNSIGNED_INT ? D3DFMT_INDEX32 : D3DFMT_INDEX16, &mIndexBuffer);
HRESULT result = mRenderer->getDevice()->CreateIndexBuffer(mBufferSize, D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY, type == GL_UNSIGNED_INT ? D3DFMT_INDEX32 : D3DFMT_INDEX16, pool, &mIndexBuffer, NULL);
mSerial = issueSerial(); mSerial = issueSerial();
if (FAILED(result)) if (FAILED(result))
...@@ -426,8 +424,7 @@ void StaticIndexBuffer::reserveSpace(UINT requiredSpace, GLenum type) ...@@ -426,8 +424,7 @@ void StaticIndexBuffer::reserveSpace(UINT requiredSpace, GLenum type)
if (!mIndexBuffer && mBufferSize == 0) if (!mIndexBuffer && mBufferSize == 0)
{ {
// D3D9_REPLACE // D3D9_REPLACE
D3DPOOL pool = mRenderer->getBufferPool(D3DUSAGE_WRITEONLY); HRESULT result = mRenderer->createIndexBuffer(requiredSpace, D3DUSAGE_WRITEONLY, type == GL_UNSIGNED_INT ? D3DFMT_INDEX32 : D3DFMT_INDEX16, &mIndexBuffer);
HRESULT result = mRenderer->getDevice()->CreateIndexBuffer(requiredSpace, D3DUSAGE_WRITEONLY, type == GL_UNSIGNED_INT ? D3DFMT_INDEX32 : D3DFMT_INDEX16, pool, &mIndexBuffer, NULL);
mSerial = issueSerial(); mSerial = issueSerial();
if (FAILED(result)) if (FAILED(result))
......
...@@ -577,8 +577,7 @@ VertexBuffer::VertexBuffer(renderer::Renderer9 *renderer, std::size_t size, DWOR ...@@ -577,8 +577,7 @@ VertexBuffer::VertexBuffer(renderer::Renderer9 *renderer, std::size_t size, DWOR
if (size > 0) if (size > 0)
{ {
// D3D9_REPLACE // D3D9_REPLACE
D3DPOOL pool = mRenderer->getBufferPool(usageFlags); HRESULT result = mRenderer->createVertexBuffer(size, usageFlags,&mVertexBuffer);
HRESULT result = mRenderer->getDevice()->CreateVertexBuffer(size, usageFlags, 0, pool, &mVertexBuffer, NULL);
mSerial = issueSerial(); mSerial = issueSerial();
if (FAILED(result)) if (FAILED(result))
...@@ -677,8 +676,7 @@ void StreamingVertexBuffer::reserveRequiredSpace() ...@@ -677,8 +676,7 @@ void StreamingVertexBuffer::reserveRequiredSpace()
mBufferSize = std::max(mRequiredSpace, 3 * mBufferSize / 2); // 1.5 x mBufferSize is arbitrary and should be checked to see we don't have too many reallocations. mBufferSize = std::max(mRequiredSpace, 3 * mBufferSize / 2); // 1.5 x mBufferSize is arbitrary and should be checked to see we don't have too many reallocations.
// D3D9_REPLACE // D3D9_REPLACE
D3DPOOL pool = mRenderer->getBufferPool(D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY); HRESULT result = mRenderer->createVertexBuffer(mBufferSize, D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY, &mVertexBuffer);
HRESULT result = mRenderer->getDevice()->CreateVertexBuffer(mBufferSize, D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY, 0, pool, &mVertexBuffer, NULL);
mSerial = issueSerial(); mSerial = issueSerial();
if (FAILED(result)) if (FAILED(result))
...@@ -741,8 +739,7 @@ void StaticVertexBuffer::reserveRequiredSpace() ...@@ -741,8 +739,7 @@ void StaticVertexBuffer::reserveRequiredSpace()
if (!mVertexBuffer && mBufferSize == 0) if (!mVertexBuffer && mBufferSize == 0)
{ {
// D3D9_REPLACE // D3D9_REPLACE
D3DPOOL pool = mRenderer->getBufferPool(D3DUSAGE_WRITEONLY); HRESULT result = mRenderer->createVertexBuffer(mRequiredSpace, D3DUSAGE_WRITEONLY, &mVertexBuffer);
HRESULT result = mRenderer->getDevice()->CreateVertexBuffer(mRequiredSpace, D3DUSAGE_WRITEONLY, 0, pool, &mVertexBuffer, NULL);
mSerial = issueSerial(); mSerial = issueSerial();
if (FAILED(result)) if (FAILED(result))
......
...@@ -513,6 +513,17 @@ IDirect3DPixelShader9 *Renderer9::createPixelShader(const DWORD *function, size_ ...@@ -513,6 +513,17 @@ IDirect3DPixelShader9 *Renderer9::createPixelShader(const DWORD *function, size_
return mPixelShaderCache.create(function, length); return mPixelShaderCache.create(function, length);
} }
HRESULT Renderer9::createVertexBuffer(UINT Length, DWORD Usage, IDirect3DVertexBuffer9 **ppVertexBuffer)
{
D3DPOOL Pool = getBufferPool(Usage);
return mDevice->CreateVertexBuffer(Length, Usage, 0, Pool, ppVertexBuffer, NULL);
}
HRESULT Renderer9::createIndexBuffer(UINT Length, DWORD Usage, D3DFORMAT Format, IDirect3DIndexBuffer9 **ppIndexBuffer)
{
D3DPOOL Pool = getBufferPool(Usage);
return mDevice->CreateIndexBuffer(Length, Usage, Format, Pool, ppIndexBuffer, NULL);
}
void Renderer9::setSamplerState(gl::SamplerType type, int index, const gl::SamplerState &samplerState) void Renderer9::setSamplerState(gl::SamplerType type, int index, const gl::SamplerState &samplerState)
{ {
......
...@@ -49,8 +49,10 @@ class Renderer9 : public Renderer ...@@ -49,8 +49,10 @@ class Renderer9 : public Renderer
void freeEventQuery(IDirect3DQuery9* query); void freeEventQuery(IDirect3DQuery9* query);
// resource creation // resource creation
IDirect3DVertexShader9 *createVertexShader(const DWORD *function, size_t length); // D3D9_REPLACE IDirect3DVertexShader9 *createVertexShader(const DWORD *function, size_t length);
IDirect3DPixelShader9 *createPixelShader(const DWORD *function, size_t length); // D3D9_REPLACE IDirect3DPixelShader9 *createPixelShader(const DWORD *function, size_t length);
HRESULT createVertexBuffer(UINT Length, DWORD Usage, IDirect3DVertexBuffer9 **ppVertexBuffer);
HRESULT createIndexBuffer(UINT Length, DWORD Usage, D3DFORMAT Format, IDirect3DIndexBuffer9 **ppIndexBuffer);
#if 0 #if 0
void *createTexture2D(); void *createTexture2D();
void *createTextureCube(); void *createTextureCube();
...@@ -108,7 +110,6 @@ class Renderer9 : public Renderer ...@@ -108,7 +110,6 @@ class Renderer9 : public Renderer
virtual GLsizei getMaxSupportedSamples() const; virtual GLsizei getMaxSupportedSamples() const;
int getNearestSupportedSamples(D3DFORMAT format, int requested) const; int getNearestSupportedSamples(D3DFORMAT format, int requested) const;
D3DPOOL getBufferPool(DWORD usage) const;
D3DPOOL getTexturePool(DWORD usage) const; D3DPOOL getTexturePool(DWORD usage) const;
private: private:
...@@ -116,6 +117,8 @@ class Renderer9 : public Renderer ...@@ -116,6 +117,8 @@ class Renderer9 : public Renderer
void getMultiSampleSupport(D3DFORMAT format, bool *multiSampleArray); // D3D9_REPLACE void getMultiSampleSupport(D3DFORMAT format, bool *multiSampleArray); // D3D9_REPLACE
D3DPOOL getBufferPool(DWORD usage) const;
static const D3DFORMAT mRenderTargetFormats[]; static const D3DFORMAT mRenderTargetFormats[];
static const D3DFORMAT mDepthStencilFormats[]; static const D3DFORMAT mDepthStencilFormats[];
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment