Переглянути джерело

i965: Make sure to upload the data for a collection of Stride == 0 arrays.

Commit d631c19db4 avoided this problem
by forcing the driver to get the min/max index, but that commit was
broken, so just fix the driver problem (confusion between "do I need
to upload any data?" and "do I need the index bounds in order to
upload any data?").
tags/mesa-8.0-rc1
Eric Anholt 14 роки тому
джерело
коміт
ddc348d83e
1 змінених файлів з 18 додано та 1 видалено
  1. 18
    1
      src/mesa/drivers/dri/i965/brw_draw_upload.c

+ 18
- 1
src/mesa/drivers/dri/i965/brw_draw_upload.c Переглянути файл

@@ -31,6 +31,7 @@
#include "main/bufferobj.h"
#include "main/context.h"
#include "main/enums.h"
#include "main/macros.h"

#include "brw_draw.h"
#include "brw_defines.h"
@@ -251,6 +252,22 @@ copy_array_to_vbo_array(struct brw_context *brw,
struct brw_vertex_buffer *buffer,
GLuint dst_stride)
{
if (min == -1) {
/* If we don't have computed min/max bounds, then this must be a use of
* the current attribute, which has a 0 stride. Otherwise, we wouldn't
* know what data to upload.
*/
assert(element->glarray->StrideB == 0);

intel_upload_data(&brw->intel, element->glarray->Ptr,
element->element_size,
element->element_size,
&buffer->bo, &buffer->offset);

buffer->stride = 0;
return;
}

int src_stride = element->glarray->StrideB;
const unsigned char *src = element->glarray->Ptr + min * src_stride;
int count = max - min + 1;
@@ -442,7 +459,7 @@ static void brw_prepare_vertices(struct brw_context *brw)
else if (total_size < 2048) {
/* Upload non-interleaved arrays into a single interleaved array */
struct brw_vertex_buffer *buffer;
int count = max_index - min_index + 1;
int count = MAX2(max_index - min_index + 1, 1);
int offset;
char *map;


Завантаження…
Відмінити
Зберегти