All pastes #1243666 Raw Edit

Untitled

public diff v1 · immutable
#1243666 ·published 2008-11-03 01:46 UTC
rendered paste body
diff --git a/src/mesa/drivers/dri/r300/r300_cmdbuf.c b/src/mesa/drivers/dri/r300/r300_cmdbuf.cindex c9e1dfe..1b33061 100644--- a/src/mesa/drivers/dri/r300/r300_cmdbuf.c+++ b/src/mesa/drivers/dri/r300/r300_cmdbuf.c@@ -504,6 +504,8 @@ void r300InitCmdBuf(r300ContextPtr r300) 	r300->hw.zb_hiz_offset.cmd[0] = cmdpacket0(R300_ZB_HIZ_OFFSET, 1); 	ALLOC_STATE(zb_hiz_pitch, always, 2, 0); 	r300->hw.zb_hiz_pitch.cmd[0] = cmdpacket0(R300_ZB_HIZ_PITCH, 1);+	ALLOC_STATE(zpass_data, always, 2, 0);+	r300->hw.zpass_data.cmd[0] = cmdpacket0(R300_ZB_ZPASS_DATA, 0);  	/* VPU only on TCL */ 	if (has_tcl) {diff --git a/src/mesa/drivers/dri/r300/r300_context.c b/src/mesa/drivers/dri/r300/r300_context.cindex 3743627..ddaf7bf 100644--- a/src/mesa/drivers/dri/r300/r300_context.c+++ b/src/mesa/drivers/dri/r300/r300_context.c@@ -79,6 +79,7 @@ int hw_tcl_on = 1;  #define need_GL_EXT_stencil_two_side #define need_GL_ARB_multisample+#define need_GL_ARB_occlusion_query #define need_GL_ARB_point_parameters #define need_GL_ARB_texture_compression #define need_GL_ARB_vertex_buffer_object@@ -99,6 +100,7 @@ const struct dri_extension card_extensions[] = {   {"GL_ARB_fragment_program",		NULL},   {"GL_ARB_multisample",		GL_ARB_multisample_functions},   {"GL_ARB_multitexture",		NULL},+  {"GL_ARB_occlusion_query",		GL_ARB_occlusion_query_functions},   {"GL_ARB_point_parameters",		GL_ARB_point_parameters_functions},   {"GL_ARB_shadow",			NULL},   {"GL_ARB_shadow_ambient",		NULL},diff --git a/src/mesa/drivers/dri/r300/r300_context.h b/src/mesa/drivers/dri/r300/r300_context.hindex c15e9fa..36cfbd9 100644--- a/src/mesa/drivers/dri/r300/r300_context.h+++ b/src/mesa/drivers/dri/r300/r300_context.h@@ -528,6 +528,7 @@ struct r300_hw_state { 	struct r300_state_atom unk4F30;	/* (4F30) */ 	struct r300_state_atom zb_hiz_offset;	/* (4F44) */ 	struct r300_state_atom zb_hiz_pitch;	/* (4F54) */+	struct r300_state_atom zpass_data;	/* (4F58) */  	struct r300_state_atom vpi;	/* vp instructions */ 	struct r300_state_atom vpp;	/* vp parameters */diff --git a/src/mesa/drivers/dri/r300/r300_state.c b/src/mesa/drivers/dri/r300/r300_state.cindex 6a5c363..17c9871 100644--- a/src/mesa/drivers/dri/r300/r300_state.c+++ b/src/mesa/drivers/dri/r300/r300_state.c@@ -65,6 +65,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  #include "drirenderbuffer.h" +#include <unistd.h>		/* for usleep() */+ extern int future_hw_tcl_on; extern void _tnl_UpdateFixedFunctionProgram(GLcontext * ctx); @@ -1062,6 +1064,65 @@ static void r300StencilOpSeparate(GLcontext * ctx, GLenum face, }  /* =============================================================+ * Occlusion Queries+ */++static void r300BeginQuery(GLcontext * ctx, struct gl_query_object * query)+{+	r300ContextPtr rmesa = R300_CONTEXT(ctx);++	R300_STATECHANGE(rmesa, zpass_data);+}++#define RADEON_SETPARAM_END_QUERY          7++static void r300EndQuery(GLcontext * ctx, struct gl_query_object * query)+{+	r300ContextPtr rmesa = R300_CONTEXT(ctx);++	drm_radeon_setparam_t sp;++	sp.param = RADEON_SETPARAM_END_QUERY;+	sp.value = query->Id % 60;++	LOCK_HARDWARE(&rmesa->radeon);+	drmCommandWriteRead(rmesa->radeon.dri.fd, DRM_RADEON_SETPARAM, &sp,+			    sizeof(drm_radeon_setparam_t));+	UNLOCK_HARDWARE(&rmesa->radeon);+}++#define RADEON_PARAM_NUM_SAMPLES           16++static void r300CheckQuery(GLcontext * ctx, struct gl_query_object * query)+{+	r300ContextPtr rmesa = R300_CONTEXT(ctx);++	drm_radeon_getparam_t gp;+	uint32_t value = query->Id % 60;++	gp.param = RADEON_PARAM_NUM_SAMPLES;+	gp.value = (void*)&value;++	LOCK_HARDWARE(&rmesa->radeon);+	drmCommandWriteRead(rmesa->radeon.dri.fd, DRM_RADEON_GETPARAM, &gp,+			    sizeof(drm_radeon_getparam_t));+	UNLOCK_HARDWARE(&rmesa->radeon);++	if (value != 0xFFFFFFFF) {+		query->Result = value;+		query->Ready = GL_TRUE;+	}+}++static void r300WaitQuery(GLcontext * ctx, struct gl_query_object * query)+{+	while (!query->Ready) {+		r300CheckQuery(ctx, query);+		usleep(1);+	}+}++/* =============================================================  * Window position and viewport transformation  */ @@ -2814,6 +2875,12 @@ void r300InitStateFuncs(struct dd_function_table *functions) 	functions->StencilMaskSeparate = r300StencilMaskSeparate; 	functions->StencilOpSeparate = r300StencilOpSeparate; +	/* ARB_occlusion_query */+	functions->BeginQuery = r300BeginQuery;+	functions->EndQuery = r300EndQuery;+	functions->CheckQuery = r300CheckQuery;+	//functions->WaitQuery = r300WaitQuery;+ 	/* Viewport related */ 	functions->Viewport = r300Viewport; 	functions->DepthRange = r300DepthRange;