mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-18 08:10:37 +02:00
r300g: Work around "defect" in r300compiler.
r300compiler doesn't handle half swizzles for vert shaders, which don't have them. So, for now, disable them.
This commit is contained in:
parent
218590f707
commit
229db2b8ad
4 changed files with 11 additions and 2 deletions
|
|
@ -179,6 +179,7 @@ static void r300_translate_fragment_shader(
|
|||
/* Translate TGSI to our internal representation */
|
||||
ttr.compiler = &compiler.Base;
|
||||
ttr.info = &fs->info;
|
||||
ttr.use_half_swizzles = TRUE;
|
||||
|
||||
r300_tgsi_to_rc(&ttr, fs->state.tokens);
|
||||
|
||||
|
|
|
|||
|
|
@ -307,7 +307,7 @@ static void handle_immediate(struct tgsi_to_rc * ttr,
|
|||
for (i = 0; i < 4; i++) {
|
||||
if (imm->u[i].Float == 0.0f) {
|
||||
swizzle |= RC_SWIZZLE_ZERO << (i * 3);
|
||||
} else if (imm->u[i].Float == 0.5f) {
|
||||
} else if (imm->u[i].Float == 0.5f && ttr->use_half_swizzles) {
|
||||
swizzle |= RC_SWIZZLE_HALF << (i * 3);
|
||||
} else if (imm->u[i].Float == 1.0f) {
|
||||
swizzle |= RC_SWIZZLE_ONE << (i * 3);
|
||||
|
|
@ -330,7 +330,8 @@ static void handle_immediate(struct tgsi_to_rc * ttr,
|
|||
}
|
||||
}
|
||||
|
||||
void r300_tgsi_to_rc(struct tgsi_to_rc * ttr, const struct tgsi_token * tokens)
|
||||
void r300_tgsi_to_rc(struct tgsi_to_rc * ttr,
|
||||
const struct tgsi_token * tokens)
|
||||
{
|
||||
struct tgsi_parse_context parser;
|
||||
unsigned imm_index = 0;
|
||||
|
|
|
|||
|
|
@ -23,6 +23,8 @@
|
|||
#ifndef R300_TGSI_TO_RC_H
|
||||
#define R300_TGSI_TO_RC_H
|
||||
|
||||
#include "pipe/p_compiler.h"
|
||||
|
||||
struct radeon_compiler;
|
||||
|
||||
struct tgsi_full_declaration;
|
||||
|
|
@ -41,6 +43,10 @@ struct tgsi_to_rc {
|
|||
int immediate_offset;
|
||||
struct swizzled_imms * imms_to_swizzle;
|
||||
unsigned imms_to_swizzle_count;
|
||||
|
||||
/* Vertex shaders have no half swizzles, and no way to handle them, so
|
||||
* until rc grows proper support, indicate if they're safe to use. */
|
||||
boolean use_half_swizzles;
|
||||
};
|
||||
|
||||
void r300_tgsi_to_rc(struct tgsi_to_rc * ttr, const struct tgsi_token * tokens);
|
||||
|
|
|
|||
|
|
@ -340,6 +340,7 @@ void r300_translate_vertex_shader(struct r300_context* r300,
|
|||
/* Translate TGSI to our internal representation */
|
||||
ttr.compiler = &compiler.Base;
|
||||
ttr.info = &vs->info;
|
||||
ttr.use_half_swizzles = FALSE;
|
||||
|
||||
r300_tgsi_to_rc(&ttr, vs->state.tokens);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue