Commit 42477a43 by Geoff Lang

Renderer11 now generates swizzles and invalidates the cached swizzles.

Change-Id: If5c998a91195942297beeb26a0ec635ff6a466ea Reviewed-on: https://chromium-review.googlesource.com/177035Reviewed-by: 's avatarShannon Woods <shannonwoods@chromium.org> Commit-Queue: Shannon Woods <shannonwoods@chromium.org> Tested-by: 's avatarShannon Woods <shannonwoods@chromium.org>
parent 391c8c50
...@@ -523,7 +523,17 @@ SwapChain *Renderer11::createSwapChain(HWND window, HANDLE shareHandle, GLenum b ...@@ -523,7 +523,17 @@ SwapChain *Renderer11::createSwapChain(HWND window, HANDLE shareHandle, GLenum b
void Renderer11::generateSwizzle(gl::Texture *texture) void Renderer11::generateSwizzle(gl::Texture *texture)
{ {
UNIMPLEMENTED(); if (texture)
{
TextureStorageInterface *texStorage = texture->getNativeTexture();
if (texStorage)
{
TextureStorage11 *storage11 = TextureStorage11::makeTextureStorage11(texStorage->getStorageInstance());
storage11->generateSwizzles(texture->getSwizzleRed(), texture->getSwizzleGreen(), texture->getSwizzleBlue(),
texture->getSwizzleAlpha());
}
}
} }
void Renderer11::setSamplerState(gl::SamplerType type, int index, const gl::SamplerState &samplerState) void Renderer11::setSamplerState(gl::SamplerType type, int index, const gl::SamplerState &samplerState)
...@@ -1090,6 +1100,8 @@ bool Renderer11::applyRenderTarget(gl::Framebuffer *framebuffer) ...@@ -1090,6 +1100,8 @@ bool Renderer11::applyRenderTarget(gl::Framebuffer *framebuffer)
mDepthStencilInitialized = true; mDepthStencilInitialized = true;
} }
invalidateFramebufferSwizzles(framebuffer);
return true; return true;
} }
...@@ -1597,6 +1609,7 @@ void Renderer11::applyUniforms(gl::ProgramBinary *programBinary, gl::UniformArra ...@@ -1597,6 +1609,7 @@ void Renderer11::applyUniforms(gl::ProgramBinary *programBinary, gl::UniformArra
void Renderer11::clear(const gl::ClearParameters &clearParams, gl::Framebuffer *frameBuffer) void Renderer11::clear(const gl::ClearParameters &clearParams, gl::Framebuffer *frameBuffer)
{ {
mClear->clearFramebuffer(clearParams, frameBuffer); mClear->clearFramebuffer(clearParams, frameBuffer);
invalidateFramebufferSwizzles(frameBuffer);
} }
void Renderer11::markAllStateDirty() void Renderer11::markAllStateDirty()
...@@ -2378,6 +2391,9 @@ bool Renderer11::copyToRenderTarget(TextureStorageInterface2D *dest, TextureStor ...@@ -2378,6 +2391,9 @@ bool Renderer11::copyToRenderTarget(TextureStorageInterface2D *dest, TextureStor
TextureStorage11_2D *dest11 = TextureStorage11_2D::makeTextureStorage11_2D(dest->getStorageInstance()); TextureStorage11_2D *dest11 = TextureStorage11_2D::makeTextureStorage11_2D(dest->getStorageInstance());
mDeviceContext->CopyResource(dest11->getBaseTexture(), source11->getBaseTexture()); mDeviceContext->CopyResource(dest11->getBaseTexture(), source11->getBaseTexture());
dest11->invalidateSwizzleCache();
return true; return true;
} }
...@@ -2392,6 +2408,9 @@ bool Renderer11::copyToRenderTarget(TextureStorageInterfaceCube *dest, TextureSt ...@@ -2392,6 +2408,9 @@ bool Renderer11::copyToRenderTarget(TextureStorageInterfaceCube *dest, TextureSt
TextureStorage11_Cube *dest11 = TextureStorage11_Cube::makeTextureStorage11_Cube(dest->getStorageInstance()); TextureStorage11_Cube *dest11 = TextureStorage11_Cube::makeTextureStorage11_Cube(dest->getStorageInstance());
mDeviceContext->CopyResource(dest11->getBaseTexture(), source11->getBaseTexture()); mDeviceContext->CopyResource(dest11->getBaseTexture(), source11->getBaseTexture());
dest11->invalidateSwizzleCache();
return true; return true;
} }
...@@ -2406,6 +2425,9 @@ bool Renderer11::copyToRenderTarget(TextureStorageInterface3D *dest, TextureStor ...@@ -2406,6 +2425,9 @@ bool Renderer11::copyToRenderTarget(TextureStorageInterface3D *dest, TextureStor
TextureStorage11_3D *dest11 = TextureStorage11_3D::makeTextureStorage11_3D(dest->getStorageInstance()); TextureStorage11_3D *dest11 = TextureStorage11_3D::makeTextureStorage11_3D(dest->getStorageInstance());
mDeviceContext->CopyResource(dest11->getBaseTexture(), source11->getBaseTexture()); mDeviceContext->CopyResource(dest11->getBaseTexture(), source11->getBaseTexture());
dest11->invalidateSwizzleCache();
return true; return true;
} }
...@@ -2420,6 +2442,9 @@ bool Renderer11::copyToRenderTarget(TextureStorageInterface2DArray *dest, Textur ...@@ -2420,6 +2442,9 @@ bool Renderer11::copyToRenderTarget(TextureStorageInterface2DArray *dest, Textur
TextureStorage11_2DArray *dest11 = TextureStorage11_2DArray::makeTextureStorage11_2DArray(dest->getStorageInstance()); TextureStorage11_2DArray *dest11 = TextureStorage11_2DArray::makeTextureStorage11_2DArray(dest->getStorageInstance());
mDeviceContext->CopyResource(dest11->getBaseTexture(), source11->getBaseTexture()); mDeviceContext->CopyResource(dest11->getBaseTexture(), source11->getBaseTexture());
dest11->invalidateSwizzleCache();
return true; return true;
} }
...@@ -2482,6 +2507,8 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so ...@@ -2482,6 +2507,8 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so
bool ret = mBlit->copyTexture(source, sourceArea, sourceSize, dest, destArea, destSize, NULL, bool ret = mBlit->copyTexture(source, sourceArea, sourceSize, dest, destArea, destSize, NULL,
destFormat, GL_NEAREST); destFormat, GL_NEAREST);
storage11->invalidateSwizzleCacheLevel(level);
return ret; return ret;
} }
...@@ -2541,6 +2568,8 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so ...@@ -2541,6 +2568,8 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so
bool ret = mBlit->copyTexture(source, sourceArea, sourceSize, dest, destArea, destSize, NULL, bool ret = mBlit->copyTexture(source, sourceArea, sourceSize, dest, destArea, destSize, NULL,
destFormat, GL_NEAREST); destFormat, GL_NEAREST);
storage11->invalidateSwizzleCacheLevel(level);
return ret; return ret;
} }
...@@ -2600,6 +2629,8 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so ...@@ -2600,6 +2629,8 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so
bool ret = mBlit->copyTexture(source, sourceArea, sourceSize, dest, destArea, destSize, NULL, bool ret = mBlit->copyTexture(source, sourceArea, sourceSize, dest, destArea, destSize, NULL,
destFormat, GL_NEAREST); destFormat, GL_NEAREST);
storage11->invalidateSwizzleCacheLevel(level);
return ret; return ret;
} }
...@@ -2661,6 +2692,8 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so ...@@ -2661,6 +2692,8 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so
bool ret = mBlit->copyTexture(source, sourceArea, sourceSize, dest, destArea, destSize, NULL, bool ret = mBlit->copyTexture(source, sourceArea, sourceSize, dest, destArea, destSize, NULL,
destFormat, GL_NEAREST); destFormat, GL_NEAREST);
storage11->invalidateSwizzleCacheLevel(level);
return ret; return ret;
} }
...@@ -2966,6 +2999,8 @@ bool Renderer11::blitRect(gl::Framebuffer *readTarget, const gl::Rectangle &read ...@@ -2966,6 +2999,8 @@ bool Renderer11::blitRect(gl::Framebuffer *readTarget, const gl::Rectangle &read
} }
} }
invalidateFramebufferSwizzles(drawTarget);
return true; return true;
} }
...@@ -3403,6 +3438,46 @@ ID3D11Texture2D *Renderer11::resolveMultisampledTexture(ID3D11Texture2D *source, ...@@ -3403,6 +3438,46 @@ ID3D11Texture2D *Renderer11::resolveMultisampledTexture(ID3D11Texture2D *source,
} }
} }
void Renderer11::invalidateRenderbufferSwizzles(gl::Renderbuffer *renderBuffer, int mipLevel)
{
TextureStorage *texStorage = renderBuffer->getTextureStorage();
if (texStorage)
{
TextureStorage11 *texStorage11 = TextureStorage11::makeTextureStorage11(texStorage);
if (!texStorage11)
{
ERR("texture storage pointer unexpectedly null.");
return;
}
texStorage11->invalidateSwizzleCacheLevel(mipLevel);
}
}
void Renderer11::invalidateFramebufferSwizzles(gl::Framebuffer *framebuffer)
{
for (unsigned int colorAttachment = 0; colorAttachment < gl::IMPLEMENTATION_MAX_DRAW_BUFFERS; colorAttachment++)
{
gl::Renderbuffer *colorbuffer = framebuffer->getColorbuffer(colorAttachment);
if (colorbuffer)
{
invalidateRenderbufferSwizzles(colorbuffer, framebuffer->getColorbufferMipLevel(colorAttachment));
}
}
gl::Renderbuffer *depthBuffer = framebuffer->getDepthbuffer();
if (depthBuffer)
{
invalidateRenderbufferSwizzles(depthBuffer, framebuffer->getDepthbufferMipLevel());
}
gl::Renderbuffer *stencilBuffer = framebuffer->getStencilbuffer();
if (stencilBuffer)
{
invalidateRenderbufferSwizzles(stencilBuffer, framebuffer->getStencilbufferMipLevel());
}
}
bool Renderer11::getLUID(LUID *adapterLuid) const bool Renderer11::getLUID(LUID *adapterLuid) const
{ {
adapterLuid->HighPart = 0; adapterLuid->HighPart = 0;
......
...@@ -238,6 +238,9 @@ class Renderer11 : public Renderer ...@@ -238,6 +238,9 @@ class Renderer11 : public Renderer
bool colorBlit, bool depthBlit, bool stencilBlit); bool colorBlit, bool depthBlit, bool stencilBlit);
ID3D11Texture2D *resolveMultisampledTexture(ID3D11Texture2D *source, unsigned int subresource); ID3D11Texture2D *resolveMultisampledTexture(ID3D11Texture2D *source, unsigned int subresource);
static void invalidateRenderbufferSwizzles(gl::Renderbuffer *renderBuffer, int mipLevel);
static void invalidateFramebufferSwizzles(gl::Framebuffer *framebuffer);
HMODULE mD3d11Module; HMODULE mD3d11Module;
HMODULE mDxgiModule; HMODULE mDxgiModule;
HDC mDc; HDC mDc;
......
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