Commit 194c8e03 by Nicolas Capens Committed by Nicolas Capens

Fix vertex stream count and normalized data layout.

Bug swiftshader:86 Change-Id: Ide76f9e7d8c490e5057959e1a7c28dfc7119151a Reviewed-on: https://swiftshader-review.googlesource.com/13428Tested-by: 's avatarNicolas Capens <nicolascapens@google.com> Reviewed-by: 's avatarCorentin Wallez <cwallez@google.com> Reviewed-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <nicolascapens@google.com>
parent 665757de
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#include <cstdint> #include <cstdint>
#include <memory> #include <memory>
#include <cassert>
namespace { namespace {
...@@ -149,11 +150,13 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) ...@@ -149,11 +150,13 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
return 0; return 0;
} }
constexpr int MAX_ATTRIBUTE_COMPONENTS = 4;
struct Stream struct Stream
{ {
uint8_t count : BITS(sw::STREAMTYPE_LAST); uint8_t count : BITS(MAX_ATTRIBUTE_COMPONENTS);
bool normalized; bool normalized : 1;
uint8_t reserved : 8 - BITS(sw::STREAMTYPE_LAST) - 1; uint8_t reserved : 8 - BITS(MAX_ATTRIBUTE_COMPONENTS) - 1;
}; };
for(int i = 0; i < sw::MAX_VERTEX_INPUTS; i++) for(int i = 0; i < sw::MAX_VERTEX_INPUTS; i++)
...@@ -162,7 +165,7 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) ...@@ -162,7 +165,7 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
Stream stream = (Stream&)data[1 + 2 * i + 1]; Stream stream = (Stream&)data[1 + 2 * i + 1];
if(type > sw::STREAMTYPE_LAST) return 0; if(type > sw::STREAMTYPE_LAST) return 0;
if(stream.count > 4) return 0; if(stream.count > MAX_ATTRIBUTE_COMPONENTS) return 0;
if(stream.reserved != 0) return 0; if(stream.reserved != 0) return 0;
state.input[i].type = type; state.input[i].type = type;
...@@ -199,5 +202,12 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) ...@@ -199,5 +202,12 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
sw::VertexProgram program(state, bytecodeShader.get()); sw::VertexProgram program(state, bytecodeShader.get());
program.generate(); program.generate();
// TODO
// sw::Routine *routine = program(L"VertexRoutine");
// assert(routine);
// const void *entry = routine->getEntry();
// assert(entry);
// delete routine;
return 0; return 0;
} }
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