opengles emulator: Workaround Cordy (Unity) bug with intel driver.
Uniform locations are 32-bit values which the application queries from the driver after a shader program is linked. It seems that Cordy game (possibly all Unity based apps) store the returned location as 16-bit value. Intel driver returns location values in the upper 16-bit range :( This is a workaround for this issue, when a program is linked we check the locations of all uniforms, if all locations are within the upper 16-bit range (as with Intel driver) we shift the location value before returning to the application. Also override all functions which take a location parameter and do the reverse shift before sending a location value to the host. Change-Id: I234aaafe3313774b5da79eb1dac713b89b10ad60
This commit is contained in:
committed by
David 'Digit' Turner
parent
f7e07ec9ea
commit
52829d82ab
@@ -120,6 +120,9 @@ public:
|
||||
}
|
||||
size_t pixelDataSize(GLsizei width, GLsizei height, GLenum format, GLenum type, int pack) const;
|
||||
|
||||
void setCurrentProgram(GLint program) { m_currentProgram = program; }
|
||||
GLint currentProgram() const { return m_currentProgram; }
|
||||
|
||||
private:
|
||||
PixelStoreState m_pixelStore;
|
||||
VertexAttribState *m_states;
|
||||
@@ -127,7 +130,7 @@ private:
|
||||
GLuint m_currentArrayVbo;
|
||||
GLuint m_currentIndexVbo;
|
||||
int m_activeTexture;
|
||||
|
||||
GLint m_currentProgram;
|
||||
|
||||
bool validLocation(int location) { return (location >= 0 && location < m_nLocations); }
|
||||
public:
|
||||
|
||||
Reference in New Issue
Block a user