r600: relax stride/alignment requirements for vertices

seems hw can do unaligned accesses and unaligned strides
removes extra conversion when using vbo's

however I needed to switch 3 component byte format to 4 component formats
for tests to pass. Somewhat sililar to GL_SHORT fix done earlier

removes assert and gains +2 piglit especially draw-vertices
This commit is contained in:
Andre Maasikas
2010-08-04 12:49:39 +03:00
parent 5c2f01bbb0
commit 8ad5b76d52
3 changed files with 14 additions and 20 deletions
+4 -1
View File
@@ -275,7 +275,10 @@ GLuint GetSurfaceFormat(GLenum eType, GLuint nChannels, GLuint * pClient_size)
case 2:
format = FMT_8_8; break;
case 3:
format = FMT_8_8_8; break;
/* for some (small/unaligned) strides using 4 comps works
* better, probably same as GL_SHORT below
* test piglit/draw-vertices */
format = FMT_8_8_8_8; break;
case 4:
format = FMT_8_8_8_8; break;
default:
+7 -16
View File
@@ -625,11 +625,11 @@ static void r700SetupStreams(GLcontext *ctx, const struct gl_client_array *input
stride = (input[i]->StrideB == 0) ? getTypeSize(input[i]->Type) * input[i]->Size : input[i]->StrideB;
if (input[i]->Type == GL_DOUBLE || input[i]->Type == GL_UNSIGNED_INT || input[i]->Type == GL_INT ||
if (input[i]->Type == GL_DOUBLE || input[i]->Type == GL_UNSIGNED_INT || input[i]->Type == GL_INT
#if MESA_BIG_ENDIAN
getTypeSize(input[i]->Type) != 4 ||
|| getTypeSize(input[i]->Type) != 4
#endif
stride < 4)
)
{
r700ConvertAttrib(ctx, count, input[i], &context->stream_desc[index]);
}
@@ -637,19 +637,10 @@ static void r700SetupStreams(GLcontext *ctx, const struct gl_client_array *input
{
if (input[i]->BufferObj->Name)
{
if (stride % 4 != 0)
{
assert(((intptr_t) input[i]->Ptr) % input[i]->StrideB == 0);
r700AlignDataToDword(ctx, input[i], count, &context->stream_desc[index]);
context->stream_desc[index].is_named_bo = GL_FALSE;
}
else
{
context->stream_desc[index].stride = input[i]->StrideB;
context->stream_desc[index].bo_offset = (intptr_t) input[i]->Ptr;
context->stream_desc[index].bo = get_radeon_buffer_object(input[i]->BufferObj)->bo;
context->stream_desc[index].is_named_bo = GL_TRUE;
}
context->stream_desc[index].stride = input[i]->StrideB;
context->stream_desc[index].bo_offset = (intptr_t) input[i]->Ptr;
context->stream_desc[index].bo = get_radeon_buffer_object(input[i]->BufferObj)->bo;
context->stream_desc[index].is_named_bo = GL_TRUE;
}
else
{
+3 -3
View File
@@ -461,11 +461,11 @@ static void r700TranslateAttrib(GLcontext *ctx, GLuint unLoc, int count, const s
stride = (input->StrideB == 0) ? getTypeSize(input->Type) * input->Size
: input->StrideB;
if (input->Type == GL_DOUBLE || input->Type == GL_UNSIGNED_INT || input->Type == GL_INT ||
if (input->Type == GL_DOUBLE || input->Type == GL_UNSIGNED_INT || input->Type == GL_INT
#if MESA_BIG_ENDIAN
getTypeSize(input->Type) != 4 ||
|| getTypeSize(input->Type) != 4
#endif
stride < 4)
)
{
pStreamDesc->type = GL_FLOAT;