Merge remote branch 'origin/master' into pipe-video
[mesa.git] / src / gallium / drivers / r600 / r600_state.c
index 0d76afd6cd5c27997d94328e3d9e41b47b00cfed..8b001e11f4af96f4878fc40641c40a0d92c7b571 100644 (file)
@@ -174,7 +174,7 @@ void r600_vertex_buffer_update(struct r600_pipe_context *rctx)
                        rbuffer = (struct r600_resource*)vertex_buffer->buffer;
                        offset = 0;
                }
-               if (vertex_buffer == NULL)
+               if (vertex_buffer == NULL || rbuffer == NULL)
                        continue;
                offset += vertex_buffer->buffer_offset + r600_bo_offset(rbuffer->bo);
 
@@ -925,6 +925,17 @@ static void r600_cb(struct r600_pipe_context *rctx, struct r600_pipe_state *rsta
        desc = util_format_description(rtex->resource.base.b.format);
        if (desc->colorspace == UTIL_FORMAT_COLORSPACE_SRGB)
                ntype = V_0280A0_NUMBER_SRGB;
+        else if (desc->layout == UTIL_FORMAT_LAYOUT_PLAIN) {
+               switch(desc->channel[0].type) {
+               case UTIL_FORMAT_TYPE_UNSIGNED:
+                       ntype = V_0280A0_NUMBER_UNORM;
+                       break;
+
+               case UTIL_FORMAT_TYPE_SIGNED:
+                       ntype = V_0280A0_NUMBER_SNORM;
+                       break;
+               }
+       }
 
        format = r600_translate_colorformat(rtex->resource.base.b.format);
        swap = r600_translate_colorswap(rtex->resource.base.b.format);
@@ -1019,8 +1030,6 @@ static void r600_set_framebuffer_state(struct pipe_context *ctx,
 
        util_copy_framebuffer_state(&rctx->framebuffer, state);
 
-       rctx->pframebuffer = &rctx->framebuffer;
-
        /* build states */
        for (int i = 0; i < state->nr_cbufs; i++) {
                r600_cb(rctx, rstate, state, i);