mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-06-04 10:58:15 +02:00
radeon: port over arrays code even though not in use yet
This commit is contained in:
parent
36d3f3e74a
commit
e223b7c312
3 changed files with 52 additions and 238 deletions
|
|
@ -1290,7 +1290,7 @@ static void radeonEmitVec4(uint32_t *out, GLvoid * data, int stride, int count)
|
|||
}
|
||||
}
|
||||
|
||||
static void radeonEmitVec8(uint32_t *out, GLvoid * data, int stride, int count)
|
||||
void radeonEmitVec8(uint32_t *out, GLvoid * data, int stride, int count)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
|
@ -1309,7 +1309,7 @@ static void radeonEmitVec8(uint32_t *out, GLvoid * data, int stride, int count)
|
|||
}
|
||||
}
|
||||
|
||||
static void radeonEmitVec12(uint32_t *out, GLvoid * data, int stride, int count)
|
||||
void radeonEmitVec12(uint32_t *out, GLvoid * data, int stride, int count)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
|
|
|||
|
|
@ -31,6 +31,9 @@ GLboolean radeonMakeCurrent(__DRIcontextPrivate * driContextPriv,
|
|||
__DRIdrawablePrivate * driDrawPriv,
|
||||
__DRIdrawablePrivate * driReadPriv);
|
||||
|
||||
void radeonEmitVec8(uint32_t *out, GLvoid * data, int stride, int count);
|
||||
void radeonEmitVec12(uint32_t *out, GLvoid * data, int stride, int count);
|
||||
|
||||
void rcommon_emit_vector(GLcontext * ctx, struct radeon_aos *aos,
|
||||
GLvoid * data, int size, int stride, int count);
|
||||
void radeon_print_state_atom( struct radeon_state_atom *state );
|
||||
|
|
|
|||
|
|
@ -49,26 +49,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
#include "radeon_maos.h"
|
||||
#include "radeon_tcl.h"
|
||||
|
||||
#if defined(USE_X86_ASM)
|
||||
#define COPY_DWORDS( dst, src, nr ) \
|
||||
do { \
|
||||
int __tmp; \
|
||||
__asm__ __volatile__( "rep ; movsl" \
|
||||
: "=%c" (__tmp), "=D" (dst), "=S" (__tmp) \
|
||||
: "0" (nr), \
|
||||
"D" ((long)dst), \
|
||||
"S" ((long)src) ); \
|
||||
} while (0)
|
||||
#else
|
||||
#define COPY_DWORDS( dst, src, nr ) \
|
||||
do { \
|
||||
int j; \
|
||||
for ( j = 0 ; j < nr ; j++ ) \
|
||||
dst[j] = ((int *)src)[j]; \
|
||||
dst += nr; \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
static void emit_vecfog( GLcontext *ctx,
|
||||
struct radeon_dma_region *rvb,
|
||||
char *data,
|
||||
|
|
@ -87,22 +67,22 @@ static void emit_vecfog( GLcontext *ctx,
|
|||
assert (!rvb->buf);
|
||||
|
||||
if (stride == 0) {
|
||||
radeonAllocDmaRegion( rmesa, rvb, 4, 4 );
|
||||
radeonAllocDmaRegion( rmesa, &aos->bo, &aos->offset, size * 4, 32 );
|
||||
count = 1;
|
||||
rvb->aos_start = GET_START(rvb);
|
||||
rvb->aos_stride = 0;
|
||||
rvb->aos_size = 1;
|
||||
aos->stride = 0;
|
||||
}
|
||||
else {
|
||||
radeonAllocDmaRegion( rmesa, rvb, count * 4, 4 ); /* alignment? */
|
||||
rvb->aos_start = GET_START(rvb);
|
||||
rvb->aos_stride = 1;
|
||||
rvb->aos_size = 1;
|
||||
radeonAllocDmaRegion(rmesa, &aos->bo, &aos->offset, size * 4, 32);
|
||||
aos->stride = size;
|
||||
}
|
||||
|
||||
aos->components = size;
|
||||
aos->count = count;
|
||||
|
||||
|
||||
/* Emit the data
|
||||
*/
|
||||
out = (GLfloat *)(rvb->address + rvb->start);
|
||||
out = (uint32_t*)((char*)aos->bo->ptr + aos->offset);
|
||||
for (i = 0; i < count; i++) {
|
||||
out[0] = radeonComputeFogBlendFactor( ctx, *(GLfloat *)data );
|
||||
out++;
|
||||
|
|
@ -110,169 +90,9 @@ static void emit_vecfog( GLcontext *ctx,
|
|||
}
|
||||
}
|
||||
|
||||
static void emit_vec4( GLcontext *ctx,
|
||||
struct radeon_dma_region *rvb,
|
||||
char *data,
|
||||
int stride,
|
||||
int count )
|
||||
static void emit_s0_vec(uint32_t *out, GLvoid *data, int stride, int count)
|
||||
{
|
||||
int i;
|
||||
int *out = (int *)(rvb->address + rvb->start);
|
||||
|
||||
if (RADEON_DEBUG & DEBUG_VERTS)
|
||||
fprintf(stderr, "%s count %d stride %d\n",
|
||||
__FUNCTION__, count, stride);
|
||||
|
||||
if (stride == 4)
|
||||
COPY_DWORDS( out, data, count );
|
||||
else
|
||||
for (i = 0; i < count; i++) {
|
||||
out[0] = *(int *)data;
|
||||
out++;
|
||||
data += stride;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void emit_vec8( GLcontext *ctx,
|
||||
struct radeon_dma_region *rvb,
|
||||
char *data,
|
||||
int stride,
|
||||
int count )
|
||||
{
|
||||
int i;
|
||||
int *out = (int *)(rvb->address + rvb->start);
|
||||
|
||||
if (RADEON_DEBUG & DEBUG_VERTS)
|
||||
fprintf(stderr, "%s count %d stride %d\n",
|
||||
__FUNCTION__, count, stride);
|
||||
|
||||
if (stride == 8)
|
||||
COPY_DWORDS( out, data, count*2 );
|
||||
else
|
||||
for (i = 0; i < count; i++) {
|
||||
out[0] = *(int *)data;
|
||||
out[1] = *(int *)(data+4);
|
||||
out += 2;
|
||||
data += stride;
|
||||
}
|
||||
}
|
||||
|
||||
static void emit_vec12( GLcontext *ctx,
|
||||
struct radeon_dma_region *rvb,
|
||||
char *data,
|
||||
int stride,
|
||||
int count )
|
||||
{
|
||||
int i;
|
||||
int *out = (int *)(rvb->address + rvb->start);
|
||||
|
||||
if (RADEON_DEBUG & DEBUG_VERTS)
|
||||
fprintf(stderr, "%s count %d stride %d out %p data %p\n",
|
||||
__FUNCTION__, count, stride, (void *)out, (void *)data);
|
||||
|
||||
if (stride == 12)
|
||||
COPY_DWORDS( out, data, count*3 );
|
||||
else
|
||||
for (i = 0; i < count; i++) {
|
||||
out[0] = *(int *)data;
|
||||
out[1] = *(int *)(data+4);
|
||||
out[2] = *(int *)(data+8);
|
||||
out += 3;
|
||||
data += stride;
|
||||
}
|
||||
}
|
||||
|
||||
static void emit_vec16( GLcontext *ctx,
|
||||
struct radeon_dma_region *rvb,
|
||||
char *data,
|
||||
int stride,
|
||||
int count )
|
||||
{
|
||||
int i;
|
||||
int *out = (int *)(rvb->address + rvb->start);
|
||||
|
||||
if (RADEON_DEBUG & DEBUG_VERTS)
|
||||
fprintf(stderr, "%s count %d stride %d\n",
|
||||
__FUNCTION__, count, stride);
|
||||
|
||||
if (stride == 16)
|
||||
COPY_DWORDS( out, data, count*4 );
|
||||
else
|
||||
for (i = 0; i < count; i++) {
|
||||
out[0] = *(int *)data;
|
||||
out[1] = *(int *)(data+4);
|
||||
out[2] = *(int *)(data+8);
|
||||
out[3] = *(int *)(data+12);
|
||||
out += 4;
|
||||
data += stride;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void emit_vector( GLcontext *ctx,
|
||||
struct radeon_dma_region *rvb,
|
||||
char *data,
|
||||
int size,
|
||||
int stride,
|
||||
int count )
|
||||
{
|
||||
radeonContextPtr rmesa = RADEON_CONTEXT(ctx);
|
||||
|
||||
if (RADEON_DEBUG & DEBUG_VERTS)
|
||||
fprintf(stderr, "%s count %d size %d stride %d\n",
|
||||
__FUNCTION__, count, size, stride);
|
||||
|
||||
assert (!rvb->buf);
|
||||
|
||||
if (stride == 0) {
|
||||
radeonAllocDmaRegion( rmesa, rvb, size * 4, 4 );
|
||||
count = 1;
|
||||
rvb->aos_start = GET_START(rvb);
|
||||
rvb->aos_stride = 0;
|
||||
rvb->aos_size = size;
|
||||
}
|
||||
else {
|
||||
radeonAllocDmaRegion( rmesa, rvb, size * count * 4, 4 ); /* alignment? */
|
||||
rvb->aos_start = GET_START(rvb);
|
||||
rvb->aos_stride = size;
|
||||
rvb->aos_size = size;
|
||||
}
|
||||
|
||||
/* Emit the data
|
||||
*/
|
||||
switch (size) {
|
||||
case 1:
|
||||
emit_vec4( ctx, rvb, data, stride, count );
|
||||
break;
|
||||
case 2:
|
||||
emit_vec8( ctx, rvb, data, stride, count );
|
||||
break;
|
||||
case 3:
|
||||
emit_vec12( ctx, rvb, data, stride, count );
|
||||
break;
|
||||
case 4:
|
||||
emit_vec16( ctx, rvb, data, stride, count );
|
||||
break;
|
||||
default:
|
||||
assert(0);
|
||||
exit(1);
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void emit_s0_vec( GLcontext *ctx,
|
||||
struct radeon_dma_region *rvb,
|
||||
char *data,
|
||||
int stride,
|
||||
int count )
|
||||
{
|
||||
int i;
|
||||
int *out = (int *)(rvb->address + rvb->start);
|
||||
|
||||
if (RADEON_DEBUG & DEBUG_VERTS)
|
||||
fprintf(stderr, "%s count %d stride %d\n",
|
||||
__FUNCTION__, count, stride);
|
||||
|
|
@ -285,14 +105,9 @@ static void emit_s0_vec( GLcontext *ctx,
|
|||
}
|
||||
}
|
||||
|
||||
static void emit_stq_vec( GLcontext *ctx,
|
||||
struct radeon_dma_region *rvb,
|
||||
char *data,
|
||||
int stride,
|
||||
int count )
|
||||
static void emit_stq_vec(uint32_t *out, GLvoid *data, int stride, int count)
|
||||
{
|
||||
int i;
|
||||
int *out = (int *)(rvb->address + rvb->start);
|
||||
|
||||
if (RADEON_DEBUG & DEBUG_VERTS)
|
||||
fprintf(stderr, "%s count %d stride %d\n",
|
||||
|
|
@ -311,8 +126,8 @@ static void emit_stq_vec( GLcontext *ctx,
|
|||
|
||||
|
||||
static void emit_tex_vector( GLcontext *ctx,
|
||||
struct radeon_dma_region *rvb,
|
||||
char *data,
|
||||
struct radeon_aos *aos,
|
||||
GLvoid *data,
|
||||
int size,
|
||||
int stride,
|
||||
int count )
|
||||
|
|
@ -323,8 +138,6 @@ static void emit_tex_vector( GLcontext *ctx,
|
|||
if (RADEON_DEBUG & DEBUG_VERTS)
|
||||
fprintf(stderr, "%s %d/%d\n", __FUNCTION__, count, size);
|
||||
|
||||
assert (!rvb->buf);
|
||||
|
||||
switch (size) {
|
||||
case 4: emitsize = 3; break;
|
||||
case 3: emitsize = 3; break;
|
||||
|
|
@ -333,34 +146,32 @@ static void emit_tex_vector( GLcontext *ctx,
|
|||
|
||||
|
||||
if (stride == 0) {
|
||||
radeonAllocDmaRegion( rmesa, rvb, 4 * emitsize, 4 );
|
||||
radeonAllocDmaRegion(rmesa, &aos->bo, &aos->offset, emitsize * 4, 32);
|
||||
count = 1;
|
||||
rvb->aos_start = GET_START(rvb);
|
||||
rvb->aos_stride = 0;
|
||||
rvb->aos_size = emitsize;
|
||||
aos->stride = 0;
|
||||
}
|
||||
else {
|
||||
radeonAllocDmaRegion( rmesa, rvb, 4 * emitsize * count, 4 );
|
||||
rvb->aos_start = GET_START(rvb);
|
||||
rvb->aos_stride = emitsize;
|
||||
rvb->aos_size = emitsize;
|
||||
radeonAllocDmaRegion(rmesa, &aos->bo, &aos->offset, emitsize * count * 4, 32);
|
||||
aos->stride = emitsize;
|
||||
}
|
||||
|
||||
aos->components = emitsize;
|
||||
aos->count = count;
|
||||
|
||||
/* Emit the data
|
||||
*/
|
||||
switch (size) {
|
||||
case 1:
|
||||
emit_s0_vec( ctx, rvb, data, stride, count );
|
||||
emit_s0_vec( out, data, stride, count );
|
||||
break;
|
||||
case 2:
|
||||
emit_vec8( ctx, rvb, data, stride, count );
|
||||
radeonEmitVec8( out, data, stride, count );
|
||||
break;
|
||||
case 3:
|
||||
emit_vec12( ctx, rvb, data, stride, count );
|
||||
radeonEmitVec12( out, data, stride, count );
|
||||
break;
|
||||
case 4:
|
||||
emit_stq_vec( ctx, rvb, data, stride, count );
|
||||
emit_stq_vec( out, data, stride, count );
|
||||
break;
|
||||
default:
|
||||
assert(0);
|
||||
|
|
@ -392,12 +203,12 @@ void radeonEmitArrays( GLcontext *ctx, GLuint inputs )
|
|||
|
||||
if (1) {
|
||||
if (!rmesa->tcl.obj.buf)
|
||||
emit_vector( ctx,
|
||||
&rmesa->tcl.obj,
|
||||
(char *)VB->ObjPtr->data,
|
||||
VB->ObjPtr->size,
|
||||
VB->ObjPtr->stride,
|
||||
count);
|
||||
rcommon_emit_vector( ctx,
|
||||
&rmesa->tcl.obj,
|
||||
(char *)VB->ObjPtr->data,
|
||||
VB->ObjPtr->size,
|
||||
VB->ObjPtr->stride,
|
||||
count);
|
||||
|
||||
switch( VB->ObjPtr->size ) {
|
||||
case 4: vfmt |= RADEON_CP_VC_FRMT_W0;
|
||||
|
|
@ -412,12 +223,12 @@ void radeonEmitArrays( GLcontext *ctx, GLuint inputs )
|
|||
|
||||
if (inputs & VERT_BIT_NORMAL) {
|
||||
if (!rmesa->tcl.norm.buf)
|
||||
emit_vector( ctx,
|
||||
&(rmesa->tcl.norm),
|
||||
(char *)VB->NormalPtr->data,
|
||||
3,
|
||||
VB->NormalPtr->stride,
|
||||
count);
|
||||
rcommon_emit_vector( ctx,
|
||||
&(rmesa->tcl.norm),
|
||||
(char *)VB->NormalPtr->data,
|
||||
3,
|
||||
VB->NormalPtr->stride,
|
||||
count);
|
||||
|
||||
vfmt |= RADEON_CP_VC_FRMT_N0;
|
||||
component[nr++] = &rmesa->tcl.norm;
|
||||
|
|
@ -438,12 +249,12 @@ void radeonEmitArrays( GLcontext *ctx, GLuint inputs )
|
|||
}
|
||||
|
||||
if (!rmesa->tcl.rgba.buf)
|
||||
emit_vector( ctx,
|
||||
&(rmesa->tcl.rgba),
|
||||
(char *)VB->ColorPtr[0]->data,
|
||||
emitsize,
|
||||
VB->ColorPtr[0]->stride,
|
||||
count);
|
||||
rcommon_emit_vector( ctx,
|
||||
&(rmesa->tcl.rgba),
|
||||
(char *)VB->ColorPtr[0]->data,
|
||||
emitsize,
|
||||
VB->ColorPtr[0]->stride,
|
||||
count);
|
||||
|
||||
|
||||
component[nr++] = &rmesa->tcl.rgba;
|
||||
|
|
@ -453,12 +264,12 @@ void radeonEmitArrays( GLcontext *ctx, GLuint inputs )
|
|||
if (inputs & VERT_BIT_COLOR1) {
|
||||
if (!rmesa->tcl.spec.buf) {
|
||||
|
||||
emit_vector( ctx,
|
||||
&rmesa->tcl.spec,
|
||||
(char *)VB->SecondaryColorPtr[0]->data,
|
||||
3,
|
||||
VB->SecondaryColorPtr[0]->stride,
|
||||
count);
|
||||
rcommon_emit_vector( ctx,
|
||||
&rmesa->tcl.spec,
|
||||
(char *)VB->SecondaryColorPtr[0]->data,
|
||||
3,
|
||||
VB->SecondaryColorPtr[0]->stride,
|
||||
count);
|
||||
}
|
||||
|
||||
vfmt |= RADEON_CP_VC_FRMT_FPSPEC;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue