diff --git a/Cargo.toml b/Cargo.toml index 124c99a6f..8ce9623d0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mozangle" -version = "0.7.0" +version = "0.7.1" authors = ["The ANGLE Project Authors", "The Servo Project Developers"] license = "BSD-3-Clause" description = "Mozilla's fork of Google ANGLE, repackaged as a Rust crate." diff --git a/UPSTREAM b/UPSTREAM index db2fdcdc9..01ddecd3f 100644 --- a/UPSTREAM +++ b/UPSTREAM @@ -1 +1 @@ -gfx/angle is taken from FIREFOX_153_1_0esr_RELEASE: 468445e58d3acc7e4e059be99856daff1f2ae8f1 \ No newline at end of file +gfx/angle is taken from FIREFOX_153_3_0esr_RELEASE: 861fdeb0d32fe1bd101fea886687e680f612d735 diff --git a/gfx/angle/checkout/src/libANGLE/renderer/d3d/ProgramD3D.cpp b/gfx/angle/checkout/src/libANGLE/renderer/d3d/ProgramD3D.cpp index b38ede413..3107d9eb0 100644 --- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/ProgramD3D.cpp +++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/ProgramD3D.cpp @@ -2712,6 +2712,16 @@ void ProgramD3D::defineUniformBase(const gl::Shader *shader, } const ShaderD3D *shaderD3D = GetImplAs(shader); + + // The uniform ended up as unreferenced during HLSL generation, so it has no register. + if (!shaderD3D->hasUniform(uniform.name)) + { + UniformEncodingVisitorD3D visitor(shader->getType(), HLSLRegisterType::None, &stubEncoder, + uniformMap); + sh::TraverseShaderVariable(uniform, false, &visitor); + return; + } + unsigned int startRegister = shaderD3D->getUniformRegister(uniform.name); ShShaderOutput outputType = shaderD3D->getCompilerOutputType(); sh::HLSLBlockEncoder encoder(sh::HLSLBlockEncoder::GetStrategyFor(outputType), true); diff --git a/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/Image9.cpp b/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/Image9.cpp index 229d54ced..4460bba61 100644 --- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/Image9.cpp +++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/Image9.cpp @@ -389,7 +389,8 @@ angle::Result Image9::setManagedSurface(Context9 *context9, IDirect3DSurface9 *s surface->GetDesc(&desc); ASSERT(desc.Pool == D3DPOOL_MANAGED); - if ((GLsizei)desc.Width == mWidth && (GLsizei)desc.Height == mHeight) + if ((GLsizei)desc.Width == mWidth && (GLsizei)desc.Height == mHeight && + desc.Format == mD3DFormat) { if (mSurface) { diff --git a/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/TextureStorage9.cpp b/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/TextureStorage9.cpp index b2fea07fd..1575d9cca 100644 --- a/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/TextureStorage9.cpp +++ b/gfx/angle/checkout/src/libANGLE/renderer/d3d/d3d9/TextureStorage9.cpp @@ -472,6 +472,13 @@ angle::Result TextureStorage9_Cube::findRenderTarget(const gl::Context *context, ASSERT(index.getType() == gl::TextureType::CubeMap && gl::IsCubeMapFaceTarget(index.getTarget())); + + if (index.getLevelIndex() != 0) + { + *outRT = nullptr; + return angle::Result::Continue; + } + const size_t renderTargetIndex = index.cubeMapFaceIndex(); *outRT = mRenderTarget[renderTargetIndex]; @@ -489,6 +496,10 @@ angle::Result TextureStorage9_Cube::getRenderTarget(const gl::Context *context, ASSERT(index.getType() == gl::TextureType::CubeMap && gl::IsCubeMapFaceTarget(index.getTarget())); + + ANGLE_CHECK_HR(GetImplAs(context), index.getLevelIndex() == 0, + "Cube map render targets are only supported for level 0", E_INVALIDARG); + const size_t renderTargetIndex = index.cubeMapFaceIndex(); if (mRenderTarget[renderTargetIndex] == nullptr && isRenderTarget())