Collapsed register indexes into one.

TRAC #22293 Signed-off-by: Daniel Koch Signed-off-by: Shannon Woods Author: Nicolas Capens git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1623 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent 652468c4
#define MAJOR_VERSION 1
#define MINOR_VERSION 1
#define BUILD_VERSION 0
#define BUILD_REVISION 1561
#define BUILD_REVISION 1563
#define STRINGIFY(x) #x
#define MACRO_STRINGIFY(x) STRINGIFY(x)
......
......@@ -59,8 +59,6 @@ class Query;
enum
{
D3D9_MAX_FLOAT_CONSTANTS = 256,
D3D9_MAX_BOOL_CONSTANTS = 16,
D3D9_MAX_INT_CONSTANTS = 16,
MAX_VERTEX_ATTRIBS = 16,
MAX_VERTEX_UNIFORM_VECTORS = D3D9_MAX_FLOAT_CONSTANTS - 2, // Reserve space for dx_HalfPixelSize and dx_DepthRange.
......
......@@ -965,53 +965,45 @@ void ProgramBinary::applyUniforms()
if (targetUniform->dirty)
{
int count = targetUniform->arraySize;
GLint *v = (GLint*)targetUniform->data;
switch (targetUniform->type)
if (targetUniform->type == GL_SAMPLER_2D ||
targetUniform->type == GL_SAMPLER_CUBE)
{
case GL_SAMPLER_2D:
case GL_SAMPLER_CUBE:
int count = targetUniform->arraySize;
GLint *v = (GLint*)targetUniform->data;
if (targetUniform->ps.registerCount)
{
if (targetUniform->ps.registerCount)
{
if (targetUniform->ps.samplerIndex >= 0)
{
unsigned int firstIndex = targetUniform->ps.samplerIndex;
ASSERT(targetUniform->ps.registerIndex >= 0);
unsigned int firstIndex = targetUniform->ps.registerIndex;
for (int i = 0; i < count; i++)
{
unsigned int samplerIndex = firstIndex + i;
for (int i = 0; i < count; i++)
{
unsigned int samplerIndex = firstIndex + i;
if (samplerIndex < MAX_TEXTURE_IMAGE_UNITS)
{
ASSERT(mSamplersPS[samplerIndex].active);
mSamplersPS[samplerIndex].logicalTextureUnit = v[i];
}
}
if (samplerIndex < MAX_TEXTURE_IMAGE_UNITS)
{
ASSERT(mSamplersPS[samplerIndex].active);
mSamplersPS[samplerIndex].logicalTextureUnit = v[i];
}
}
}
if (targetUniform->vs.registerCount)
{
if (targetUniform->vs.samplerIndex >= 0)
{
unsigned int firstIndex = targetUniform->vs.samplerIndex;
if (targetUniform->vs.registerCount)
{
ASSERT(targetUniform->vs.registerIndex >= 0);
unsigned int firstIndex = targetUniform->vs.registerIndex;
for (int i = 0; i < count; i++)
{
unsigned int samplerIndex = firstIndex + i;
for (int i = 0; i < count; i++)
{
unsigned int samplerIndex = firstIndex + i;
if (samplerIndex < MAX_VERTEX_TEXTURE_IMAGE_UNITS_VTF)
{
ASSERT(mSamplersVS[samplerIndex].active);
mSamplersVS[samplerIndex].logicalTextureUnit = v[i];
}
}
if (samplerIndex < MAX_VERTEX_TEXTURE_IMAGE_UNITS_VTF)
{
ASSERT(mSamplersVS[samplerIndex].active);
mSamplersVS[samplerIndex].logicalTextureUnit = v[i];
}
}
}
break;
}
}
}
......@@ -1594,14 +1586,10 @@ bool ProgramBinary::load(InfoLog &infoLog, const void *binary, GLsizei length)
mUniforms[i] = new Uniform(type, _name, arraySize);
stream.read(&mUniforms[i]->ps.float4Index);
stream.read(&mUniforms[i]->ps.samplerIndex);
stream.read(&mUniforms[i]->ps.boolIndex);
stream.read(&mUniforms[i]->ps.registerIndex);
stream.read(&mUniforms[i]->ps.registerCount);
stream.read(&mUniforms[i]->vs.float4Index);
stream.read(&mUniforms[i]->vs.samplerIndex);
stream.read(&mUniforms[i]->vs.boolIndex);
stream.read(&mUniforms[i]->vs.registerIndex);
stream.read(&mUniforms[i]->vs.registerCount);
}
......@@ -1709,14 +1697,10 @@ bool ProgramBinary::save(void* binary, GLsizei bufSize, GLsizei *length)
stream.write(mUniforms[i]->_name);
stream.write(mUniforms[i]->arraySize);
stream.write(mUniforms[i]->ps.float4Index);
stream.write(mUniforms[i]->ps.samplerIndex);
stream.write(mUniforms[i]->ps.boolIndex);
stream.write(mUniforms[i]->ps.registerIndex);
stream.write(mUniforms[i]->ps.registerCount);
stream.write(mUniforms[i]->vs.float4Index);
stream.write(mUniforms[i]->vs.samplerIndex);
stream.write(mUniforms[i]->vs.boolIndex);
stream.write(mUniforms[i]->vs.registerIndex);
stream.write(mUniforms[i]->vs.registerCount);
}
......@@ -2078,8 +2062,17 @@ bool ProgramBinary::defineUniform(GLenum shader, const rx::D3DConstant *constant
uniform = mUniforms[mUniformIndex[location].index];
}
if (shader == GL_FRAGMENT_SHADER) uniform->ps.set(constant);
if (shader == GL_VERTEX_SHADER) uniform->vs.set(constant);
if (shader == GL_FRAGMENT_SHADER)
{
uniform->ps.registerIndex = constant->registerIndex;
uniform->ps.registerCount = constant->registerCount;
}
else if (shader == GL_VERTEX_SHADER)
{
uniform->vs.registerIndex = constant->registerIndex;
uniform->vs.registerCount = constant->registerCount;
}
else UNREACHABLE();
if (location >= 0)
{
......
......@@ -8,12 +8,12 @@
#define LIBGLESV2_UNIFORM_H_
#include <string>
#include <vector>
#define GL_APICALL
#include <GLES2/gl2.h>
#include "common/debug.h"
#include "libGLESv2/renderer/D3DConstantTable.h"
namespace gl
{
......@@ -40,30 +40,11 @@ struct Uniform
{
RegisterInfo()
{
float4Index = -1;
samplerIndex = -1;
boolIndex = -1;
registerIndex = -1;
registerCount = 0;
}
void set(const rx::D3DConstant *constant)
{
switch(constant->registerSet)
{
case rx::D3DConstant::RS_BOOL: boolIndex = constant->registerIndex; break;
case rx::D3DConstant::RS_FLOAT4: float4Index = constant->registerIndex; break;
case rx::D3DConstant::RS_SAMPLER: samplerIndex = constant->registerIndex; break;
default: UNREACHABLE();
}
ASSERT(registerCount == 0 || registerCount == (int)constant->registerCount);
registerCount = constant->registerCount;
}
int float4Index;
int samplerIndex;
int boolIndex;
int registerIndex;
int registerCount;
};
......
......@@ -1508,9 +1508,8 @@ void Renderer9::applyUniforms(const gl::UniformArray *uniformArray)
void Renderer9::applyUniformnbv(gl::Uniform *targetUniform, GLsizei count, int width, const GLboolean *v)
{
float vector[gl::D3D9_MAX_FLOAT_CONSTANTS * 4];
BOOL boolVector[gl::D3D9_MAX_BOOL_CONSTANTS];
if (targetUniform->ps.float4Index >= 0 || targetUniform->vs.float4Index >= 0)
if (targetUniform->ps.registerIndex >= 0 || targetUniform->vs.registerIndex >= 0)
{
ASSERT(count <= gl::D3D9_MAX_FLOAT_CONSTANTS);
for (int i = 0; i < count; i++)
......@@ -1529,55 +1528,25 @@ void Renderer9::applyUniformnbv(gl::Uniform *targetUniform, GLsizei count, int w
}
}
if (targetUniform->ps.boolIndex >= 0 || targetUniform->vs.boolIndex >= 0)
{
int psCount = targetUniform->ps.boolIndex >= 0 ? targetUniform->ps.registerCount : 0;
int vsCount = targetUniform->vs.boolIndex >= 0 ? targetUniform->vs.registerCount : 0;
int copyCount = std::min(count * width, std::max(psCount, vsCount));
ASSERT(copyCount <= gl::D3D9_MAX_BOOL_CONSTANTS);
for (int i = 0; i < copyCount; i++)
{
boolVector[i] = v[i] != GL_FALSE;
}
}
if (targetUniform->ps.float4Index >= 0)
{
mDevice->SetPixelShaderConstantF(targetUniform->ps.float4Index, vector, targetUniform->ps.registerCount);
}
if (targetUniform->ps.boolIndex >= 0)
{
mDevice->SetPixelShaderConstantB(targetUniform->ps.boolIndex, boolVector, targetUniform->ps.registerCount);
}
if (targetUniform->vs.float4Index >= 0)
{
mDevice->SetVertexShaderConstantF(targetUniform->vs.float4Index, vector, targetUniform->vs.registerCount);
}
if (targetUniform->vs.boolIndex >= 0)
{
mDevice->SetVertexShaderConstantB(targetUniform->vs.boolIndex, boolVector, targetUniform->vs.registerCount);
}
applyUniformnfv(targetUniform, vector);
}
bool Renderer9::applyUniformnfv(gl::Uniform *targetUniform, const GLfloat *v)
void Renderer9::applyUniformnfv(gl::Uniform *targetUniform, const GLfloat *v)
{
if (targetUniform->ps.registerCount)
{
mDevice->SetPixelShaderConstantF(targetUniform->ps.float4Index, v, targetUniform->ps.registerCount);
ASSERT(targetUniform->ps.registerIndex >= 0);
mDevice->SetPixelShaderConstantF(targetUniform->ps.registerIndex, v, targetUniform->ps.registerCount);
}
if (targetUniform->vs.registerCount)
{
mDevice->SetVertexShaderConstantF(targetUniform->vs.float4Index, v, targetUniform->vs.registerCount);
ASSERT(targetUniform->vs.registerIndex >= 0);
mDevice->SetVertexShaderConstantF(targetUniform->vs.registerIndex, v, targetUniform->vs.registerCount);
}
return true;
}
bool Renderer9::applyUniform1iv(gl::Uniform *targetUniform, GLsizei count, const GLint *v)
void Renderer9::applyUniform1iv(gl::Uniform *targetUniform, GLsizei count, const GLint *v)
{
ASSERT(count <= gl::D3D9_MAX_FLOAT_CONSTANTS);
gl::Vector4 vector[gl::D3D9_MAX_FLOAT_CONSTANTS];
......@@ -1587,26 +1556,10 @@ bool Renderer9::applyUniform1iv(gl::Uniform *targetUniform, GLsizei count, const
vector[i] = gl::Vector4((float)v[i], 0, 0, 0);
}
if (targetUniform->ps.registerCount)
{
if (targetUniform->ps.float4Index >= 0)
{
mDevice->SetPixelShaderConstantF(targetUniform->ps.float4Index, (const float*)vector, targetUniform->ps.registerCount);
}
}
if (targetUniform->vs.registerCount)
{
if (targetUniform->vs.float4Index >= 0)
{
mDevice->SetVertexShaderConstantF(targetUniform->vs.float4Index, (const float *)vector, targetUniform->vs.registerCount);
}
}
return true;
applyUniformnfv(targetUniform, (const GLfloat*)vector);
}
bool Renderer9::applyUniform2iv(gl::Uniform *targetUniform, GLsizei count, const GLint *v)
void Renderer9::applyUniform2iv(gl::Uniform *targetUniform, GLsizei count, const GLint *v)
{
ASSERT(count <= gl::D3D9_MAX_FLOAT_CONSTANTS);
gl::Vector4 vector[gl::D3D9_MAX_FLOAT_CONSTANTS];
......@@ -1618,12 +1571,10 @@ bool Renderer9::applyUniform2iv(gl::Uniform *targetUniform, GLsizei count, const
v += 2;
}
applyUniformniv(targetUniform, count, vector);
return true;
applyUniformnfv(targetUniform, (const GLfloat*)vector);
}
bool Renderer9::applyUniform3iv(gl::Uniform *targetUniform, GLsizei count, const GLint *v)
void Renderer9::applyUniform3iv(gl::Uniform *targetUniform, GLsizei count, const GLint *v)
{
ASSERT(count <= gl::D3D9_MAX_FLOAT_CONSTANTS);
gl::Vector4 vector[gl::D3D9_MAX_FLOAT_CONSTANTS];
......@@ -1635,12 +1586,10 @@ bool Renderer9::applyUniform3iv(gl::Uniform *targetUniform, GLsizei count, const
v += 3;
}
applyUniformniv(targetUniform, count, vector);
return true;
applyUniformnfv(targetUniform, (const GLfloat*)vector);
}
bool Renderer9::applyUniform4iv(gl::Uniform *targetUniform, GLsizei count, const GLint *v)
void Renderer9::applyUniform4iv(gl::Uniform *targetUniform, GLsizei count, const GLint *v)
{
ASSERT(count <= gl::D3D9_MAX_FLOAT_CONSTANTS);
gl::Vector4 vector[gl::D3D9_MAX_FLOAT_CONSTANTS];
......@@ -1652,24 +1601,7 @@ bool Renderer9::applyUniform4iv(gl::Uniform *targetUniform, GLsizei count, const
v += 4;
}
applyUniformniv(targetUniform, count, vector);
return true;
}
void Renderer9::applyUniformniv(gl::Uniform *targetUniform, GLsizei count, const gl::Vector4 *vector)
{
if (targetUniform->ps.registerCount)
{
ASSERT(targetUniform->ps.float4Index >= 0);
mDevice->SetPixelShaderConstantF(targetUniform->ps.float4Index, (const float *)vector, targetUniform->ps.registerCount);
}
if (targetUniform->vs.registerCount)
{
ASSERT(targetUniform->vs.float4Index >= 0);
mDevice->SetVertexShaderConstantF(targetUniform->vs.float4Index, (const float *)vector, targetUniform->vs.registerCount);
}
applyUniformnfv(targetUniform, (const GLfloat*)vector);
}
void Renderer9::clear(const gl::ClearParameters &clearParams, gl::Framebuffer *frameBuffer)
......
......@@ -187,12 +187,11 @@ class Renderer9 : public Renderer
private:
DISALLOW_COPY_AND_ASSIGN(Renderer9);
bool applyUniformnfv(gl::Uniform *targetUniform, const GLfloat *v);
bool applyUniform1iv(gl::Uniform *targetUniform, GLsizei count, const GLint *v);
bool applyUniform2iv(gl::Uniform *targetUniform, GLsizei count, const GLint *v);
bool applyUniform3iv(gl::Uniform *targetUniform, GLsizei count, const GLint *v);
bool applyUniform4iv(gl::Uniform *targetUniform, GLsizei count, const GLint *v);
void applyUniformniv(gl::Uniform *targetUniform, GLsizei count, const gl::Vector4 *vector);
void applyUniformnfv(gl::Uniform *targetUniform, const GLfloat *v);
void applyUniform1iv(gl::Uniform *targetUniform, GLsizei count, const GLint *v);
void applyUniform2iv(gl::Uniform *targetUniform, GLsizei count, const GLint *v);
void applyUniform3iv(gl::Uniform *targetUniform, GLsizei count, const GLint *v);
void applyUniform4iv(gl::Uniform *targetUniform, GLsizei count, const GLint *v);
void applyUniformnbv(gl::Uniform *targetUniform, GLsizei count, int width, const GLboolean *v);
void drawLineLoop(GLsizei count, GLenum type, const GLvoid *indices, int minIndex, gl::Buffer *elementArrayBuffer);
......
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