mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 02:58:05 +02:00
r600g: more cleanup
Signed-off-by: Jerome Glisse <jglisse@redhat.com>
This commit is contained in:
parent
7e536371f9
commit
6abd7771c6
15 changed files with 257 additions and 241 deletions
|
|
@ -8,6 +8,7 @@ LIBRARY_INCLUDES = \
|
|||
|
||||
C_SOURCES = \
|
||||
r600_asm.c \
|
||||
r600_blit.c \
|
||||
r600_buffer.c \
|
||||
r600_helper.c \
|
||||
r600_pipe.c \
|
||||
|
|
|
|||
|
|
@ -1360,7 +1360,7 @@ void evergreen_draw(struct pipe_context *ctx, const struct pipe_draw_info *info)
|
|||
draw.max_index = info->max_index;
|
||||
draw.index_bias = info->index_bias;
|
||||
|
||||
r600_translate_index_buffer2(rctx, &rctx->index_buffer.buffer,
|
||||
r600_translate_index_buffer(rctx, &rctx->index_buffer.buffer,
|
||||
&rctx->index_buffer.index_size,
|
||||
&draw.start,
|
||||
info->count);
|
||||
|
|
|
|||
|
|
@ -176,6 +176,10 @@ struct r600_bc {
|
|||
struct r600_cf_callstack callstack[SQ_MAX_CALL_DEPTH];
|
||||
};
|
||||
|
||||
/* eg_asm.c */
|
||||
int eg_bc_cf_build(struct r600_bc *bc, struct r600_bc_cf *cf);
|
||||
|
||||
/* r600_asm.c */
|
||||
int r600_bc_init(struct r600_bc *bc, enum radeon_family family);
|
||||
int r600_bc_add_alu(struct r600_bc *bc, const struct r600_bc_alu *alu);
|
||||
int r600_bc_add_literal(struct r600_bc *bc, const u32 *value);
|
||||
|
|
@ -186,4 +190,7 @@ int r600_bc_build(struct r600_bc *bc);
|
|||
int r600_bc_add_cfinst(struct r600_bc *bc, int inst);
|
||||
int r600_bc_add_alu_type(struct r600_bc *bc, const struct r600_bc_alu *alu, int type);
|
||||
|
||||
/* r700_asm.c */
|
||||
int r700_bc_alu_build(struct r600_bc *bc, struct r600_bc_alu *alu, unsigned id);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
164
src/gallium/drivers/r600/r600_blit.c
Normal file
164
src/gallium/drivers/r600/r600_blit.c
Normal file
|
|
@ -0,0 +1,164 @@
|
|||
/*
|
||||
* Copyright 2010 Jerome Glisse <glisse@freedesktop.org>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* on the rights to use, copy, modify, merge, publish, distribute, sub
|
||||
* license, and/or sell copies of the Software, and to permit persons to whom
|
||||
* the Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the next
|
||||
* paragraph) shall be included in all copies or substantial portions of the
|
||||
* Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
|
||||
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
* USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
#include <util/u_surface.h>
|
||||
#include <util/u_blitter.h>
|
||||
#include "r600_pipe.h"
|
||||
|
||||
static void r600_blitter_save_states(struct pipe_context *ctx)
|
||||
{
|
||||
struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
|
||||
|
||||
util_blitter_save_blend(rctx->blitter, rctx->states[R600_PIPE_STATE_BLEND]);
|
||||
util_blitter_save_depth_stencil_alpha(rctx->blitter, rctx->states[R600_PIPE_STATE_DSA]);
|
||||
if (rctx->states[R600_PIPE_STATE_STENCIL_REF]) {
|
||||
util_blitter_save_stencil_ref(rctx->blitter, &rctx->stencil_ref);
|
||||
}
|
||||
util_blitter_save_rasterizer(rctx->blitter, rctx->states[R600_PIPE_STATE_RASTERIZER]);
|
||||
util_blitter_save_fragment_shader(rctx->blitter, rctx->ps_shader);
|
||||
util_blitter_save_vertex_shader(rctx->blitter, rctx->vs_shader);
|
||||
util_blitter_save_vertex_elements(rctx->blitter, rctx->vertex_elements);
|
||||
if (rctx->states[R600_PIPE_STATE_VIEWPORT]) {
|
||||
util_blitter_save_viewport(rctx->blitter, &rctx->viewport);
|
||||
}
|
||||
if (rctx->states[R600_PIPE_STATE_CLIP]) {
|
||||
util_blitter_save_clip(rctx->blitter, &rctx->clip);
|
||||
}
|
||||
util_blitter_save_vertex_buffers(rctx->blitter, rctx->nvertex_buffer, rctx->vertex_buffer);
|
||||
|
||||
rctx->vertex_elements = NULL;
|
||||
|
||||
/* TODO queries */
|
||||
}
|
||||
|
||||
int r600_blit_uncompress_depth2(struct pipe_context *ctx, struct r600_resource_texture *texture)
|
||||
{
|
||||
struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
|
||||
struct pipe_framebuffer_state fb = *rctx->pframebuffer;
|
||||
struct pipe_surface *zsurf, *cbsurf;
|
||||
int level = 0;
|
||||
float depth = 1.0f;
|
||||
|
||||
r600_context_queries_suspend(&rctx->ctx);
|
||||
for (int i = 0; i < fb.nr_cbufs; i++) {
|
||||
fb.cbufs[i] = NULL;
|
||||
pipe_surface_reference(&fb.cbufs[i], rctx->pframebuffer->cbufs[i]);
|
||||
}
|
||||
fb.zsbuf = NULL;
|
||||
pipe_surface_reference(&fb.zsbuf, rctx->pframebuffer->zsbuf);
|
||||
|
||||
zsurf = ctx->screen->get_tex_surface(ctx->screen, &texture->resource.base.b, 0, level, 0,
|
||||
PIPE_BIND_DEPTH_STENCIL);
|
||||
|
||||
cbsurf = ctx->screen->get_tex_surface(ctx->screen,
|
||||
(struct pipe_resource*)texture->flushed_depth_texture,
|
||||
0, level, 0, PIPE_BIND_RENDER_TARGET);
|
||||
|
||||
r600_blitter_save_states(ctx);
|
||||
util_blitter_save_framebuffer(rctx->blitter, &fb);
|
||||
|
||||
if (rctx->family == CHIP_RV610 || rctx->family == CHIP_RV630 ||
|
||||
rctx->family == CHIP_RV620 || rctx->family == CHIP_RV635)
|
||||
depth = 0.0f;
|
||||
|
||||
util_blitter_custom_depth_stencil(rctx->blitter, zsurf, cbsurf, rctx->custom_dsa_flush, depth);
|
||||
|
||||
pipe_surface_reference(&zsurf, NULL);
|
||||
pipe_surface_reference(&cbsurf, NULL);
|
||||
for (int i = 0; i < fb.nr_cbufs; i++) {
|
||||
pipe_surface_reference(&fb.cbufs[i], NULL);
|
||||
}
|
||||
pipe_surface_reference(&fb.zsbuf, NULL);
|
||||
r600_context_queries_resume(&rctx->ctx);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void r600_clear(struct pipe_context *ctx, unsigned buffers,
|
||||
const float *rgba, double depth, unsigned stencil)
|
||||
{
|
||||
struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
|
||||
struct pipe_framebuffer_state *fb = &rctx->framebuffer;
|
||||
|
||||
r600_context_queries_suspend(&rctx->ctx);
|
||||
r600_blitter_save_states(ctx);
|
||||
util_blitter_clear(rctx->blitter, fb->width, fb->height,
|
||||
fb->nr_cbufs, buffers, rgba, depth,
|
||||
stencil);
|
||||
r600_context_queries_resume(&rctx->ctx);
|
||||
}
|
||||
|
||||
static void r600_clear_render_target(struct pipe_context *ctx,
|
||||
struct pipe_surface *dst,
|
||||
const float *rgba,
|
||||
unsigned dstx, unsigned dsty,
|
||||
unsigned width, unsigned height)
|
||||
{
|
||||
struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
|
||||
struct pipe_framebuffer_state *fb = &rctx->framebuffer;
|
||||
|
||||
r600_context_queries_suspend(&rctx->ctx);
|
||||
util_blitter_save_framebuffer(rctx->blitter, fb);
|
||||
util_blitter_clear_render_target(rctx->blitter, dst, rgba,
|
||||
dstx, dsty, width, height);
|
||||
r600_context_queries_resume(&rctx->ctx);
|
||||
}
|
||||
|
||||
static void r600_clear_depth_stencil(struct pipe_context *ctx,
|
||||
struct pipe_surface *dst,
|
||||
unsigned clear_flags,
|
||||
double depth,
|
||||
unsigned stencil,
|
||||
unsigned dstx, unsigned dsty,
|
||||
unsigned width, unsigned height)
|
||||
{
|
||||
struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
|
||||
struct pipe_framebuffer_state *fb = &rctx->framebuffer;
|
||||
|
||||
r600_context_queries_suspend(&rctx->ctx);
|
||||
util_blitter_save_framebuffer(rctx->blitter, fb);
|
||||
util_blitter_clear_depth_stencil(rctx->blitter, dst, clear_flags, depth, stencil,
|
||||
dstx, dsty, width, height);
|
||||
r600_context_queries_resume(&rctx->ctx);
|
||||
}
|
||||
|
||||
|
||||
static void r600_resource_copy_region(struct pipe_context *ctx,
|
||||
struct pipe_resource *dst,
|
||||
struct pipe_subresource subdst,
|
||||
unsigned dstx, unsigned dsty, unsigned dstz,
|
||||
struct pipe_resource *src,
|
||||
struct pipe_subresource subsrc,
|
||||
unsigned srcx, unsigned srcy, unsigned srcz,
|
||||
unsigned width, unsigned height)
|
||||
{
|
||||
util_resource_copy_region(ctx, dst, subdst, dstx, dsty, dstz,
|
||||
src, subsrc, srcx, srcy, srcz, width, height);
|
||||
}
|
||||
|
||||
void r600_init_blit_functions2(struct r600_pipe_context *rctx)
|
||||
{
|
||||
rctx->context.clear = r600_clear;
|
||||
rctx->context.clear_render_target = r600_clear_render_target;
|
||||
rctx->context.clear_depth_stencil = r600_clear_depth_stencil;
|
||||
rctx->context.resource_copy_region = r600_resource_copy_region;
|
||||
}
|
||||
|
|
@ -147,7 +147,7 @@ static struct pipe_context *r600_create_context2(struct pipe_screen *screen, voi
|
|||
rctx->family = r600_get_family(rctx->radeon);
|
||||
|
||||
r600_init_blit_functions2(rctx);
|
||||
r600_init_query_functions2(rctx);
|
||||
r600_init_query_functions(rctx);
|
||||
r600_init_context_resource_functions2(rctx);
|
||||
|
||||
switch (r600_get_family(rctx->radeon)) {
|
||||
|
|
@ -210,7 +210,6 @@ static struct pipe_context *r600_create_context2(struct pipe_screen *screen, voi
|
|||
return NULL;
|
||||
}
|
||||
|
||||
LIST_INITHEAD(&rctx->query_list);
|
||||
rctx->custom_dsa_flush = r600_create_db_flush_dsa(rctx);
|
||||
|
||||
r600_blit_uncompress_depth_ptr = r600_blit_uncompress_depth2;
|
||||
|
|
@ -423,7 +422,7 @@ static void r600_destroy_screen(struct pipe_screen* pscreen)
|
|||
}
|
||||
|
||||
|
||||
struct pipe_screen *r600_screen_create2(struct radeon *radeon)
|
||||
struct pipe_screen *r600_screen_create(struct radeon *radeon)
|
||||
{
|
||||
struct r600_screen *rscreen;
|
||||
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@
|
|||
#include <pipe/p_context.h>
|
||||
#include <util/u_math.h>
|
||||
#include "r600.h"
|
||||
#include "r600_public.h"
|
||||
#include "r600_shader.h"
|
||||
#include "r600_resource.h"
|
||||
|
||||
|
|
@ -91,14 +92,12 @@ struct r600_pipe_shader {
|
|||
struct r600_vertex_element vertex_elements;
|
||||
};
|
||||
|
||||
|
||||
struct r600_pipe_context {
|
||||
struct pipe_context context;
|
||||
struct blitter_context *blitter;
|
||||
struct pipe_framebuffer_state *pframebuffer;
|
||||
unsigned family;
|
||||
void *custom_dsa_flush;
|
||||
struct list_head query_list; /* fake member for depth remove once merged */
|
||||
struct r600_screen *screen;
|
||||
struct radeon *radeon;
|
||||
struct r600_pipe_state *states[R600_PIPE_NSTATES];
|
||||
|
|
@ -146,20 +145,6 @@ struct r600_drawl {
|
|||
struct pipe_resource *index_buffer;
|
||||
};
|
||||
|
||||
uint32_t r600_translate_texformat(enum pipe_format format,
|
||||
const unsigned char *swizzle_view,
|
||||
uint32_t *word4_p, uint32_t *yuv_format_p);
|
||||
|
||||
/* r600_state2.c */
|
||||
int r600_pipe_shader_update2(struct pipe_context *ctx, struct r600_pipe_shader *shader);
|
||||
int r600_pipe_shader_create2(struct pipe_context *ctx, struct r600_pipe_shader *shader, const struct tgsi_token *tokens);
|
||||
void r600_translate_index_buffer2(struct r600_pipe_context *r600,
|
||||
struct pipe_resource **index_buffer,
|
||||
unsigned *index_size,
|
||||
unsigned *start, unsigned count);
|
||||
int r600_find_vs_semantic_index2(struct r600_shader *vs,
|
||||
struct r600_shader *ps, int id);
|
||||
|
||||
/* evergreen_state.c */
|
||||
void evergreen_init_state_functions2(struct r600_pipe_context *rctx);
|
||||
void evergreen_init_config2(struct r600_pipe_context *rctx);
|
||||
|
|
@ -167,12 +152,6 @@ void evergreen_draw(struct pipe_context *ctx, const struct pipe_draw_info *info)
|
|||
void evergreen_pipe_shader_ps(struct pipe_context *ctx, struct r600_pipe_shader *shader);
|
||||
void evergreen_pipe_shader_vs(struct pipe_context *ctx, struct r600_pipe_shader *shader);
|
||||
|
||||
static INLINE u32 S_FIXED(float value, u32 frac_bits)
|
||||
{
|
||||
return value * (1 << frac_bits);
|
||||
}
|
||||
#define ALIGN_DIVUP(x, y) (((x) + (y) - 1) / (y))
|
||||
|
||||
/* r600_blit.c */
|
||||
void r600_init_blit_functions2(struct r600_pipe_context *rctx);
|
||||
int r600_blit_uncompress_depth2(struct pipe_context *ctx, struct r600_resource_texture *texture);
|
||||
|
|
@ -192,20 +171,42 @@ int r600_upload_index_buffer(struct r600_pipe_context *rctx, struct r600_drawl *
|
|||
int r600_upload_user_buffers(struct r600_pipe_context *rctx);
|
||||
|
||||
/* r600_query.c */
|
||||
void r600_init_query_functions2(struct r600_pipe_context *rctx);
|
||||
void r600_init_query_functions(struct r600_pipe_context *rctx);
|
||||
|
||||
/* r600_resource.c */
|
||||
void r600_init_context_resource_functions2(struct r600_pipe_context *r600);
|
||||
|
||||
/* r600_shader.c */
|
||||
int r600_pipe_shader_update2(struct pipe_context *ctx, struct r600_pipe_shader *shader);
|
||||
int r600_pipe_shader_create2(struct pipe_context *ctx, struct r600_pipe_shader *shader, const struct tgsi_token *tokens);
|
||||
int r600_find_vs_semantic_index2(struct r600_shader *vs,
|
||||
struct r600_shader *ps, int id);
|
||||
|
||||
/* r600_state.c */
|
||||
void r600_init_state_functions2(struct r600_pipe_context *rctx);
|
||||
void r600_draw_vbo2(struct pipe_context *ctx, const struct pipe_draw_info *info);
|
||||
void r600_init_config2(struct r600_pipe_context *rctx);
|
||||
void r600_translate_index_buffer(struct r600_pipe_context *r600,
|
||||
struct pipe_resource **index_buffer,
|
||||
unsigned *index_size,
|
||||
unsigned *start, unsigned count);
|
||||
|
||||
/* r600_helper.h */
|
||||
int r600_conv_pipe_prim(unsigned pprim, unsigned *prim);
|
||||
|
||||
/* r600_texture.c */
|
||||
void r600_init_screen_texture_functions(struct pipe_screen *screen);
|
||||
uint32_t r600_translate_texformat(enum pipe_format format,
|
||||
const unsigned char *swizzle_view,
|
||||
uint32_t *word4_p, uint32_t *yuv_format_p);
|
||||
|
||||
/*
|
||||
* common helpers
|
||||
*/
|
||||
static INLINE u32 S_FIXED(float value, u32 frac_bits)
|
||||
{
|
||||
return value * (1 << frac_bits);
|
||||
}
|
||||
#define ALIGN_DIVUP(x, y) (((x) + (y) - 1) / (y))
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1,9 +1,28 @@
|
|||
|
||||
/*
|
||||
* Copyright 2010 Jerome Glisse <glisse@freedesktop.org>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* on the rights to use, copy, modify, merge, publish, distribute, sub
|
||||
* license, and/or sell copies of the Software, and to permit persons to whom
|
||||
* the Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the next
|
||||
* paragraph) shall be included in all copies or substantial portions of the
|
||||
* Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
|
||||
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
* USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
#ifndef R600_PUBLIC_H
|
||||
#define R600_PUBLIC_H
|
||||
|
||||
struct radeon;
|
||||
|
||||
struct pipe_screen* r600_screen_create(struct radeon *rw);
|
||||
struct pipe_screen *r600_screen_create(struct radeon *radeon);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -20,10 +20,6 @@
|
|||
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
* USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/* TODO:
|
||||
* - fix mask for depth control & cull for query
|
||||
*/
|
||||
#include "r600_pipe.h"
|
||||
|
||||
static struct pipe_query *r600_create_query(struct pipe_context *ctx, unsigned query_type)
|
||||
|
|
@ -70,7 +66,7 @@ static boolean r600_get_query_result(struct pipe_context *ctx,
|
|||
return r600_context_query_result(&rctx->ctx, (struct r600_query *)query, wait, vresult);
|
||||
}
|
||||
|
||||
void r600_init_query_functions2(struct r600_pipe_context *rctx)
|
||||
void r600_init_query_functions(struct r600_pipe_context *rctx)
|
||||
{
|
||||
rctx->context.create_query = r600_create_query;
|
||||
rctx->context.destroy_query = r600_destroy_query;
|
||||
|
|
|
|||
|
|
@ -1349,34 +1349,6 @@ static int tgsi_rsq(struct r600_shader_ctx *ctx)
|
|||
return tgsi_helper_tempx_replicate(ctx);
|
||||
}
|
||||
|
||||
static int tgsi_trans(struct r600_shader_ctx *ctx)
|
||||
{
|
||||
struct tgsi_full_instruction *inst = &ctx->parse.FullToken.FullInstruction;
|
||||
struct r600_bc_alu alu;
|
||||
int i, j, r;
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
memset(&alu, 0, sizeof(struct r600_bc_alu));
|
||||
if (inst->Dst[0].Register.WriteMask & (1 << i)) {
|
||||
alu.inst = ctx->inst_info->r600_opcode;
|
||||
for (j = 0; j < inst->Instruction.NumSrcRegs; j++) {
|
||||
r = tgsi_src(ctx, &inst->Src[j], &alu.src[j]);
|
||||
if (r)
|
||||
return r;
|
||||
alu.src[j].chan = tgsi_chan(&inst->Src[j], i);
|
||||
}
|
||||
r = tgsi_dst(ctx, &inst->Dst[0], i, &alu.dst);
|
||||
if (r)
|
||||
return r;
|
||||
alu.last = 1;
|
||||
r = r600_bc_add_alu(ctx->bc, &alu);
|
||||
if (r)
|
||||
return r;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int tgsi_helper_tempx_replicate(struct r600_shader_ctx *ctx)
|
||||
{
|
||||
struct tgsi_full_instruction *inst = &ctx->parse.FullToken.FullInstruction;
|
||||
|
|
|
|||
|
|
@ -32,10 +32,7 @@
|
|||
#include <tgsi/tgsi_scan.h>
|
||||
#include <tgsi/tgsi_parse.h>
|
||||
#include <tgsi/tgsi_util.h>
|
||||
#include <util/u_blitter.h>
|
||||
#include <util/u_double_list.h>
|
||||
#include <util/u_transfer.h>
|
||||
#include <util/u_surface.h>
|
||||
#include <util/u_pack_color.h>
|
||||
#include <util/u_memory.h>
|
||||
#include <util/u_inlines.h>
|
||||
|
|
@ -184,7 +181,7 @@ static void r600_draw_common(struct r600_drawl *draw)
|
|||
r600_context_draw(&rctx->ctx, &rdraw);
|
||||
}
|
||||
|
||||
void r600_translate_index_buffer2(struct r600_pipe_context *r600,
|
||||
void r600_translate_index_buffer(struct r600_pipe_context *r600,
|
||||
struct pipe_resource **index_buffer,
|
||||
unsigned *index_size,
|
||||
unsigned *start, unsigned count)
|
||||
|
|
@ -229,7 +226,7 @@ void r600_draw_vbo2(struct pipe_context *ctx, const struct pipe_draw_info *info)
|
|||
draw.max_index = info->max_index;
|
||||
draw.index_bias = info->index_bias;
|
||||
|
||||
r600_translate_index_buffer2(rctx, &rctx->index_buffer.buffer,
|
||||
r600_translate_index_buffer(rctx, &rctx->index_buffer.buffer,
|
||||
&rctx->index_buffer.index_size,
|
||||
&draw.start,
|
||||
info->count);
|
||||
|
|
@ -251,145 +248,6 @@ void r600_draw_vbo2(struct pipe_context *ctx, const struct pipe_draw_info *info)
|
|||
pipe_resource_reference(&draw.index_buffer, NULL);
|
||||
}
|
||||
|
||||
|
||||
static void r600_blitter_save_states(struct pipe_context *ctx)
|
||||
{
|
||||
struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
|
||||
|
||||
util_blitter_save_blend(rctx->blitter, rctx->states[R600_PIPE_STATE_BLEND]);
|
||||
util_blitter_save_depth_stencil_alpha(rctx->blitter, rctx->states[R600_PIPE_STATE_DSA]);
|
||||
if (rctx->states[R600_PIPE_STATE_STENCIL_REF]) {
|
||||
util_blitter_save_stencil_ref(rctx->blitter, &rctx->stencil_ref);
|
||||
}
|
||||
util_blitter_save_rasterizer(rctx->blitter, rctx->states[R600_PIPE_STATE_RASTERIZER]);
|
||||
util_blitter_save_fragment_shader(rctx->blitter, rctx->ps_shader);
|
||||
util_blitter_save_vertex_shader(rctx->blitter, rctx->vs_shader);
|
||||
util_blitter_save_vertex_elements(rctx->blitter, rctx->vertex_elements);
|
||||
if (rctx->states[R600_PIPE_STATE_VIEWPORT]) {
|
||||
util_blitter_save_viewport(rctx->blitter, &rctx->viewport);
|
||||
}
|
||||
if (rctx->states[R600_PIPE_STATE_CLIP]) {
|
||||
util_blitter_save_clip(rctx->blitter, &rctx->clip);
|
||||
}
|
||||
util_blitter_save_vertex_buffers(rctx->blitter, rctx->nvertex_buffer, rctx->vertex_buffer);
|
||||
|
||||
rctx->vertex_elements = NULL;
|
||||
|
||||
/* TODO queries */
|
||||
}
|
||||
|
||||
int r600_blit_uncompress_depth2(struct pipe_context *ctx, struct r600_resource_texture *texture)
|
||||
{
|
||||
struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
|
||||
struct pipe_framebuffer_state fb = *rctx->pframebuffer;
|
||||
struct pipe_surface *zsurf, *cbsurf;
|
||||
int level = 0;
|
||||
float depth = 1.0f;
|
||||
|
||||
r600_context_queries_suspend(&rctx->ctx);
|
||||
for (int i = 0; i < fb.nr_cbufs; i++) {
|
||||
fb.cbufs[i] = NULL;
|
||||
pipe_surface_reference(&fb.cbufs[i], rctx->pframebuffer->cbufs[i]);
|
||||
}
|
||||
fb.zsbuf = NULL;
|
||||
pipe_surface_reference(&fb.zsbuf, rctx->pframebuffer->zsbuf);
|
||||
|
||||
zsurf = ctx->screen->get_tex_surface(ctx->screen, &texture->resource.base.b, 0, level, 0,
|
||||
PIPE_BIND_DEPTH_STENCIL);
|
||||
|
||||
cbsurf = ctx->screen->get_tex_surface(ctx->screen, texture->flushed_depth_texture, 0, level, 0,
|
||||
PIPE_BIND_RENDER_TARGET);
|
||||
|
||||
r600_blitter_save_states(ctx);
|
||||
util_blitter_save_framebuffer(rctx->blitter, &fb);
|
||||
|
||||
if (rctx->family == CHIP_RV610 || rctx->family == CHIP_RV630 ||
|
||||
rctx->family == CHIP_RV620 || rctx->family == CHIP_RV635)
|
||||
depth = 0.0f;
|
||||
|
||||
util_blitter_custom_depth_stencil(rctx->blitter, zsurf, cbsurf, rctx->custom_dsa_flush, depth);
|
||||
|
||||
pipe_surface_reference(&zsurf, NULL);
|
||||
pipe_surface_reference(&cbsurf, NULL);
|
||||
for (int i = 0; i < fb.nr_cbufs; i++) {
|
||||
pipe_surface_reference(&fb.cbufs[i], NULL);
|
||||
}
|
||||
pipe_surface_reference(&fb.zsbuf, NULL);
|
||||
r600_context_queries_resume(&rctx->ctx);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void r600_clear(struct pipe_context *ctx, unsigned buffers,
|
||||
const float *rgba, double depth, unsigned stencil)
|
||||
{
|
||||
struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
|
||||
struct pipe_framebuffer_state *fb = &rctx->framebuffer;
|
||||
|
||||
r600_context_queries_suspend(&rctx->ctx);
|
||||
r600_blitter_save_states(ctx);
|
||||
util_blitter_clear(rctx->blitter, fb->width, fb->height,
|
||||
fb->nr_cbufs, buffers, rgba, depth,
|
||||
stencil);
|
||||
r600_context_queries_resume(&rctx->ctx);
|
||||
}
|
||||
|
||||
static void r600_clear_render_target(struct pipe_context *ctx,
|
||||
struct pipe_surface *dst,
|
||||
const float *rgba,
|
||||
unsigned dstx, unsigned dsty,
|
||||
unsigned width, unsigned height)
|
||||
{
|
||||
struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
|
||||
struct pipe_framebuffer_state *fb = &rctx->framebuffer;
|
||||
|
||||
r600_context_queries_suspend(&rctx->ctx);
|
||||
util_blitter_save_framebuffer(rctx->blitter, fb);
|
||||
util_blitter_clear_render_target(rctx->blitter, dst, rgba,
|
||||
dstx, dsty, width, height);
|
||||
r600_context_queries_resume(&rctx->ctx);
|
||||
}
|
||||
|
||||
static void r600_clear_depth_stencil(struct pipe_context *ctx,
|
||||
struct pipe_surface *dst,
|
||||
unsigned clear_flags,
|
||||
double depth,
|
||||
unsigned stencil,
|
||||
unsigned dstx, unsigned dsty,
|
||||
unsigned width, unsigned height)
|
||||
{
|
||||
struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
|
||||
struct pipe_framebuffer_state *fb = &rctx->framebuffer;
|
||||
|
||||
r600_context_queries_suspend(&rctx->ctx);
|
||||
util_blitter_save_framebuffer(rctx->blitter, fb);
|
||||
util_blitter_clear_depth_stencil(rctx->blitter, dst, clear_flags, depth, stencil,
|
||||
dstx, dsty, width, height);
|
||||
r600_context_queries_resume(&rctx->ctx);
|
||||
}
|
||||
|
||||
|
||||
static void r600_resource_copy_region(struct pipe_context *ctx,
|
||||
struct pipe_resource *dst,
|
||||
struct pipe_subresource subdst,
|
||||
unsigned dstx, unsigned dsty, unsigned dstz,
|
||||
struct pipe_resource *src,
|
||||
struct pipe_subresource subsrc,
|
||||
unsigned srcx, unsigned srcy, unsigned srcz,
|
||||
unsigned width, unsigned height)
|
||||
{
|
||||
util_resource_copy_region(ctx, dst, subdst, dstx, dsty, dstz,
|
||||
src, subsrc, srcx, srcy, srcz, width, height);
|
||||
}
|
||||
|
||||
void r600_init_blit_functions2(struct r600_pipe_context *rctx)
|
||||
{
|
||||
rctx->context.clear = r600_clear;
|
||||
rctx->context.clear_render_target = r600_clear_render_target;
|
||||
rctx->context.clear_depth_stencil = r600_clear_depth_stencil;
|
||||
rctx->context.resource_copy_region = r600_resource_copy_region;
|
||||
}
|
||||
|
||||
static void r600_set_blend_color(struct pipe_context *ctx,
|
||||
const struct pipe_blend_color *state)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,33 +1,9 @@
|
|||
|
||||
#include "state_tracker/drm_driver.h"
|
||||
#include "target-helpers/inline_debug_helper.h"
|
||||
#include "r600/drm/r600_drm_public.h"
|
||||
#include "r600/r600_public.h"
|
||||
|
||||
#if 0
|
||||
static struct pipe_screen *
|
||||
create_screen(int fd)
|
||||
{
|
||||
struct radeon *rw;
|
||||
struct pipe_screen *screen;
|
||||
|
||||
rw = r600_drm_winsys_create(fd);
|
||||
if (!rw)
|
||||
return NULL;
|
||||
|
||||
screen = r600_screen_create(rw);
|
||||
if (!screen)
|
||||
return NULL;
|
||||
|
||||
screen = debug_screen_wrap(screen);
|
||||
|
||||
return screen;
|
||||
}
|
||||
#else
|
||||
struct radeon *r600_new(int fd, unsigned device);
|
||||
struct pipe_screen *r600_screen_create2(struct radeon *radeon);
|
||||
static struct pipe_screen *
|
||||
create_screen(int fd)
|
||||
static struct pipe_screen *create_screen(int fd)
|
||||
{
|
||||
struct radeon *radeon;
|
||||
struct pipe_screen *screen;
|
||||
|
|
@ -36,7 +12,7 @@ create_screen(int fd)
|
|||
if (!radeon)
|
||||
return NULL;
|
||||
|
||||
screen = r600_screen_create2(radeon);
|
||||
screen = r600_screen_create(radeon);
|
||||
if (!screen)
|
||||
return NULL;
|
||||
|
||||
|
|
@ -44,6 +20,5 @@ create_screen(int fd)
|
|||
|
||||
return screen;
|
||||
}
|
||||
#endif
|
||||
|
||||
DRM_DRIVER_DESCRIPTOR("r600", "radeon", create_screen)
|
||||
|
|
|
|||
|
|
@ -6,14 +6,14 @@ LIBNAME = r600winsys
|
|||
|
||||
C_SOURCES = \
|
||||
bof.c \
|
||||
r600_state2.c \
|
||||
evergreen_state.c \
|
||||
r600.c \
|
||||
r600_drm.c \
|
||||
evergreen_hw_context.c \
|
||||
radeon_bo.c \
|
||||
radeon_bo_pb.c \
|
||||
radeon_pciid.c \
|
||||
radeon_ws_bo.c \
|
||||
radeon_bo_pb.c
|
||||
r600.c \
|
||||
r600_drm.c \
|
||||
r600_hw_context.c
|
||||
|
||||
LIBRARY_INCLUDES = -I$(TOP)/src/gallium/drivers/r600 \
|
||||
$(shell pkg-config libdrm --cflags-only-I)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,28 @@
|
|||
|
||||
/*
|
||||
* Copyright 2010 Jerome Glisse <glisse@freedesktop.org>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* on the rights to use, copy, modify, merge, publish, distribute, sub
|
||||
* license, and/or sell copies of the Software, and to permit persons to whom
|
||||
* the Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the next
|
||||
* paragraph) shall be included in all copies or substantial portions of the
|
||||
* Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
|
||||
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
* USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* Authors:
|
||||
* Jerome Glisse
|
||||
*/
|
||||
#ifndef R600_DRM_PUBLIC_H
|
||||
#define R600_DRM_PUBLIC_H
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue