mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 16:08:04 +02:00
r300g: Use common state funcs for translating vert formats.
This commit is contained in:
parent
1ef0341ea7
commit
24c6fdbd32
1 changed files with 6 additions and 72 deletions
|
|
@ -27,85 +27,19 @@
|
|||
|
||||
#include "r300_cs.h"
|
||||
#include "r300_context.h"
|
||||
#include "r300_state_inlines.h"
|
||||
#include "r300_reg.h"
|
||||
#include "r300_winsys.h"
|
||||
|
||||
static void translate_vertex_format(enum pipe_format format,
|
||||
unsigned nr_comps,
|
||||
unsigned component_size,
|
||||
unsigned dst_loc,
|
||||
uint32_t *hw_fmt1,
|
||||
uint32_t *hw_fmt2)
|
||||
{
|
||||
uint32_t fmt1 = 0;
|
||||
|
||||
switch (pf_type(format))
|
||||
{
|
||||
case PIPE_FORMAT_TYPE_FLOAT:
|
||||
assert(component_size == 4);
|
||||
fmt1 = R300_DATA_TYPE_FLOAT_1 + nr_comps - 1;
|
||||
break;
|
||||
case PIPE_FORMAT_TYPE_UNORM:
|
||||
case PIPE_FORMAT_TYPE_SNORM:
|
||||
case PIPE_FORMAT_TYPE_USCALED:
|
||||
case PIPE_FORMAT_TYPE_SSCALED:
|
||||
if (component_size == 1)
|
||||
{
|
||||
assert(nr_comps == 4);
|
||||
fmt1 = R300_DATA_TYPE_BYTE;
|
||||
}
|
||||
else if (component_size == 2)
|
||||
{
|
||||
if (nr_comps == 2)
|
||||
fmt1 = R300_DATA_TYPE_SHORT_2;
|
||||
else if (nr_comps == 4)
|
||||
fmt1 = R300_DATA_TYPE_SHORT_4;
|
||||
else
|
||||
assert(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
assert(0);
|
||||
}
|
||||
|
||||
if (pf_type(format) == PIPE_FORMAT_TYPE_SNORM)
|
||||
{
|
||||
fmt1 |= R300_SIGNED;
|
||||
}
|
||||
else if (pf_type(format) == PIPE_FORMAT_TYPE_SSCALED)
|
||||
{
|
||||
fmt1 |= R300_SIGNED;
|
||||
fmt1 |= R300_NORMALIZE;
|
||||
}
|
||||
else if (pf_type(format) == PIPE_FORMAT_TYPE_USCALED)
|
||||
{
|
||||
fmt1 |= R300_NORMALIZE;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
assert(0);
|
||||
break;
|
||||
}
|
||||
|
||||
*hw_fmt1 = fmt1 | (dst_loc << R300_DST_VEC_LOC_SHIFT);
|
||||
*hw_fmt2 = (pf_swizzle_x(format) << R300_SWIZZLE_SELECT_X_SHIFT) |
|
||||
(pf_swizzle_y(format) << R300_SWIZZLE_SELECT_Y_SHIFT) |
|
||||
(pf_swizzle_z(format) << R300_SWIZZLE_SELECT_Z_SHIFT) |
|
||||
(pf_swizzle_w(format) << R300_SWIZZLE_SELECT_W_SHIFT) |
|
||||
(0xf << R300_WRITE_ENA_SHIFT);
|
||||
}
|
||||
|
||||
static INLINE void setup_vertex_attribute(struct r300_vertex_info *vinfo,
|
||||
struct pipe_vertex_element *vert_elem,
|
||||
unsigned attr_num)
|
||||
{
|
||||
uint32_t hw_fmt1, hw_fmt2;
|
||||
translate_vertex_format(vert_elem->src_format,
|
||||
vert_elem->nr_components,
|
||||
pf_size_x(vert_elem->src_format),
|
||||
attr_num,
|
||||
&hw_fmt1,
|
||||
&hw_fmt2);
|
||||
uint16_t hw_fmt1, hw_fmt2;
|
||||
|
||||
hw_fmt1 = r300_translate_vertex_data_type(vert_elem->src_format) |
|
||||
(attr_num << R300_DST_VEC_LOC_SHIFT);
|
||||
hw_fmt2 = r300_translate_vertex_data_swizzle(vert_elem->src_format);
|
||||
|
||||
if (attr_num % 2 == 0)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue