Commit 1d1720a7 by Chris Forbes

Produce correct `one` value for integer textures

Test: dEQP-VK.texture.swizzle.component_mapping.* Bug: b/129523279 Change-Id: Ib4f7cd6c90fe7bde7d1abd2ecf77e3abbe121438 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/29949Tested-by: 's avatarChris Forbes <chrisforbes@google.com> Presubmit-Ready: Chris Forbes <chrisforbes@google.com> Reviewed-by: 's avatarNicolas Capens <nicolascapens@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
parent 3c203531
......@@ -20,7 +20,7 @@
namespace
{
void applySwizzle(VkComponentSwizzle swizzle, sw::Float4& f, const sw::Vector4f& c)
void applySwizzle(VkComponentSwizzle swizzle, sw::Float4& f, const sw::Vector4f& c, bool integer)
{
switch(swizzle)
{
......@@ -29,7 +29,15 @@ namespace
case VK_COMPONENT_SWIZZLE_B: f = c.z; break;
case VK_COMPONENT_SWIZZLE_A: f = c.w; break;
case VK_COMPONENT_SWIZZLE_ZERO: f = sw::Float4(0.0f, 0.0f, 0.0f, 0.0f); break;
case VK_COMPONENT_SWIZZLE_ONE: f = sw::Float4(1.0f, 1.0f, 1.0f, 1.0f); break;
case VK_COMPONENT_SWIZZLE_ONE:
if (integer)
{
f = rr::As<sw::Float4>(sw::Int4(1.0f, 1.0f, 1.0f, 1.0f));
} else
{
f = sw::Float4(1.0f, 1.0f, 1.0f, 1.0f);
}
break;
default: ASSERT(false);
}
}
......@@ -202,10 +210,11 @@ namespace sw
(state.swizzle.a != VK_COMPONENT_SWIZZLE_A))
{
const Vector4f col(c);
applySwizzle(state.swizzle.r, c.x, col);
applySwizzle(state.swizzle.g, c.y, col);
applySwizzle(state.swizzle.b, c.z, col);
applySwizzle(state.swizzle.a, c.w, col);
auto integer = hasUnnormalizedIntegerTexture();
applySwizzle(state.swizzle.r, c.x, col, integer);
applySwizzle(state.swizzle.g, c.y, col, integer);
applySwizzle(state.swizzle.b, c.z, col, integer);
applySwizzle(state.swizzle.a, c.w, col, integer);
}
return c;
......
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