|
|
@@ -80,13 +80,10 @@ static int r300_get_param(struct pipe_screen* pscreen, int param) |
|
|
|
struct r300_screen* r300screen = r300_screen(pscreen); |
|
|
|
|
|
|
|
switch (param) { |
|
|
|
/* XXX cases marked "IN THEORY" are possible on the hardware, |
|
|
|
* but haven't been implemented yet. */ |
|
|
|
case PIPE_CAP_MAX_TEXTURE_IMAGE_UNITS: |
|
|
|
/* XXX I'm told this goes up to 16 */ |
|
|
|
return 8; |
|
|
|
case PIPE_CAP_NPOT_TEXTURES: |
|
|
|
/* IN THEORY */ |
|
|
|
return 0; |
|
|
|
case PIPE_CAP_TWO_SIDED_STENCIL: |
|
|
|
if (r300screen->caps->is_r500) { |
|
|
@@ -95,16 +92,26 @@ static int r300_get_param(struct pipe_screen* pscreen, int param) |
|
|
|
return 0; |
|
|
|
} |
|
|
|
case PIPE_CAP_GLSL: |
|
|
|
if (r300screen->caps->is_r500) { |
|
|
|
return 1; |
|
|
|
} else { |
|
|
|
return 0; |
|
|
|
} |
|
|
|
/* I'll be frank. This is a lie. |
|
|
|
* |
|
|
|
* We don't truly support GLSL on any of this driver's chipsets. |
|
|
|
* To be fair, no chipset supports the full GLSL specification |
|
|
|
* to the best of our knowledge, but some of the less esoteric |
|
|
|
* features are still missing here. |
|
|
|
* |
|
|
|
* Rather than cripple ourselves intentionally, I'm going to set |
|
|
|
* this flag, and as Gallium's interface continues to change, I |
|
|
|
* hope that this single monolithic GLSL enable can slowly get |
|
|
|
* split down into many different pieces and the state tracker |
|
|
|
* will handle fallbacks transparently, like it should. |
|
|
|
* |
|
|
|
* ~ C. |
|
|
|
*/ |
|
|
|
return 1; |
|
|
|
case PIPE_CAP_ANISOTROPIC_FILTER: |
|
|
|
return 1; |
|
|
|
case PIPE_CAP_POINT_SPRITE: |
|
|
|
/* IN THEORY */ |
|
|
|
return 0; |
|
|
|
return 1; |
|
|
|
case PIPE_CAP_MAX_RENDER_TARGETS: |
|
|
|
return 4; |
|
|
|
case PIPE_CAP_OCCLUSION_QUERY: |
|
|
@@ -145,10 +152,8 @@ static int r300_get_param(struct pipe_screen* pscreen, int param) |
|
|
|
case PIPE_CAP_TEXTURE_MIRROR_REPEAT: |
|
|
|
return 1; |
|
|
|
case PIPE_CAP_MAX_VERTEX_TEXTURE_UNITS: |
|
|
|
/* XXX guessing (what a terrible guess) */ |
|
|
|
return 2; |
|
|
|
return 0; |
|
|
|
case PIPE_CAP_TGSI_CONT_SUPPORTED: |
|
|
|
/* XXX */ |
|
|
|
return 0; |
|
|
|
case PIPE_CAP_BLEND_EQUATION_SEPARATE: |
|
|
|
return 1; |
|
|
@@ -229,6 +234,7 @@ static boolean check_tex_2d_format(enum pipe_format format, uint32_t usage, |
|
|
|
|
|
|
|
/* Z buffer or texture */ |
|
|
|
case PIPE_FORMAT_Z16_UNORM: |
|
|
|
case PIPE_FORMAT_Z24X8_UNORM: |
|
|
|
/* Z buffer with stencil or texture */ |
|
|
|
case PIPE_FORMAT_Z24S8_UNORM: |
|
|
|
retval = usage & |
|
|
@@ -239,7 +245,6 @@ static boolean check_tex_2d_format(enum pipe_format format, uint32_t usage, |
|
|
|
/* Definitely unsupported formats. */ |
|
|
|
/* Non-usable Z buffer/stencil formats. */ |
|
|
|
case PIPE_FORMAT_Z32_UNORM: |
|
|
|
case PIPE_FORMAT_Z24X8_UNORM: |
|
|
|
case PIPE_FORMAT_S8Z24_UNORM: |
|
|
|
case PIPE_FORMAT_X8Z24_UNORM: |
|
|
|
debug_printf("r300: Note: Got unsupported format: %s in %s\n", |
|
|
@@ -249,7 +254,6 @@ static boolean check_tex_2d_format(enum pipe_format format, uint32_t usage, |
|
|
|
/* XXX These don't even exist |
|
|
|
case PIPE_FORMAT_A32R32G32B32: |
|
|
|
case PIPE_FORMAT_A16R16G16B16: */ |
|
|
|
/* XXX Insert YUV422 packed VYUY and YVYU here */ |
|
|
|
/* XXX What the deuce is UV88? (r3xx accel page 14) |
|
|
|
debug_printf("r300: Warning: Got unimplemented format: %s in %s\n", |
|
|
|
pf_name(format), __FUNCTION__); |